Problem mit Kontaktformular
Pixelmeister
- php
Hallo!
Ich habe ein Problem mit einem Kontakformular. Ich habe leider nicht viel Ahnung von PHP, darum werde ich mich an euch.
Das Formular sendet bis auf die E-Mail Adresse keine Informationen weiter.
Hier der Code:
<?php
/* überprüfung ob der verschicken button gedrückt wurde */
if(isset($_POST['submit'])) {
$check_zero = true;
} else {
$check_zero = false;
}
/* überprüfung ob $absender_name ausgefüllt wurde */
if(!empty($_POST['absender_anrede'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_vorname ausgefüllt wurde */
if(!empty($_POST['absender_vorname'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_nachname ausgefüllt wurde */
if(!empty($_POST['absender_nachname'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_email ausgefüllt wurde und ob die Email richtig ist */
if(!empty($_POST['absender_email'])) {
$check_two = true;
} else {
$check_two = false;
}
$absender_email = preg_replace("#[\;\#\n\r\*\'\"<>&\%\!\(\)\{\}\[\]\?\\/\s]#","",$_POST['absender_email']);
if(!preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/",$absender_email)<1) {
$check_two_alpha = true;
} else {
$check_two_alpha = false;
}
/* überprüfung ob $absender_telefon ausgefüllt wurde */
if(!empty($_POST['absender_telefon'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfung ob $absender_land ausgefüllt wurde */
if(!empty($_POST['absender_land'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfung ob $absender_bestellung ausgefüllt wurde */
if(!empty($_POST['absender_bestellung'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfungen der wichtigen eingaben */
if($check_zero == 0 or $check_one == 0 or $check_two == 0 or $check_two_alpha == 0 or $check_three == 0) {
echo "Eines der Pflichtfelder wurde entweder nicht Ordnungsgemäß ausgefüllt oder Sie haben eins davon vergessen auzufüllen!\n
Bitte kehren Sie Zurück und überprüfen Sie ihre Eingaben!";
exit;
}
/* es werden ein paar sachen definiert */
$email_empfaenger = 'maxikostieg@web.de';
$email_betreff = 'Bestellung von AP-H';
$absender_name = $_POST['absender_name'];
$absender_email = $absender_email;
$absender_anrede = $absender_anrede;
$absender_vorname = $absender_vorname;
$absender_nachname = $absender_nachname;
$absender_email = $absender_email;
$absender_telefon = $absender_telefon;
$absender_land = $absender_land;
$absender_bestellung = $absender_bestellung;
$absender_angaben = $_POST['angaben'];
/* gestaltung der email die an uns geht */
$angaben = "
Anrede:<$absender_anrede>
Vorname:<$absender_vorname>
Nachname:<$absender_nachname>
E-Mail:<$absender_email>
Telefon:<$absender_telefon>
Land:<$absender_land>
Produkt:<$absender_bestellung>
";
if(mail($email_empfaenger,$email_betreff,$angaben,"From: $absender_email")) {
echo "Vielen Dank, Ihr Nachricht wurde Erfolgreich Versand!\nWir werde so Schnell wie möglich darauf Antworten!";
} else {
echo "Es Tut uns Leid aber Ihre Nachricht konnte nicht Versand werden!\nVersuchen Sie es doch nocheinmal!\n\n
Sie können auch Ihren Email Client Benutzen\n\nMeine Email: $email_empfaenger";
}
?>
HTML Code:
<h1>Bestellformular</h1>
<form method="post" action="mailer.php">
<table width="300" border="0" bordercolor=black cellspacing="0" cellpadding="0" height=400>
<td valign=top>Anrede:</td>
<td valign=top><label for="frau"><input type="radio" name="absender_anrede" value="Frau">Frau</label><label for="herr"><input type="radio" name="absender_anrede" value="Herr">Herr</label>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Vorname:</td>
<td><input type="text" name="absender_vorname"></td>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Nachname:</td>
<td><input type="text" name="absender_nachname"></td>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Email:</td>
<td valign=top><input type="text" name="absender_email"></td>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Telefon:</td>
<td valign=top><input type="text" name="absender_telefon" value="+49 "> </td>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Land:</td>
<td valign=top><select name="absender_land">
<option value="Deutschland">Deutschland</option>
<option value="Östereich">Östereich</option>
<option value="Schweiz">Schweiz</option>
</select>
</td>
</tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Produkt:</td>
<td valign=top><select name="absender_bestellung">
<option value="Fossilien aus dem Campan Hannovers (2. verbesserte Auflage)">Fossilien aus dem Campan Hannovers (2. verbesserte Auflage)</option>
</select>
</td>
<td colspan=2 height=17></td>
</tr>
<tr>
<td valign=top>Kontrollbox:</td>
<td><input name="absender_checkbox" type="checkbox" value="test"> <font size="0.5em">Hiermit bestätige ich, dass alle Daten vollständig und richtig sind.</font></td>
</tr>
<tr>
<td colspan=2 height=17></td>
</tr>
<tr>
<td></td>
<td valign=top><input type="submit" name="submit" value="Abschicken"> <input type="reset" value="Zurücksetzen"></td>
</tr>
</table>
</form>
So schaut die E-Mail aus:
Anrede:<>
Vorname:<>
Nachname:<>
E-Mail:m.stieg@gmx.net
Telefon:<>
Land:<>
Produkt:<>
Ich hoffe ihr könnt mir helfen.
Mit freundlichen Grüßen
Pixelmeister
PS: Hier ist die HP. http://www.ap-h.de/a.html
Hallo!
Ich habe ein Problem mit einem Kontakformular. Ich habe leider nicht viel Ahnung von PHP, darum werde ich mich an euch.
Das Formular sendet bis auf die E-Mail Adresse keine Informationen weiter.
Hier der Code:
<?php
/* überprüfung ob der verschicken button gedrückt wurde */
if(isset($_POST['submit'])) {
$check_zero = true;
} else {
$check_zero = false;
}
/* überprüfung ob $absender_name ausgefüllt wurde */
if(!empty($_POST['absender_anrede'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_vorname ausgefüllt wurde */
if(!empty($_POST['absender_vorname'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_nachname ausgefüllt wurde */
if(!empty($_POST['absender_nachname'])) {
$check_one = true;
} else {
$check_one = false;
}
/* überprüfung ob $absender_email ausgefüllt wurde und ob die Email richtig ist */
if(!empty($_POST['absender_email'])) {
$check_two = true;
} else {
$check_two = false;
}
$absender_email = preg_replace("#[;#\n\r*'"<>&%!(){}[]?\/\s]#","",$_POST['absender_email']);
if(!preg_match("/^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,4}|[0-9]{1,4})(]?)$/",$absender_email)<1) {
$check_two_alpha = true;
} else {
$check_two_alpha = false;
}
/* überprüfung ob $absender_telefon ausgefüllt wurde */
if(!empty($_POST['absender_telefon'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfung ob $absender_land ausgefüllt wurde */
if(!empty($_POST['absender_land'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfung ob $absender_bestellung ausgefüllt wurde */
if(!empty($_POST['absender_bestellung'])) {
$check_three = true;
} else {
$check_three = false;
}
/* überprüfungen der wichtigen eingaben */
if($check_zero == 0 or $check_one == 0 or $check_two == 0 or $check_two_alpha == 0 or $check_three == 0) {
echo "Eines der Pflichtfelder wurde entweder nicht Ordnungsgemäß ausgefüllt oder Sie haben eins davon vergessen auzufüllen!\n
Bitte kehren Sie Zurück und überprüfen Sie ihre Eingaben!";
exit;
}/* es werden ein paar sachen definiert */
$email_empfaenger = 'maxikostieg@web.de';
$email_betreff = 'Bestellung von AP-H';$absender_name = $_POST['absender_name'];
$absender_email = $absender_email;
$absender_anrede = $absender_anrede;
$absender_vorname = $absender_vorname;
$absender_nachname = $absender_nachname;
$absender_email = $absender_email;
$absender_telefon = $absender_telefon;
$absender_land = $absender_land;
$absender_bestellung = $absender_bestellung;
$absender_angaben = $_POST['angaben'];/* gestaltung der email die an uns geht */
$angaben = "
Anrede:<$absender_anrede>
Vorname:<$absender_vorname>
Nachname:<$absender_nachname>
E-Mail:<$absender_email>
Telefon:<$absender_telefon>
Land:<$absender_land>
Produkt:<$absender_bestellung>
";if(mail($email_empfaenger,$email_betreff,$angaben,"From: $absender_email")) {
echo "Vielen Dank, Ihr Nachricht wurde Erfolgreich Versand!\nWir werde so Schnell wie möglich darauf Antworten!";
} else {
echo "Es Tut uns Leid aber Ihre Nachricht konnte nicht Versand werden!\nVersuchen Sie es doch nocheinmal!\n\n
Sie können auch Ihren Email Client Benutzen\n\nMeine Email: $email_empfaenger";}
?>
>
>
> HTML Code:
>
> ~~~html
<h1>Bestellformular</h1>
>
> <form method="post" action="mailer.php">
> <table width="300" border="0" bordercolor=black cellspacing="0" cellpadding="0" height=400>
> <td valign=top>Anrede:</td>
> <td valign=top><label for="frau"><input type="radio" name="absender_anrede" value="Frau">Frau</label><label for="herr"><input type="radio" name="absender_anrede" value="Herr">Herr</label>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Vorname:</td>
> <td><input type="text" name="absender_vorname"></td>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Nachname:</td>
> <td><input type="text" name="absender_nachname"></td>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Email:</td>
> <td valign=top><input type="text" name="absender_email"></td>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Telefon:</td>
> <td valign=top><input type="text" name="absender_telefon" value="+49 "> </td>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Land:</td>
> <td valign=top><select name="absender_land">
> <option value="Deutschland">Deutschland</option>
> <option value="Östereich">Östereich</option>
> <option value="Schweiz">Schweiz</option>
> </select>
> </td>
> </tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Produkt:</td>
> <td valign=top><select name="absender_bestellung">
> <option value="Fossilien aus dem Campan Hannovers (2. verbesserte Auflage)">Fossilien aus dem Campan Hannovers (2. verbesserte Auflage)</option>
> </select>
> </td>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td valign=top>Kontrollbox:</td>
> <td><input name="absender_checkbox" type="checkbox" value="test"> <font size="0.5em">Hiermit bestätige ich, dass alle Daten vollständig und richtig sind.</font></td>
> </tr>
> <tr>
> <td colspan=2 height=17></td>
> </tr>
> <tr>
> <td></td>
> <td valign=top><input type="submit" name="submit" value="Abschicken"> <input type="reset" value="Zurücksetzen"></td>
> </tr>
> </table>
> </form>
So schaut die E-Mail aus:
Anrede:<>
Vorname:<>
Nachname:<>
E-Mail:m.stieg@gmx.net
Telefon:<>
Land:<>
Produkt:<>Ich hoffe ihr könnt mir helfen.
Mit freundlichen Grüßen
Pixelmeister
PS: Hier ist die HP. http://www.ap-h.de/a.html
Die einzigen Angaben, die du per PHP übernimmst, sind
$absender_email = preg_replace("#[;#\n\r\*'"<>&%!(){}[]?\/\s]#","",$_POST['absender_email']);
und
$absender_name = $_POST['absender_name'];
dann mailst du nur die Mailadresse weiter
$angaben = "
Anrede:<$absender_anrede>
Vorname:<$absender_vorname>
Nachname:<$absender_nachname>
E-Mail:<$absender_email>
Telefon:<$absender_telefon>
Land:<$absender_land>
Produkt:<$absender_bestellung>
";
und die bekommst du ja auch.
Meinst du, du könntest die POST-Werte abholen mit
$absender_anrede = $absender_anrede;
Das ist der Denkfehler.
Kalle
Pardon, habe vergessen, Zeilen zu löschen. Kleiner Laptop, aus den Augen, aus dem Sinn ...
Die einzigen Angaben, die du per PHP übernimmst, sind
$absender_email = preg_replace("#[;#\n\r\*'"<>&%!(){}[]?\/\s]#","",$_POST['absender_email']);
und
$absender_name = $_POST['absender_name'];
dann mailst du nur die Mailadresse weiter
$angaben = "
Anrede:<$absender_anrede>
Vorname:<$absender_vorname>
Nachname:<$absender_nachname>
E-Mail:<$absender_email>
Telefon:<$absender_telefon>
Land:<$absender_land>
Produkt:<$absender_bestellung>
";
und die bekommst du ja auch.
Meinst du, du könntest die POST-Werte abholen mit
$absender_anrede = $absender_anrede;
Das ist der Denkfehler.
Kalle
Hi!
Meinst du, du könntest die POST-Werte abholen mit
$absender_anrede = $absender_anrede;
Das ist der Denkfehler.
Ja, aber warum überhaupt "abholen". Sie sind doch schon da (in $_POST), man muss sie nur nutzen. Sie vorher noch umzukopieren bringt keine Pluspunkte.
Lo!
Meinst du, du könntest die POST-Werte abholen mit
$absender_anrede = $absender_anrede;
Das ist der Denkfehler.Ja, aber warum überhaupt "abholen". Sie sind doch schon da (in $_POST), man muss sie nur nutzen. Sie vorher noch umzukopieren bringt keine Pluspunkte.
Könntest du mir dies vtl. machen? Wie gesagt habe ich keine Ahnung von PHP und habe diesen Code in einem Forum gefunden.
Gruß
Pixel
Könntest du mir dies vtl. machen? Wie gesagt habe ich keine Ahnung von PHP und habe diesen Code in einem Forum gefunden.
Das würd ich schnellstens verlassen, wenn da so ein Schmarrn drinsteht :-)
Hier
$absender_name = $_POST['absender_name'];
holst du den Wert aus der $_POST Variablen. So wie es sein soll.
Mit dem hier
$absender_anrede = $absender_anrede;
machst du praktisch nichts. Du schreibst das in $absender_anrede nochmal rein, was bereits drin steht. Nämlich nix.
Schreib da wie bei der Mail auch das richtige Feld rein und es sollte funktionieren.
Übrigens kannst du sowas
if(isset($_POST['submit'])) {
$check_zero = true;
} else {
$check_zero = false;
}
auch einfacher schreiben:
$check_zero = isset($_POST['submit']);
Und wenn du da true und false reinschreibst, machts keinen Sinn später auf 0 zu testen. Es geht zwar, ist aber nicht wirklich verständlich.
Hier
$absender_name = $_POST['absender_name'];
holst du den Wert aus der $_POST Variablen. So wie es sein soll.
Und nun wundert er sich, warum $absender_name nicht in der Mail ist, obwohl richtig abgeholt.
1. Das Formular hat kein Feld absender_name, demnach ist also $_POST['absender_name'] mit Sicherheit nie vorhanden. Nicht etwa leer, sondern gar nicht vorhanden.
2. Der (nie vorhandene) Wert $absender_name wird auch gar nicht als Mail verschickt.
Ich habe nichts, hole das korrekt ab und gebe es nicht weiter. Tolles Forum.
Kalle
- Das Formular hat kein Feld absender_name, demnach ist also $_POST['absender_name'] mit Sicherheit nie vorhanden. Nicht etwa leer, sondern gar nicht vorhanden.
So was sollte man gerade einem Anfänger nicht sagen. Es kann immer alles mit jedem beliebigen Inhalt vorhanden sein, auch und gerade mit schädlichem Inhalt. Nur von diesem Formular wird das nicht kommen solange es kein entsprechendes Feld gibt.
Könntest du mir dies vtl. machen? Wie gesagt habe ich keine Ahnung von PHP und habe diesen Code in einem Forum gefunden.
Ah ja, das Nonsens-Forum:
$absender_email = $absender_email;
$absender_anrede = $absender_anrede;
$absender_vorname = $absender_vorname;
$absender_nachname = $absender_nachname;
$absender_email = $absender_email;
$absender_telefon = $absender_telefon;
$absender_land = $absender_land;
$absender_bestellung = $absender_bestellung;
Hast du wirklich keine Idee, was da passiert?
Kalle
Könntest du mir dies vtl. machen? Wie gesagt habe ich keine Ahnung von PHP und habe diesen Code in einem Forum gefunden.
Ah ja, das Nonsens-Forum:
$absender_email = $absender_email;
$absender_anrede = $absender_anrede;
$absender_vorname = $absender_vorname;
$absender_nachname = $absender_nachname;
$absender_email = $absender_email;
$absender_telefon = $absender_telefon;
$absender_land = $absender_land;
$absender_bestellung = $absender_bestellung;Hast du wirklich keine Idee, was da passiert?
Kalle
Nein! Sonst würde ich ja hier nicht Fragen oder?
Also ohne dir jetzt zu Nahe treten zu wollen: Vielleicht sllest du dich mal etwas mit Programmieren beschäftigen, bevor du versuchst zu programmieren. Es ist immer schlecht einfach irgendwelchen Code von irgendwo zu kopieren, ohne zu wissen was der eigentlich macht und diesen dann irgendwo einbauen zu wollen.
Ja, aber warum überhaupt "abholen". Sie sind doch schon da (in $_POST), man muss sie nur nutzen. Sie vorher noch umzukopieren bringt keine Pluspunkte.
Ich kopiere sie grundsätzlich am Anfang jedes Programms.
1. sehe ich dann im Zusammenhang, welche Werte das Programm erwartet,
2. enthält array $_POST ungeprüfte Rohdaten. Die kopierten werden erstmal mit trunc() beschnitten und dann weiter gecheckt.
Alles am _Anfang_ des Programms, bei Fehler gibt's keine Bearbeitung, sondern zurück zum Affenformular.
Kalle
Hi!
Ja, aber warum überhaupt "abholen". Sie sind doch schon da (in $_POST), man muss sie nur nutzen. Sie vorher noch umzukopieren bringt keine Pluspunkte.
Ich kopiere sie grundsätzlich am Anfang jedes Programms.
- sehe ich dann im Zusammenhang, welche Werte das Programm erwartet,
Diese Information kann man in einem Kommentar ablegen, dazu braucht es keinen überflüssigen Code.
- enthält array $_POST ungeprüfte Rohdaten. Die kopierten werden erstmal mit trunc() beschnitten und dann weiter gecheckt.
Wenn du den Wert bearbeitest und dann woanders ablegst, ist das ja in Ordnung, aber das reine Umkopieren in eine andere Variable bringt überhaupt nichts, außer dass jetzt noch eine Variable mehr existiert.
Lo!
Hallo,
unter dem Punkt "es werden ein paar Sachen definiert" solltest du wohl jede Variable aus $_POST hohlen und nicht nur die Mail-Adresse - auf die Schnelle habe ich nämlich sonst keine Definition der anderen Variablen gefunden (der fehlenden)
Gruß
Alex
Ich hoffe ihr könnt mir helfen.
Um Fehler im Script zu analysieren solltest du error reporting(E ALL)
am Anfang setzen. Es ist keine Struktur im Script vorhanden. Du hast so ziemlich alles durcheinander gewürfelt. Du kannst nicht erwarten, dass jemand dir ein fertiges Script sendet. Ein wenig PHP Kentnisse sind schon erforderlich. Du solltest dich erstmal mit den Grundlagen näher befassen.
Googel einfach mal nach dem Stichwort "Affenformular". Gibt ne Menge fertige Scripts die ohne viel Kentnisse schnell angepasst werden können.
Weitere Tipps und Tricks findest du hier.