Probleme mit Script

drzoidberg3030

Grünschnabel
Hallo,

habe mir ein Kontaktformular zusammen gebastelt.
Die Email kommt an, aber es ist nichts drin.
Habe gelesen und rum getestet und bin mitlerweile verzweifelt weil ich den Fehler einfach nicht finde. Ist wahrscheinlich nur ein kleiner Fehler, aber ich seh den Code vor lauter Codes nicht mehr...

der html-code:

HTML:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dokument</title>
</head>
<style type="text/css">
<!--
body {
	background-color: #eaf9a5;
}
-->
</style></head>
<body>
<table width="100%" border="0">
  <tr>
    <td>Name:</td>
    <td><form id="form1" name="form1" method="post" action="formular_senden.php">
      <label>
        <input type="text" name="Name" id="Name" />
        </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>Vorname:</td>
    <td><form id="form2" name="form2" method="post" action="formular_senden.php">
      <label>
        <input type="text" name="Vorname" id="Vorname" />
        </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>Geburtsdatum:</td>
    <td><form id="form3" name="form3" method="post" action="formular_senden.php">
      <label>
        <select name="Tag" size="1" id="Tag">
          <option selected="selected">1</option>
          <option>2</option>
                  <option>31</option>
        </select>
        </label>
      <label>
      <select name="Monat" size="1" id="Monat">
        <option selected="selected">Januar</option>
        <option>Februar</option>
        <option>März</option>
        <option>April</option>
        <option>Mai</option>
        <option>Juni</option>
        <option>Juli</option>
        <option>August</option>
        <option>September</option>
        <option>Oktober</option>
        <option>November</option>
        <option>Dezember</option>
      </select>
      </label>
      <label>
      
      <select name="Jahr" id="Jahr">
<option label="--" value="">--</option>
<option label="1911" value="1911">1911</option>
<option label="2002" value="2002">2002</option>
</select>
      </label>
    </form>    </td>
  </tr>
  <tr>
    <td>Strasse/Hausnr.:</td>
    <td><form id="form4" name="form4" method="post" action="formular_senden.php">
      <label>
        <input type="text" name="Strasse" id="Strasse" />
        </label>
      <label>
      <input name="Nummer" type="text" id="Nummer" size="7" maxlength="7" />
      </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>PLZ/Ort:</td>
    <td><form id="form5" name="form5" method="post" action="formular_senden.php">
      <label>
        <input name="PLZ" type="text" id="PLZ" size="5" maxlength="5" />
        </label>
      <label>
      <input type="text" name="Ort" id="Ort" />
      </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>Telefon:</td>
    <td><form id="form6" name="form6" method="post" action="formular_senden.php">
      <label>
        <input type="text" name="Telefon" id="Telefon" />
        </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>E-Mail:</td>
    <td><form id="form7" name="form7" method="post" action="formular_senden.php">
      <label>
        <input type="text" name="Email" id="Email" />
        </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>Was sind Deine Ausbildungsmotive:</td>
    <td><form id="form8" name="form8" method="post" action="formular_senden.php">
      <label>
        <textarea name="Motive" id="Motive" cols="40" rows="5"></textarea>
        </label>
    </form>
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><form id="Submit" name="Submit" method="post" action="formular_senden.php">
      <label>
        <input type="Submit" name="Submit" id="Submit" value="Absenden" />
        </label>
    </form>
    </td>
  </tr>
</table>
</body>

und die formular_senden.php

PHP:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dokument</title>
</head>

<body>
<?php

 $Name=$_POST[Name];
 $Vorname=$_REQUEST[Vorname];
  $Tag=$_REQUEST[Tag];
   $Monat=$_REQUEST[Monat];
    $Jahr=$_REQUEST[Jahr];
	 $Strasse=$_REQUEST[Strasse];
	  $Nummer=$_REQUEST[Nummer];
	  	  $PLZ=$_REQUEST[PLZ];
		  	  $Ort=$_REQUEST[Ort];
			  	  $Telefon=$_REQUEST[Telefon];
				  	  $Email=$_REQUEST[Email];
					  	  $Motive=$_REQUEST[Motive];
 

if ($form1) { $message .= "Name: $form1 \n"; }
 if ($Vorname) { $message .= "Vorname: $Vorname \n"; }
  if ($Tag) { $message .= "Geburtsdatum Tag: $Tag \n"; }
   if ($Monat) { $message .= "Geburtsdatum Monat: $Monat \n"; }
    if ($Jahr) { $message .= "Geburtsdatum Jahr: $Jahr \n"; }
	 if ($Strasse) { $message .= "Strasse: $Strasse \n"; }
	  if ($Nummer) { $message .= "Nummer: $Nummer \n"; }
	  	  if ($PLZ) { $message .= "PLZ: $PLZ \n"; }
		  	  if ($Ort) { $message .= "Ort: $Ort \n"; }
			  	  if ($Telefon) { $message .= "Telefon: $Telefon \n"; }
				  	  if ($Email) { $message .= "Email: $Email \n"; }
					  	  if ($Motive) { $message .= "Motive: $Motive \n"; }
						  	  
	  
 
$empfaenger = "kontaktformular@meine-homepage.de";
 $absender = "kontaktformular@meine-homepage.de";
 $betreff = "Kontaktformular";
 
mail($empfaenger, $betreff, $message, "From: $absender", "-f$absender");
 
?>
</body>
</html>
 
Zuletzt bearbeitet:
Bitte den Code formatiert in [PHP]mein Code[/PHP] setzen.
So wie er jetzt da steht kann man das Ding kaum lesen

Aber nur mal so am Rande. Warum machst du für jede Feld einen eigenen Form-Tag?
 
Ist ne bunte Mischung aus Dreamweaver und verschiedenen Tutorials geworden.
Das ist glaub ich das Problem. Hab mich durch das ganze copy&paste verhunzt und weiss auch nicht mehr was von mir, was von dreamweaver und was ausm tutorial ist.
Und jetzt bin ich einfach nur Code-Blind.
 
Hmm, da lautet die Devise: Ablage P wie Papierkorb und noch mal von vorne. Diesmal aber mit einem Editor und nicht dem WYSIWYG-Müll, bei dem man nichts lernt, außer, wie man es _nicht_ macht!

Ernsthaft: Ein PHP-Entwickler braucht einen Editor, der Syntax-Highlighting vielleicht noch Hinting beherrscht. Es gibt ein paar nette Varianten, ich persönlich präferiere Eclipse+PDT.

Um deine Frage zu beantworten: die dutzenden Form-Tags sind das Problem. Du brauchst genau eine Form, in der alle notwendigen Felder untergebracht werden müssen. Beim Submit wird das Form und seine Inhalte an den Server gesendet. Wenn du mehrer Forms hast, müsstest du es irgendwie bewerkstelligen, das alle Forms gleichzeitig zum Server gesendet werden, und der dann sogar noch in der Lage ist, die alle irgendwie zu verbinden. Was gegen das HTML-Form-Prinzip verstößt.

Ich könnte dir den Code jetzt bereinigen, aber das ist nun mal dein Job :-)
 
Moin,

vielen Dank für die Antworten. @Saftmeister: Du hast völlig Recht.
Hab jetzt die Form-Tags raus genommen. Dann funktionierte es einwandfrei. Die Betonung liegt auf "funktionierte"!
Denn ich konnte wieder nicht genug kriegen und hab noch mehr dazu gefügt.
Jetzt bekomme ich die Fehlermeldung: "Parse error: syntax error, unexpected $end in /homepages/19/d209255769/htdocs/formular_senden.php on line 82"

Hier erstmal der Code:
PHP:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>

<?php
function check_email($email) {
if( !preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}|museum$/i", $Email) )  return true;
return false;
}
$name_tag[0] = "Sonntag";
$name_tag[1] = "Montag";
$name_tag[2] = "Dienstag";
$name_tag[3] = "Mittwoch";
$name_tag[4] = "Donnerstag";
$name_tag[5] = "Freitag";
$name_tag[6] = "Samstag";
$num_tag   = date( "w");
$day      = $name_tag[$num_tag];
$year      = date("Y");
$day_num   = date("d");
$month      = date("m");
$time      = (date("H:i"));

 $Name=$_POST[Name];
 $Vorname=$_REQUEST[Vorname];
 $Tag=$_REQUEST[Tag];
 $Monat=$_REQUEST[Monat];
 $Jahr=$_REQUEST[Jahr];
 $Strasse=$_REQUEST[Strasse];
$Nummer=$_REQUEST[Nummer];
$PLZ=$_REQUEST[PLZ];
 $Ort=$_REQUEST[Ort];
 $Telefon=$_REQUEST[Telefon];
 $Email=$_REQUEST[Email];
$Motive=$_REQUEST[Motive];
 
if ($flag==1) 
{

    if(!$Name){$fehler="Bitte Namen eingeben<br>";}
    if(!$Vorname){$fehler.="Bitte Vornamen eingeben<br>";}
    if(check_email($Email) & $Email!="") {$fehler.="Emailadresse ist ungültig<br>";}
    if(!$Email) {$fehler.="Bitte die Emailadresse eingeben<br>";}
    if(!$Motive) {$fehler.="Bitte Ausbildungsmotive angeben<br>";}
    if($fehler) //Bei Fehlern, Meldung ausgeben    
{
    $meldung="<b>" .$fehler. "</b>";
	unset($flag);
    echo "<font color='red'>Es sind folgede Fehler aufgetreten: <br> " .$meldung. "</font>";
}
    else 
{
if ($message) { $message .= "Nachricht gesendet am: $day, $day_num.$month.$year um $time\n"; }
if ($Name) { $message .= "Name: $Name \n"; }
 if ($Vorname) { $message .= "Vorname: $Vorname \n"; }
  if ($Tag) { $message .= "Geburtsdatum Tag: $Tag \n"; }
   if ($Monat) { $message .= "Geburtsdatum Monat: $Monat \n"; }
    if ($Jahr) { $message .= "Geburtsdatum Jahr: $Jahr \n"; }
	 if ($Strasse) { $message .= "Strasse: $Strasse \n"; }
	  if ($Nummer) { $message .= "Nummer: $Nummer \n"; }
	  	  if ($PLZ) { $message .= "PLZ: $PLZ \n"; }
		  	  if ($Ort) { $message .= "Ort: $Ort \n"; }
			  	  if ($Telefon) { $message .= "Telefon: $Telefon \n"; }
				  	  if ($Email) { $message .= "Email: $Email \n"; }
					  	  if ($Motive) { $message .= "Motive: $Motive \n"; }
}						  	  

	  
$empfaenger = "blabla@web.de";
 $absender = "test@web.de";
 $betreff = "Kontaktformular";
 
mail($empfaenger, $betreff, $message, "From: $absender", "-f$absender");
?>
</body>
</html>

Die besagte Zeile zeile ist das </html>
Ich verstehe einfach nicht warum. hab es weggelassen und getestet. ohne erfolg.
die datei wird doch mit diesem tag geschlossen oder etwa nicht?
Ich fang ja langsam an php zu verstehen, aber das ist mir echt zu hoch muss ich sagen. :-(
 
Für was brauchst du eigentlich die HTML-Ausgabe in deiner senden.php?
Schick das Formular an eine Datei, in dieser Datei machst du die Überprüfungen und schickst die Mail raus und leitest dann wieder zur Seite zurück.

Davon mal abgesehen:
PHP:
$Name=$_POST[Name];
 $Vorname=$_REQUEST[Vorname];
 $Tag=$_REQUEST[Tag];
 $Monat=$_REQUEST[Monat];
 $Jahr=$_REQUEST[Jahr];
 $Strasse=$_REQUEST[Strasse];
$Nummer=$_REQUEST[Nummer];
$PLZ=$_REQUEST[PLZ];
 $Ort=$_REQUEST[Ort];
 $Telefon=$_REQUEST[Telefon];
 $Email=$_REQUEST[Email];
$Motive=$_REQUEST[Motive];

Mit diesen Variablen sind Spammer herzlich eingeladen......

$_REQUEST sollte nicht verwendet werden. Du übergibst die Felder ja per Post, also hol sie auch aus dem $_POST.
Und ein Element aus dem Post-Array sollte in Hochkommas stehn:
PHP:
$_POST['Vorname']
 
Und ganz sinnvoll ist es auch den Quellcode korrekt einzurücken. Für jedes öffnende { die folgenden Zeilen ein Tab (oder x Leerzeichen) nach rechts einrücken. Für jedes schließende } die folgenden Zeilen ein Tab (oder x Leerzeichen) weniger einrücken.

Und dann siehst du ganz schnell, warum du die Fehlermeldung bekommst. Du hast nämlich an einer bestimmten Stelle ein } zu wenig. Der Parser (Parse error) wartet auf dieses } vergeblich, weshalb für ihn das Ende der Datei (on line 82) unerwartet kommt (unexpected $end)
 
Danke für die Antworten. Habt mir echt weiter geholfen.
Es hat funktioniert. Aber jetzt ****t es auf einmal wieder nicht.
Kann es sein das sich das php-script beim kontaktformular nicht mit dem javascript vom menu verträgt?
hier der php code:

PHP:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>titel</title>
</head>
<body>
<?php
function check_email($email) 
{
	if(preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}|museum$/i",$Email) )  return true;
	return false;
}
$name_tag[0] = "Sonntag";
$name_tag[1] = "Montag";
$name_tag[2] = "Dienstag";
$name_tag[3] = "Mittwoch";
$name_tag[4] = "Donnerstag";
$name_tag[5] = "Freitag";
$name_tag[6] = "Samstag";
$num_tag     = date( "w");
$day         = $name_tag[$num_tag];
$year        = date("Y");
$day_num     = date("d");
$month       = date("m");
$time        = (date("H:i"));
$Name=$_POST['Name'];
$Vorname=$_POST['Vorname'];
$Tag=$_POST['Tag'];
$Monat=$_POST['Monat'];
$Jahr=$_POST['Jahr'];
$Strasse=$_POST['Strasse'];
$Nummer=$_POST['Nummer'];
$PLZ=$_POST['PLZ'];
$Ort=$_POST['Ort'];
$Telefon=$_POST['Telefon'];
$Email=$_POST['Email'];
$Motive=$_POST['Motive'];
$empfaenger = "test@web.de";
$absender = "test2@web.de";
$betreff = "Kontaktformular";
if ($flag=1) 
{

    if(!$Name){$fehler.="Bitte Namen eingeben<br>";}
    if(!$Vorname){$fehler.="Bitte Vornamen eingeben<br>";}
    if(check_email($Email) & $Email!="") {$fehler.="Bitte die Emailadresse kontrollieren<br>";}
    if(!$Email) {$fehler.="Bitte die Emailadresse eingeben<br>";}
    if(!$Motive) {$fehler.="Bitte Ausbildungsmotive angeben<br>";}
    
	if($fehler) 
 
	{
    	$meldung="<b>" .$fehler. "</b>";
		unset($flag);
    	echo "<font black='red'>Es sind folgende Fehler aufgetreten: <br> " .$meldung. "</font>";
	}
		else 
		{
		
      $body01 = "Nachricht gesendet am $day, $day_num.$month.$year um $time:
----------------------------------------------------------------
Vorname        : $Vorname
Name           : $Name
eMail          : $Email
Geburtsdatum   : $Tag.$Monat.$Jahr
Adresse        : $Strasse $Nummer $PLZ $Ort
Telefon        : $Telefon
----------------------------------------------------------------
Nachricht:
$Motive";

       
       mail ($empfaenger, $betreff, $body01, "From:$absender");
       echo "Die Mail wurde gesendet.";
    	}
}

?>
</body>
</html>
 
Was genau funktioniert nicht? Warum kommen immer wieder diese Aussagen? "Es funktioniert nicht." Damit kann man nichts anfangen. Eine Fehlerbeschreibung sollte doch wohl drin sein, oder nicht? Warum muss man immer alles aus der Nase ziehen?

Schreib hin, was du erwartest, was statt dessen kommt, und wo du das Problem vermutest (wenn du eine Vermutung hast). Wenn nicht, alle Scripte(-Teile), die irgendwie involviert sind, hier posten. Am besten ein Beispiel, wie es aussehen soll, was aber tatsächlich kommt.

So kann man keine Fehlersuche beginnen.

Grundsätzlich: Verwende Logging! Es gibt x-tausend Möglichkeiten, zu debuggen. Wenn du nicht weißt, wo der Code lang läuft, zeichne den Pfad auf. Das kann man folgendermaßen machen:

- echo's an markanten Stellen einbauen, z.B. bei if-Konstrukten im if- und im else-Codeblock ein echo einbauen. Beispiel:

PHP:
if($a == 1)
{
  echo "a = 1";
  $a = 0;
}
else
{
  echo "a = $a";
  $a++;
}

- Statt dem Echo kannst du auch das Apache-Log "missbrauchen". Wenn du trigger_error() an markanten Stellen einbaust, hat das den Vorteil, das die Ausgabe nicht verhunzt wird, du aber trotzdem sehen kannst, wie dein Script im Detail arbeitet. Nachdem du trigger_error() eingebaut hast, kannst du nach dem Seitenaufruf in die error.log des Apachen schauen, dort stehen die Einträge zusammen mit dem Zeitpunkt der Ausführung drin.

- Du baust dir eine eigene Logging-Infrastruktur auf. Ich hab da mal vor geraumer Zeit eine Klasse gepostet, mit der man das machen kann: http://www.tutorials.de/attachments/php/50344d1263235843-logger.php.txt

Diese wird beispielsweise so angewendet:

PHP:
require 'Logger.php';

if($a == 1)
{
  Logger::log("a = 1");
  $a = 0;
}
else
{
  Logger::log("a = $a");
  $a++;
}

Die Ergebnisse landen in der Datei "app.log", das kannst du aber anpassen, wenn du den Quell-Code der Klasse anschaust.
 
Zurück