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&ndash;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&ndash;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