Kontaktformular geht plötzlich nicht mehr

Kettu

Mitglied
Wie jetzt herauskam, funktioniert das Kontaktformular auf meiner Webseite nicht mehr. Ich vermute, mein Provider hat in den letzten Monaten etwas an PHP geändert und es ist mir erst jetzt aufgefallen, da mich jemand ansprach, dass doch das Formular nicht funktioniert. :eek:

Ich finde jedoch den Fehler nicht, da das script bisher auch fehlerfrei lief :(
Leider bin ich auch, was PHP-Programmierung angeht, komplett raus. Ich hab seit Ewigkeiten nichts mehr selbst programmiert und bin daher auch absolut nicht mehr auf dem aktuellen Stand. Ich hoffe daher, ihr könnt mir helfen.

Das Formular besteht aus 2 Dateien, der Template-Datei und der PHP-Datei.

Template:
Code:
<form action="weiter.php" method="post">
<table class="contact">
<tr><td colspan="2" height="10">&nbsp;</td></tr>
<tr>
<td align="left" width="80" class="white">&nbsp;&nbsp;&nbsp;<b>Name:</b></td>
<td align="left"><input name="name" size="40" type="text" /></td>
</tr>
<tr>
<td align="left" width="80" class="white">&nbsp;&nbsp;&nbsp;<b>eMail:</b></td>
<td align="left"><input name="email" size="40" type="text" /></td>
</tr>
<tr>
<td align="left" width="80" class="white">&nbsp;&nbsp;&nbsp;<b>Betreff:</b></td>
<td align="left"><select name="betreff" size="1">
<option>Probleme mit dem Forum</option>
<option>Hinweis Forum/Website</option>
<option>Bannerwerbung</option>
</select></td>
</tr>
<tr>
<td align="left" width="80" valign="top" class="white">&nbsp;&nbsp;&nbsp;<b>Text:</b></td>
<td align="left"><textarea cols="40" name="text" rows="5"></textarea></td>
</tr>
<tr>
<td align="left" width="80">&nbsp;</td>
<td align="left"><input name="abschicken" type="submit" value="Abschicken" />
<input name="loeschen" type="reset" value="L&ouml;schen" /></td>
</tr>
<tr><td colspan="2" height="10">&nbsp;</td></tr>
</table>
</form>
Dateneingabe funktioniert, alles schön, aber sobald auf Abschicken geklickt wird, erscheint die echo-Ausgabe: Es ist ein Fehler aufgetreten.

weiter.php
Code:
<?php

if($abschicken)
{
   if(empty($name) || empty($email) || empty($text))
   {
      echo "Bitte gehen Sie zur&uuml;ck und f&uuml;llen Sie alle Felder aus!";
   }
   else
   {
      while(list($feld,$wert)=each($HTTP_POST_VARS))
      {
         if($feld!="abschicken")
         {
            $mailnachricht.=ucfirst($feld).": $wert\n";
         }
      }
      $mailnachricht.="\nDatum/Zeit: ";
      $mailnachricht.=date("d.m.Y H:i:s");
      $mailbetreff="Grund: ";
      $mailbetreff.=$HTTP_POST_VARS[betreff];
      mail("meinemail@addi.de", $mailbetreff, $mailnachricht, "From: $email");
      echo "Vielen Dank für Ihre/deine eMail! <br />Zurück mit dem Zurück Button Ihres / deines Browsers.";
   }
}
else
{
   echo "Ein Fehler ist aufgetreten. ";
}

?>

Vielen Dank für eure Hilfe!
VG Kettu
 
Ich denke, dass es an der Variable $HTTP_POST_VARS liegt, denn diese wurde in PHP 5 entfernt.

Außerdem greifst du einfach so auf die Form-Variablen zu (also $name). Das ist eine sehr große Sicherheitslücke, deshalb sollte man (schon seit langem) auf $_POST oder $_GET zurückgreifen.

Ich habe mal oben genanntes ausgetauscht:
PHP:
<?php
 
if( isset($_POST['abschicken']) )
{
   if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['text']))
   {
      echo "Bitte gehen Sie zur&uuml;ck und f&uuml;llen Sie alle Felder aus!";
   }
   else
   {
      while(list($feld,$wert)=each($_POST))
      {
         if($feld!="abschicken")
         {
            $mailnachricht.=ucfirst($feld).": $wert\n";
         }
      }
      $mailnachricht.="\nDatum/Zeit: ";
      $mailnachricht.=date("d.m.Y H:i:s");
      $mailbetreff="Grund: ";
      $mailbetreff.=$_POST['betreff'];
      mail("meinemail@addi.de", $mailbetreff, $mailnachricht, "From: $email");
      echo "Vielen Dank für Ihre/deine eMail! <br />Zurück mit dem Zurück Button Ihres / deines Browsers.";
   }
}
else
{
   echo "Ein Fehler ist aufgetreten. ";
}
 
?>
Außerdem ist zu empfehlen, den Inhalt der Mail mit [phpf]htmlspecialchars[/phpf] zu "entschärfen". Ansonsten könnten schädliche JavaScripte dadrin versteckt sein.
 
Zuletzt bearbeitet:
Hallo ComFreek,
vielen, vielen Dank für deine Hilfe. Hat super funktioniert. :D

Ich merk schon, ich hab einen riesen Entwicklungsschub in PHP verpennt :( Fünf Jahre nicht programmiert und ich kann wieder bei Null anfangen :(

Uhm bezüglich deines Tipps mit htmlentities(). Wie setze ich das im Formular um? Ich blicke da ehrlich gesagt grad überhaupt nicht durch :-(

Viele Grüße,
Kettu
 
Du könntest stattdessen auch einfach den Content-Type auf text/plain setzen, wenn du eh nicht HTML-Daten verschickst.

PHP:
$mailnachricht.="\nDatum/Zeit: ";
$mailnachricht.=date("d.m.Y H:i:s");
$mailbetreff="Grund: ";
$mailbetreff.=$_POST['betreff'];

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n";
$headers .= 'From: ' . htmlspecialchars($_POST['email'], ENT_QUOTES)."\r\n";

mail("meinemail@addi.de", $mailbetreff, $mailnachricht, $headers);
echo "Vielen Dank für Ihre/deine eMail! <br />Zurück mit dem Zurück Button Ihres / deines Browsers.";
Trotzdem habe ich bei der Email (bei From:) ein [phpf]htmlspecialchars[/phpf] hinzugefügt. Ich bin mir nicht sicher, aber man könnte die Email dann so modifizieren, dass man dann doch HTML einfügen könnte. Schaden kann es ja nicht ;)
 
Zuletzt bearbeitet:
Nochmals vielen Dank :) Du hast mir grad den Abend gerettet :D

Obwohl ich "befürchte", ich werde die nächste Zeit viel Zeit mit PHP verbringen, um mich und auch meine Webseite auf den neuesten Stand zu bringen. :eek: ;)
 
Kein Problem ;)
Setze doch bitte noch das Thema auf erledigt (Pfeil rechts vom Antworten-Button)
 
Zurück