• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

2 Formulare auf einer Seite

Status
Für weitere Antworten geschlossen.

Jeremygolf

Mitglied
Hallo ich habe eine Newsletteranmeldung und ein Kommentar Formular auf der gleichen Seite.
Wenn ich nun einen Kommentar schreiben will, kommt immer die Fehler Meldung vom Newsletter Script. Was muss ich tun um bei einem Formular nur ein Script auswähle, dass sich aber auf der gleichen Seite befindet?

Danke
 
Du musst das $_POST-Array richtig auswerten, sprich prüfen, welche Felder übergeben wurden. Aber ohne Quellcode kann dir hier niemand helfen.
 
Diese beide Scripte sind auf der gleichen seite.

Code:
<?php


$Name = "";
$Text = "";


if ($_POST['name'] != "") {
	include_once "admin/connect_to_mysql.php";
	
	// Be sure to filter this data to deter SQL injection, filter before querying database
	$Name = $_POST['name'];
	$Text = $_POST['text'];
	
    $numRows = mysql_num_rows($sql);
    
   	if (!$Text && !$Name){
   	
   	echo '<script type="text/javascript">alert("Bitte füllen Sie alle Felder aus");</script>'; 
		} 


	else {
		
		$sql_insert = mysql_query("INSERT INTO feedback (name, text, date) 
												    VALUES('$Name','$Text',now() )")  or die (mysql_error());
		
		echo '<script type="text/javascript">alert("Danke ' . $Name . ', Ihr Eintrag wurde erfolgreich gespeichert ");</script>';
	}
}
?>


<h2 style="border-top: 1px solid black; padding-bottom: 20px; padding-top: 20px;">Was denken Sie über mich?</h2>
	<form action="" method="post">
		Name, Vorname : <br/>
		<input class="name" name="name" type="text" value="<?php echo $Name; ?>" /><br /><br />
		Ihre Meinung:<br />
		<textarea class="text" name="text" type="text"><?php echo $Text; ?></textarea><br /><br />
		<input name="submit" type="submit" value="absenden" class="submit_btn">
	</form>

Code:
<?php


$Name = "";
$Email = "";
$msg_to_user = "";
if ($_POST['name'] != "") {
	
	
	include_once "admin/connect_to_mysql.php";
	
	// Be sure to filter this data to deter SQL injection, filter before querying database
	$Name = $_POST['name'];
	$Email = $_POST['email'];
	
	$sql = mysql_query("SELECT * FROM newsletter WHERE email='$Email'");
    $numRows = mysql_num_rows($sql);
    
   	if (!$Email){
   	
   	echo '<script type="text/javascript">alert("Bitte geben Sie eine E-Mail Adresse ein ' . $Eame . '.");</script>'; 
					
		}elseif ($numRows > 0) {
	
	echo '<script type="text/javascript">alert("' . $Email . ' ist bereits im System.");</script>'; 
				
	} 


	else {
		
		$sql_insert = mysql_query("INSERT INTO newsletter (name, email, datum) 
												    VALUES('$Name','$Email',now() )")  or die (mysql_error());
		
		echo '<script type="text/javascript">alert("Danke ' . $Name . ', Sie wurdden erfolgreich registriert.");</script>'; 
		$Name = "";
        $Email = "";
        
        $mail_absender="[email protected]";
		$betreff="Registrierung";
		$text="Sie wurden erfolgreich registriert. Der erste Newsletter folgt am 1. November.";
		
		mail($Email, $betreff, $text, "from:$mail_absender");


        
	}
	
}


?>
 
Du hast in beiden Formularen die Eingabefelder name, das geht natürlich mit $_POST['name'] in die Hose. Du musst eindeutige Feldnamen nehmen.
Und so solltest du nicht prüfen
PHP:
if ($_POST['name'] != "")
Benutze isset oder empty
 
Du kannst in beiden Formularen hidden fields unterbringen und diese abfragen. Mit
HTML:
<input type="hidden" name="formtype" value="kontaktformular" />
bzw.
HTML:
<input type="hidden" name="formtype" value="newsletter" />
in den einzelnen Formularen, kannst du mit einer ersten if-Abfrage entscheiden, ob du die Daten als Kontaktanfrage oder als Newsletter-Bestellung bearbeitest.
PHP:
if ($_POST["formtype"] == "kontaktformular") {
...
} elseif ($_POST["formtype"] == "newsletter") {
...
}
 
Unnötig? ich finds sauberer. Wird ein sichtbares Feld gelöscht oder bekommt einen anderen Namen (wenn in einem ½ Jahr der Code überarbeitet wird) funktioniert die Unterscheidung, welche Daten zu bearbeiten sind plötzlich nicht mehr.
Da finde ich es sauberer, einerseits Input-Felder zu haben, die meine Informationen transportieren und andererseits (unsichtbare) Felder zu haben, die die Formularerkennung steuern.
 
Wird ein sichtbares Feld gelöscht oder bekommt einen anderen Namen (wenn in einem ½ Jahr der Code überarbeitet wird) funktioniert die Unterscheidung, welche Daten zu bearbeiten sind plötzlich nicht mehr.
Das ist ein Argument, an das ich nicht gedacht habe. In der Regel wird an solchen Formularen ja nicht regelmäßig geändert. Aber ich stimme dir da voll und ganz zu.
 
PHP:
if(isset($_GET['senden'])) {
  $anfrage = $_GET['senden];
  if($anfrage == 'formular1') {
    // Deine Abfrage für das erste Formular
  }
  if($anfage == 'formular2') {
    // Deine Abfrage für das zweite Formular
  }
}


In den <form>-Tags dann jeweils

HTML:
<form action="?senden=formular1" method="post">

oder eben

HTML:
<form action="?senden=formular2" method="post">
 
Oder eben dieselbe Information in ein verstecktes input-Feld und per POST mitschicken, wie schon beschrieben.

Prinzipiell würde ich die POST-Variante vorziehen, kann man sich aber sicherlich endlos drüber streiten. Das hängt letztlich auch ein wenig an der Architektur der Restanwendung.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben