[PHP-Formmailer] Was ist Falsch ?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
DasFragezeichen
Mitglied
Beiträge: 402
Registriert: 28.08.2005 19:51

[PHP-Formmailer] Was ist Falsch ?

Beitrag 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 ]
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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'];
Zuletzt geändert von fanrpg am 29.08.2005 21:34, insgesamt 1-mal geändert.
Xmopf
Mitglied
Beiträge: 85
Registriert: 17.04.2002 09:21
Wohnort: Sauerland

Beitrag von Xmopf »

und dann funkioniert die zuweisung in die andere richtung...


$betreff = $_POST['betreff'];
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

So,

Beitrag 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
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
mristau2k5
Mitglied
Beiträge: 140
Registriert: 10.05.2005 02:35
Wohnort: Filderstadt

Beitrag 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
}
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag 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?
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag 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
mristau2k5
Mitglied
Beiträge: 140
Registriert: 10.05.2005 02:35
Wohnort: Filderstadt

Beitrag 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
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag von witzigerkiller »

danke dir
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Antworten

Zurück zu „Coding & Technik“