php-newbie: Fehler in Sticky Form

Beitrag lesen

Hallo allerseits!

Ich bin grad dabei PHP zu büffeln. Als Hilfe hab ich mir das angeblich einfache Buch "PHP & MySQL von Kopf bis Fuss". Das ist soweit auch ganz gut (ausser dass die Autoren bis zum Kapitel 4 mindestens schon 20 Semikolon und Klammerfehler gemacht haben). Nun bin ich aber bei einem Affenformular und raff da irgendwas nicht (oder es ist ein Fehler der Autoren).

Hier das fertige Formular (ohne CSS) wie es für das Buch zur Verfügung steht.

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
<head>  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  <title>Mach mich Elvis - E-Mail senden</title>  
  <link rel="stylesheet" type="text/css" href="style.css" />  
</head>  
<body>  
  <img src="blankface.jpg" width="161" height="350" alt="" style="position: absolute;left:380px" />  
  <img name="elvislogo" src="elvislogo.gif" width="257" height="32" border="0" alt="Mach Mich Elvis" />  
  <p><strong>Privat:</strong> NUR zu Elmars Verwendung!<br />  
  Eine E-Mail schreiben und an alle auf der Liste versenden.</p>  
  
<?php  
  if (isset($_POST['submit'])) {  
      $von = 'elmar@machmichelvis.com';  
	  $betreff = $_POST['betreff'];  
	  $text = $_POST['elvismail'];  
	  $form_ausgeben = false;  
	  
	  if (empty($betreff) && empty($text)) {  
	    // $betreff UND $text müssen leer sein  
	    echo 'Sie haben Betreff und Inhalt vergessen.<br />';  
	    $form_ausgeben = true;  
	  }  
	  
	  if (empty($betreff) && (!empty($text))) {  
	    echo 'Sie haben den Betreff vergessen.<br />';  
	    $form_ausgeben = true;  
	  }  
	  
	  if ((!empty($betreff)) && empty($text)) {  
	    echo 'Sie haben den Inhalt vergessen.<br />';  
	    $form_ausgeben = true;  
	  }  
	  
	  if ((!empty($betreff)) && (!empty($text))) {  
		  // Alles in Ordnung, Mails senden  
		  $db = mysqli_connect('localhost', 'elmar', 'derking', 'elvis_laden')  
		    or die('Fehler beim Verbinden mit MySQL-Server.');  
		  mysqli_set_charset($db, "utf8");  
		  
		  $sql = "SELECT * FROM email_liste";  
		  $ergebnis = mysqli_query($db, $sql)  
		    or die('Fehler bei Datenbankabfrage.');  
		  
		  while ($zeile = mysqli_fetch_array($ergebnis)) {  
		    $an = $zeile['email'];  
		    $vorname = $zeile['vorname'];  
		    $nachname = $zeile['nachname'];  
		    $msg = "Liebe(r) $vorname $nachname,\n$text";  
		    mail($an, $betreff, $msg, 'From:' . $von);  
		    echo 'Gemailt an: ' . $an . '<br />';  
		  }  
	  	mysqli_close($db);  
	  }  
  }  
  else {  
    $form_ausgeben = true;  
  }  
  
  if ($form_ausgeben) {  
?>  
  
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
  <label for="betreff">Betreff:</label><br />  
  <input id="betreff" name="betreff" type="text" size="30"  
    value="<?php echo $betreff; ?>"/><br />  
  <label for="elvismail">E-Mail-Inhalt:</label><br />  
  <textarea id="elvismail" name="elvismail" rows="8" cols="40">  
     <?php echo $text; ?></textarea><br />  
  <input type="submit" name="submit" value="Senden" />  
</form>  
<?php  
  }  
?>  
</body>  
</html>  

Wenn ich nun die Seite lade, dann erscheint in den Formularfelder eine Fehlermeldung, dass jeweils die Variable $text und $betreff nicht definiert seien. Das macht meiner Meinung nach auch Sinn, da die Variablen ja nur definiert werden, wenn $_POST['submit'] gesetzt ist. Richtig?

Wenn meine Annahme stimmt, ist das also ein Fehler im Buch. Aber wie müsst ich denn das nun lösen, dass keine Fehlermeldung beim ersten laden erscheint?

Einfach unter

  
  else {  
    $form_ausgeben = true;  

nochmals die variablen definieren... sprich:

  
    $betreff = $_POST['betreff'];  
    $text = $_POST['elvismail'];  

Korrekt?

Danke schonmal für eure Hilfe!

Mike