Autor |
Nachricht |
Macciquita
Threadersteller
Dabei seit: 24.07.2005
Ort: Monaco di Baviera
Alter: -
Geschlecht:
|
Verfasst Do 28.06.2007 14:00
Titel kontakt php meldet immer "nicht alles ausgefüllt" |
|
|
Hallo zusammen,
mein Kontakt Formular geht nicht. Egal ob man nur die relevanten oder sogar alle Felder ausfüllt - es kommt dauernd "sie haben nicht alle Felder ausgefüllt"
Das gleiche script funktioniert aber auf einem anderen server
Danke für tipps
<?php
if($name == FALSE || $vorname == FALSE || $message == FALSE || $email == FALSE) {
echo "Sie haben nicht alle notwendigen Felder ausgefüllt.<br>Bitte gehen Sie <a href='javascript:history.go(-1);' class='navigation'>zurück</a> und korrigieren Sie dies.";
}
else {
$message = stripslashes($message);
$teil[0] = "Folgende Email wurde von XXX versendet:\n\n";
$teil[1] = "Name: ".$name."\n";
$teil[2] = "Vorname: ".$vorname."\n";
$teil[3] = "Strasse: ".$strasse."\n";
$teil[4] = "PLZ/Ort: ".$plz."-".$ort."\n";
$teil[5] = "Email: ".$email."\n";
$teil[6] = "Anliegen: ".$message."\n\n";
for($i=0; $i <= 6; $i++) {
$inhalt = $inhalt.$teil[$i];
}
$mailsend = mail("info@XXX.de","Kontakt der Webseite","$inhalt","From:$email");
echo "Vielen Dank! Ich habe Ihre Nachricht erhalten und werde mich sobald wie möglich mit Ihnen in Verbindung setzen.";
}
?>
|
|
|
|
|
Skyw4lker
Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht:
|
Verfasst Do 28.06.2007 14:02
Titel
|
|
|
wo füllst du denn die Variablen für die IF Abfrage? ich tippe mal auf register globals
|
|
|
|
|
Anzeige
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Do 28.06.2007 14:14
Titel
|
|
|
1. woher kommen die variablen
2. eine TRUE/FALSE abfrage sollte typecht abgefragt (if ($foo === TRUE)) abgefragt werden
3. error_reporting()
vielleicht schreit php um hilfe.
|
|
|
|
|
Macciquita
Threadersteller
Dabei seit: 24.07.2005
Ort: Monaco di Baviera
Alter: -
Geschlecht:
|
Verfasst Do 28.06.2007 14:19
Titel
|
|
|
sorry, das versteh ich nicht. Ich kann kein php programmieren - nur ein bisschen anpassen. Bis jetzt hat das script schon mehrfach guten dienst erwiesen. Ich habe ein kontakt.php und eine kontakt_submit.php datei. Finde leider keine Verbindung zu den if werten
|
|
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
Verfasst Do 28.06.2007 14:29
Titel
|
|
|
Du hast register_globals auf off gestellt was auch richtig ist.
Also solltest Du mit den Globals arbeiten: $_POST $_GET $_REQUEST
Gruß
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Do 28.06.2007 23:26
Titel
|
|
|
und mal wieder...
Das ist kein Mailscript, sondern eine potientielle Spamschleuder!
Dein Hoster wird sich freuen, wenn die ersten paar tausend Spammails damit verschickt wurden...
Ein Angriff per E-Mail-Header-Injection ist möglich.
Man kann deinem Script so unerwünschte Headerzeilen unterschummeln. Mit CC- und BCC-Headern könnte man Mails an verschiedene Empfänger verschicken.
Headerzeilen werden durch Zeilenumbrüche voneinander getrennt. Also mußt du Zeilenumbrüche raus filtern!
Nie, nie, niemals darfst du irgendwelche Werte, die an dein Script übergeben werden, einfach ungeprüft in deine Funktionen einbauen! Alle Werte müssen erst geprüft und ggf. bereinigt werden.
Weiter. Damit verschickst du deine Mail:
Code: | $mailsend = mail("info@XXX.de","Kontakt der Webseite","$inhalt","From:$email"); |
Als optionalen Parameter kannst du mail() zusätzliche Headerzeilen mitgeben.
Du nutzt nur den From-Header. Da solltest du aber noch einige mehr einsetzen. Sicherlich willst du, daß deine Mails überall korrekt ankommen, also daß Sonderzeichen und Umlaute korrekt angezeigt werden?
Dann mußt du die verwendete Zeichenkodierung mit angeben. Ansonsten bleibt dem Mailclient nichts anderes übrig als zu raten.
Mach das mal folgendermaßen:
Code: | $header = "MIME-Version: 1.0\n";
$header.= "Content-type: text/html; charset=iso-8859-1\n";
$header.= "Content-Transfer-Encoding: 8bit\n";
$header.= "From: $_POST['email']\n";
$header.= "Reply-To: $_POST['email']\n";
$header.= "X-Mailer: PHP/" . phpversion() ."\n"; |
(Bei charset muß dann natürlich auch das wirklich verwendete Charset angeben werden.)
und dann übergibst du $header an mail():
Code: | $mailsend = mail( "info@XXX.de", "Kontakt der Webseite", $inhalt, $header ); |
Und dann frage ich mich, warum du den Rückgabewert von mail() in $mailsend speicherst, wenn du diesen Wert gar nicht benutzt.
Du gibst danach einfach eine Meldung aus und bedankst dich für die Mail.
Was, wenn die Mail gar nicht an den MTA übergeben werden konnte?
Code: | $mailsend = mail( "info@XXX.de", "Kontakt der Webseite", $inhalt, $header );
if ( $mailsend === TRUE )
{
echo "Vielen Dank! Ich habe Ihre Nachricht erhalten und werde mich sobald wie möglich mit Ihnen in Verbindung setzen.";
}
else
{
echo "Fehler. Leider konnte Ihre Email aus technischen Gründen nicht an den Mail Transfer Agent übergeben werden. Bitte versuchen Sie es später noch einmal.";
}
|
Zitat: | Du hast register_globals auf off gestellt was auch richtig ist. |
Ja.
Zitat: | Also solltest Du mit den Globals arbeiten: $_POST $_GET $_REQUEST |
Nein. Eben nicht mit globalen Variablen arbeiten. Das funktioniert ja eh nicht, wenn register_globals auf off steht.
Mit den superglobalen assoziativen Arrays arbeiten. (Aber schätzungsweise war das nur ein Flüchtigkeitsfehler und schon richtig gemeint...)
Und ich bin auch recht sicher, daß hier der Grund liegt, warum das Script nicht funktioniert...
Das Formular wird sicherlich per POST verschickt, also gibt es kein $name, sondern die Variable wird $_POST['name'] heißen. Gleiches für $vorname, $message, $email und die anderen Variablen aus dem Formular.
Weiter:
Code: |
$teil[0] = "Folgende Email wurde von XXX versendet:\n\n";
$teil[1] = "Name: ".$name."\n";
$teil[2] = "Vorname: ".$vorname."\n";
$teil[3] = "Strasse: ".$strasse."\n";
$teil[4] = "PLZ/Ort: ".$plz."-".$ort."\n";
$teil[5] = "Email: ".$email."\n";
$teil[6] = "Anliegen: ".$message."\n\n";
for($i=0; $i <= 6; $i++) {
$inhalt = $inhalt.$teil[$i]; |
Was soll denn das?
Ein Array füllen und eine for-Schleife einsetzen und einen String zusammenzusetzen?
Warum keine String-Konkatenation? Das setzt du ja sogar ein, um in deiner Schleife die Strings zu verbinden...
Code: | $inhalt = "Folgende Email wurde von XXX versendet:\n\n";
$inhalt.= "Name: ".$name."\n";
$inhalt.= "Vorname: ".$vorname."\n";
$inhalt.= "Strasse: ".$strasse."\n";
$inhalt.= "PLZ/Ort: ".$plz."-".$ort."\n";
$inhalt.= "Email: ".$email."\n";
$inhalt.= "Anliegen: ".$message."\n\n"; |
Zitat: | 2. eine TRUE/FALSE abfrage sollte typecht abgefragt (if ($foo === TRUE)) abgefragt werden |
Das ist natürlich vollkommen richtig.
Aber in diesem Fall würde ich auf die Existenz der Variablen mit isset() testen.
Wenn hier nämlich das error_reporting höher eingestellt wird, gibt es gleich ein paar Notices:
Code: | if($name == FALSE || $vorname == FALSE || $message == FALSE || $email == FALSE) { |
Notice: Undefined variable: name in ...
Notice: Undefined variable: vorname in ...
Notice: Undefined variable: message in ...
Notice: Undefined variable: email in ...
Code: | Bitte gehen Sie <a href='javascript:history.go(-1);' class='navigation'>zurück</a> und korrigieren Sie dies."; |
Oh nöh... Bitte nicht... Was machen denn die User ohne JavaScript?
Du weißt doch, wie die Seite mit dem Formular heißt? Warum denn dann hier JS einsetzen?
Schreib da den Namen des Dokuments rein und es funktioniert auch ohne JS.
Wenn du im Linkziel das Pseudoprotokoll javascript: einsetzt, dann hast du zu 90% was falsch gemacht.
Lieber ein echtes Linkziel einsetzen und die JS-Funktion mit onclick aufrufen. Du kannst false an den Link zurückgeben, damit dieser dann nicht ausgeführt wird.
So hast du aber immer eine Fallbackmöglichkeit für die User, die kein JS einsetzen wollen oder können.
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst Fr 29.06.2007 10:35
Titel
|
|
|
Such doch mal bitte nach "Mein Kontaktformular geht nicht" hier in der Boardsuche. Ich versteh nicht, warum Rob die Faulheit hier auch noch belohnt.
|
|
|
|
|
|
|
|
Ähnliche Themen |
Möchte Formular ausgefüllt zurückbekommen
PHP Abfrage ob alle Felder ausgefüllt wurden
PHP Formular - Fehlermeldung wenn nicht alles ausgefüllt ist
Kontakt-Adressverwaltung
[PHP]Problem mit Kontakt Formular
Kontakt Formular Coden. Help!
|
|