Seite 1 von 2
[PHP-Formmailer] Was ist Falsch ?
Verfasst: 29.08.2005 21:09
von DasFragezeichen
Also, schickt man den Formmailer ab dann erhalte ich nur 2 Betreffs- und Inhaltslose Nichts-Mails >_>
Wo ist da der Fehler ? :?
Code: Alles auswählen
<table border="0"><tr><td><p>Name : </p></td><td><p><form action="kontakt.php" method="post">
<input type="text" size="30" name="name"></p></td></tr>
<tr><td><p>Deine Mail–Adresse : </p></td><td><p><input type="text" size="30"
name="adresse"></p></td></tr>
<tr><td><p>Betreff : </p></td><td><p><input type="text" size="30" name="betreff"></p></td></tr>
<tr><td><p>Nachricht : </p></td><td><p><textarea name="nachricht" cols="20"
rows="30"></textarea></p></td></tr>
<tr><td><p>
<center>
<input type="submit" value="OK">
</center>
</form></td></td></tr></table>
<?
$HTTP_POST_VARS["name"] = $name;
$HTTP_POST_VARS["adresse"] = $adresse;
$HTTP_POST_VARS["betreff"] = $betreff;
$HTTP_POST_VARS["nachricht"] = $nachricht;
$empfaenger = "meine@mail-adresse.de";
mail($empfaenger, $betreff, $nachricht,
"From: $absender <$name>");
?>
Ich kann den Fehler wircklich nicht entdecken , lol
Hier mal ein Screen direkt aus Confixx ...
[ externes Bild ]
Verfasst: 29.08.2005 21:32
von fanrpg
erstmal den form unter die PHP Anweisungen und anstatt von $HTTP_POST_VARS, $_POST verwenden
und so rum gehört das:
Code: Alles auswählen
$name = $_POST['name'];
$adresse = $_POST['adresse'];
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
Verfasst: 29.08.2005 21:34
von Xmopf
und dann funkioniert die zuweisung in die andere richtung...
$betreff = $_POST['betreff'];
So,
Verfasst: 29.08.2005 22:56
von witzigerkiller
So, mir war langweilig, ich habe bisschen für dich arbeit abgenommen:
Was ich gemacht habe.
1.
Den Code Strukturiert.
2.
Überall diese <p>/</p> raus.(bitte net sauer sein);-)
3.
In jeder input feld maxlength gesetzt, sonst schreiben die leute
solange sie wollen.
4.
Variablen sortiert.
5.
Mit if Anweisungen gearbeitet, das auch keiner leere Mails schickt
und das keiner falsche E-Mail angibt.
6.
Getestet. (Ergebniss -> Funktioniert)
So, das wars.
E-Mailadresse musste halt noch ändern.
-------------------------------------------------------------------
Code:
Code: Alles auswählen
<?PHP
$Name = $_POST['Name']; // Name aus Formular
$Betreff = $_POST['Betreff']; // Betreff aus Formular
$Nachricht = $_POST['Nachricht']; // Nachricht aus Formular
$Empfaenger = "DeineEmail"; // Deine E-mail
$Mail = $_POST['Absender']; // Absender Mail
$Absender ="From:$Mail"; // Absender Mail mit From
if (isset($_POST['Senden'])) {
if (empty($Name) OR empty($Absender) OR empty($Betreff) OR empty($Nachricht)) {
echo "<font color='red'>Sie müssen alle Felder ausfüllen!</font>";
}
else {
if (!stristr($Mail,'@')) {
echo "<font color='red'>Sie müssen eine korreckte E-Mailadresse eingeben!</font>";
}
else {
if (!stristr($Mail,'.')) {
echo "<font color='red'>Sie müssen eine korreckte E-Mailadresse eingeben!<font>";
}
else {
if (mail($Empfaenger, $Betreff, $Nachricht, $Absender)) {
echo "Vielen Dank!<br /><br />Wir werden so schnell wie möglich Ihre Anfrage beantworten";
}
else {
echo "<font color='red'>Es tut uns Leid,<br /><br />Aber die Kontaktaufnahme scheiterte";
}
}
}
}
}
?>
<form action="#" method="post">
<table border="0">
<tr>
<td>Name: </td>
<td><input type="text" size="30" name="Name" maxlength="40" /></td>
</tr>
<tr>
<td>Deine Mail–Adresse:</td>
<td><input type="text" size="30" name="Absender" maxlength="40" /></td>
</tr>
<tr>
<td>Betreff: </td>
<td><input type="text" size="30" name="Betreff" maxlength="40" /></td>
</tr>
<tr>
<td>Nachricht: </td>
<td><p><textarea name="Nachricht" cols="25" rows="6"></textarea></td>
</tr>
<tr>
<td><center><input type="submit" name="Senden" value="OK"></center></td>
</tr>
</table>
</form>
Hoffe du kannst den code lesen
Verfasst: 30.08.2005 00:11
von PhilippK
Ich darf an dieser Stelle etwas Werbung machen: für
elseif. Dieser nette kleine PHP-Befehl hilft verdammt dabei, etwas mehr Übersicht in die if-Schleifen zu bringen. Und das tolle dabei: genauso wie if und else kommt er völlig kostenlos mit dem PHP-Paket daher. Ein Grund mehr, in sich gleich einmal anzuschauen...
Dann sieht das ganze nämlich deutlich besser aus - vor allem, wenn man den Code vorher noch von unnötigen Fehlern und Sicherheitslöchern befreit...
Code: Alles auswählen
<?php
$name = $_POST['name']; // Name aus Formular
$betreff = $_POST['betreff']; // Betreff aus Formular
$nachricht = $_POST['nachricht']; // Nachricht aus Formular
$empfaenger = 'DeineEmail'; // Deine E-mail
$mail = $_POST['Absender']; // Absender Mail
$mail = str_replace(array("\n", "\r"), '', $mail); // Alle Zeilenwechsel entfernen
$absender ="From:$mail\r\n\r\n"; // Absender Mail mit From (und sauber abschließen)
if ( isset($_POST['senden']) )
{
if ( empty($name) || empty($absender) || empty($betreff) || empty($nachricht) )
{
echo "<p><font color='red'>Sie müssen alle Felder ausfüllen!</font></p>";
}
elseif ( !stristr($mail,'@') && !stristr($mail,'.') )
{
echo "<p><font color='red'>Sie müssen eine korrekte E-Mail-Adresse eingeben!</font></p>";
}
elseif ( mail($empfaenger, $betreff, $nachricht, $absender) )
{
echo "<p>Vielen Dank!<br /><br />Wir werden Ihre Anfrage so schnell wie möglich beantworten</p>";
}
else
{
echo "<p><font color='red'>Es tut uns Leid, aber die Kontaktaufnahme scheiterte</font></p>";
}
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="POST">
<table border="0">
<tr>
<td>Name: </td>
<td><input type="text" size="30" name="name" maxlength="40" /></td>
</tr>
<tr>
<td>Deine E-Mail-Adresse:</td>
<td><input type="text" size="30" name="absender" maxlength="40" /></td>
</tr>
<tr>
<td>Betreff: </td>
<td><input type="text" size="30" name="betreff" maxlength="40" /></td>
</tr>
<tr>
<td>Nachricht: </td>
<td><textarea name="nachricht" cols="25" rows="6"></textarea></td>
</tr>
<tr>
<td colspan="2"><center><input type="submit" name="senden" value="OK"></center></td>
</tr>
</table>
</form>
Gruß, Philipp
Verfasst: 30.08.2005 10:21
von mristau2k5
ich würde die Echtheit einer Mailadresse nicht nur mit dem Test nach nem Vorkommen von '@' und '.' prüfen, sondern mit nem Regulären Ausdruck
Code: Alles auswählen
if(!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
{
// E-Mail ist falsch
}
Verfasst: 30.08.2005 11:10
von witzigerkiller
Ich weiß schon.. nur elseif muss ich mir nochmal genau anschauen, habe den noch níe benutzt. Das mit der e-mail. kann mir mal einer das ganze script erklären?
Verfasst: 30.08.2005 12:58
von Blutgerinsel
PhilippK hat geschrieben:[.....]if-Schleifen[....]
Diese Aussage allein lässt schon auf mangelnde Kompetenz schließen.....
Selbst die PHP Developer haben in Ihrer [1] FAQ deshalb folgendes hierzu dokumentiert, wohl nicht zu unrecht
[1]
http://faq-php.de/q/q-terminologie-if.html
Verfasst: 30.08.2005 15:46
von mristau2k5
Code: Alles auswählen
if(!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
{
// E-Mail ist falsch
}
eregi("Regulärer Ausdruck", string)
testet ob der angegebene String zum Regulären Ausdruck passt
das ist ein Regulärer Ausdruck
Insgesamt ist es eine ganze E-Mail Adresse:
"^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$"
ich fang mal vorn an:
^[0-9a-z]
1. Zeichen muss ein Buchstabe oder Zahl sein
([-_.]?[0-9a-z])*
nachfolgend kommen beliebig viele zusätzliche Buchstaben, Zahlen und jetzt auch "." "-" und "_" diese können, müssen aber nicht vorkommen
@ darauf folgt genau 1 @
[0-9a-z]
ein Buchstabe/Zahl als erstes Zeichen der Domain
([-.]?[0-9a-z])*
nachfolgend kommen beliebig viele zusätzliche Buchstaben, Zahlen und jetzt auch "." und "-" diese können, müssen aber nicht vorkommen
\\.
jetzt folgt ein "."
[a-z]{2,4}$
zum Schluss 2-4 Buchstaben als Top-Level-Domain
Verfasst: 30.08.2005 20:20
von witzigerkiller
danke dir