E-Mail-Formular: Absende-Problem

derZwerch

Mitglied
Hallo ihr Lieben,
hab ein kleines Problem mit einem Email und weiß nicht so recht wo es dran scheitert:rolleyes:

Sinn und Zweck des Kontaktformular ist es mir eine Email zukommen zulassen, in der steht wer mich Kontakten will an sich wird nur der Name benötigt.
Außerdem möchte ich erfragen wie ich mich zurückmelden soll, entweder per Telefon in diesem Fall muss eine Telefonnummer angegeben werden, oder per Mail, hier ist die Email-Addy Pflicht.
Soweit ich es getestet habe funktioniert das auch, nur sobald ich also das Formular absenden möchte,erhalte ich eine Fehlermeldung er springt also nicht in die letzte if-Schleife, die nötig wäre um mir das ausgefüllte Formular zukommen zulassen...
Sehe grad den Wald vor lauter Bäumen wahrscheinlich nicht mehr...
Danke schonmal im Vorraus für eure Fehlersuche!:)
PHP:
<?php

$mail_to="mail@mail.de";
// *************************************
$from_firma=$_POST['fromfirma'];
$from_posi=$_POST['fromposi'];
$from_name=$_POST['fromname'];
$from_fon=$_POST['fromfon'];
$from_fax=$_POST['fromfax'];
$from_mail=strtolower($_POST['frommail']);
$mail_text=$_POST['mailtext'];
$radio=$_POST['radio'];
$mail_subject=$_POST['mailsubject'];

$send=$_POST['s'];

if(trim($from_name)=="") $err_text.="Bitte geben Sie Ihren Namen an.<br>";

if(trim($radio)=="mail"){
if(trim($from_mail)=="")
  $err_text.="Sie haben die Option:'Email-Me' gewählt, geben Sie daher bitte Ihre E-Mail-Adresse an.<br>";
else
  if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$from_mail))
    $err_text.="Sie haben die Option:'Email-Me' gewählt, geben Sie daher bitte eine gültige E-Mail-Adresse an.<br>";
}
if(trim($radio)=="call"){
if(trim($from_fon)=="")
  $err_text.="Sie haben die Option:'Callback' gewählt, geben Sie daher bitte Ihre Telefonnummer an.<br>";
}
if(trim($radio)=="")$err_text.="Sie haben keine Option gewählt, bitte entscheiden sie sich für eine Möglichkeit, damit wir mit ihnen in Kontakt treten können.<br>";


// *** Zu langen Text abschneiden ***
if(strlen($mail_text)>1000) {
  $mail_text=substr($mail_text,0,1000)."... (Text wurde gekürzt!)";
}
$from_name=str_replace(chr(34),"''",$from_name);
$from_name=stripslashes($from_name);
$from_mail=stripslashes($from_mail);
$mail_text=stripslashes($mail_text);

if(($send=="1") && (isset($err_text))) {
  echo "<span class='Stil1'";
  echo "<p><big><b>Fehler:</b></big><br>";
  echo "$err_text</p>";
  echo "</span>";
}

if(($send!="1") || (isset($err_text)))
{
?></p>
<form action="inhalt.php" method="post">
  <table border=0 cellspacing=2 cellpadding=0 width=320>
  <tr>
  <td align=right nowrap class="Stil6"><div align="left">Firma</div></td>
  <td>&nbsp;</td>
<td width=100%><input type="text" name="fromfirma" size=40 maxlength=40 style="background-color:#d0cdc5; border:0px" value="<?php echo $from_firma; ?>"></td></tr>
<tr>
  <td align=right nowrap class="Stil6"><div align="left">Position</div></td>
  <td>&nbsp;</td>
<td width=100%><input type="text"  name="fromposi" size=40 maxlength=40  style="background-color:#e1dfda; border:0px" value="<?php echo $from_posi; ?>"></td></tr>
<tr>
  <td align=right nowrap class="Stil6"><div align="left">Name</div></td>
  <td>&nbsp;</td>
<td width=100%><input type="text"  name="fromname" size=40 maxlength=40 style="background-color:#d0cdc5; border:0px" value="<?php echo $from_name; ?>"></td></tr>
<tr>
  <td align=right nowrap class="Stil6"><div align="left">Telefon</div></td>
  <td>&nbsp;</td>
<td width=100%><input type="text" name="fromfon" size=40 maxlength=40 style="background-color:#e1dfda; border:0px" value="<?php echo $from_fon; ?>"></td></tr>
<tr>
  <td align=right nowrap class="Stil6"><div align="left">Telefax</div></td>
  <td>&nbsp;</td>
<td width=100%><input type="text" name="fromfax" size=40 maxlength=40 style="background-color:#d0cdc5; border:0px" value="<?php echo $from_fax; ?>"></td></tr>
<tr>
  <td align=right nowrap class="Stil6"> <div align="left">E-Mail</div></td>
  <td></td>
<td width=100%><input type="text" name="frommail" size=40 maxlength=40  style="background-color:#e1dfda; border:0px" value="<?php echo $from_mail; ?>"></td></tr>

<tr>
  <td align=right valign=top nowrap class="Stil6"><p align="left" class="Stil6">Vermerk<br>
    </p>    </td>
  <td></td>
<td width=100%><textarea cols="30" rows="5" name="mailtext"  style="background-color:#d0cdc5; border:0px"><?php echo $mail_text; ?></textarea></td></tr>

<tr><td class="Stil6">Callback</td>
  <td></td>
  <td><input type="radio" name="radio" value="call"></td>
</tr>
<tr>
  <td class="Stil6">Mail-Me</td>
<td></td><td><input type="radio" name="radio" value="mail">
<input type="hidden" value="1" name="s"><input type="hidden" name="mailsubject" value="Online-Kontaktformular">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input  align="right" class="Button" type="submit" value="abschicken..." name="submit" /></td></tr>

</table>
</form>
<?php
} else {
  $header="From: $from_name <$from_mail>\n";
  $header.="Reply-To: $from_mail\n";
  $header.="X-Mailer: PHP-FormMailer\n";
  $header.="Content-Type: text/plain";
  $mail_date=gmdate("D, d M Y H:i:s")." GMT";
  $mail_inhalt="Firma: $from_firma \n Position: $from_posi \n Name: $from_name \n Telefon: $from_fon \n Telefon: $from_fon \n";
  
  $send=0;
  if(@mail($mail_to,$mail_subject,$mail_inhalt,$header))
  {
    echo "<p><b>Deine E-Mail wurde abgesendet.</b></p>";
      }else{
    echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";
    echo "<p><a href=\"inhalt.php?from_name=$from_name&from_mail=$from_mail&from_firma=$from_firma&from_posi=$from_posi&from_fon=$from_fon&from_fax=$from_fax&mail_text=";
    echo urlencode($mail_text)."\">Zurück zum Formular</a></p>";
  }
}
?>
 
`Da dein Submit Button den Wert "abschicken..." hat, kannst du nicht prüfen, ob der Wert des Buttons 1 ist. Du musst entweder auf "abschicken..." prüfen, ob der Button überhaupt betätigt wurde (isset($_POST['s']) bzw isset($send)) oder einfach die Aufrufmethode der Seite ($_SERVER['REQUEST_METHOD'] == 'POST') prüfen.
 
Versteh ich irgendwie nicht so ganz.:confused:
Das Feld indem das send seinen Wert zugewiesen bekommt, hat doch den Typ hidden, oder versteh ich dich total falsch?:-(

sollte vieleicht noch erwähnen ,dass das Formular mal funktioniert hat, allerdings gab es da nur ein begrenzte Anzahl von Formularfelder und auch keine Radiobuttons....
Auch die verschiedenen Überprüfunen der angegeben Daten habe ich erweitert, ich gehe davon aus das einer der Werte in der Abfrage
PHP:
if(@mail($mail_to,$mail_subject,$mail_inhalt,$header))
keinen Wert hat und dadurch kein Mailing erfolgt.
Das orginal Formular sieht übrigens so aus:
PHP:
<?php

// *** Deine Mailadresse (Empfänger) ***
$mail_to="deine@mailadresse.com";
// *************************************

$from_name=$_POST['fromname'];
$from_mail=strtolower($_POST['frommail']);
$mail_subject=$_POST['mailsubject'];
$mail_text=$_POST['mailtext'];
$send=$_POST['s'];

if(trim($from_name)=="") $err_text.="Bitte gib Deinen Namen an.<br>";
if(trim($from_mail)=="")
  $err_text.="Bitte gib Deine E-Mail-Adresse an.<br>";
else
  if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$from_mail))
    $err_text.="Bitte gib eine gültige E-Mail-Adresse an.<br>";
if(trim($mail_subject)=="") $err_text.="Bitte gib einen Betreff ein.<br>";
if(trim($mail_text)=="") $err_text.="Bitte gib einen Nachrichtentext ein.<br>";

// *** Zu langen Text abschneiden ***
if(strlen($mail_text)>1000) {
  $mail_text=substr($mail_text,0,1000)."... (Text wurde gekürzt!)";
}
$from_name=str_replace(chr(34),"''",$from_name);
$mail_subject=str_replace(chr(34),"''",$mail_subject);
$from_name=stripslashes($from_name);
$from_mail=stripslashes($from_mail);
$mail_subject=stripslashes($mail_subject);
$mail_text=stripslashes($mail_text);

if(($send=="1") && (isset($err_text))) {
  echo "<p><big><b>Fehler:</b></big><br>";
  echo "$err_text</p>";
}

if(($send!="1") || (isset($err_text)))
{
?>

<form action="contact.php" method="post">
<table border=0 cellspacing=2 cellpadding=0 width=100%>
<tr><td nowrap align=right>Dein Name:</td><td>&nbsp;</td>
<td width=100%><input type="text" name="fromname" size=50 maxlength=120 value="<?php echo $from_name; ?>"></td></tr>
<tr><td nowrap align=right>Deine E-Mail Adresse:</td><td></td>
<td width=100%><input type="text" name="frommail" size=50 maxlength=120 value="<?php echo $from_mail; ?>"></td></tr>
<tr><td nowrap align=right>Betreff:</td><td></td>
<td width=100%><input type="text" name="mailsubject" size=50 maxlength=120 value="<?php echo $mail_subject; ?>"></td></tr>
<tr><td nowrap align=right valign=top>Text:<br><i>(max. 1.000 Zeichen)</i></td><td></td>
<td width=100%><textarea cols="40" rows="10" name="mailtext"><?php echo $mail_text; ?></textarea></td></tr>
<tr><td></td><td></td><td>
<input type="hidden" value="1" name="s">
<input type="submit" value="Nachricht versenden" name="submit">
</td></tr>
</table>
</form>

<?php
} else {
  $header="From: $from_name <$from_mail>\n";
  $header.="Reply-To: $from_mail\n";
  $header.="X-Mailer: PHP-FormMailer (www.gaijin.at)\n";
  $header.="Content-Type: text/plain";
  $mail_date=gmdate("D, d M Y H:i:s")." GMT";
  $send=0;
  if(@mail($mail_to,$mail_subject,$mail_text,$header))
  {
    echo "<p><b>Deine E-Mail wurde abgesendet.</b></p>";
    echo "<p><a href=\"contact.php?from_name=$from_name&from_mail=$from_mail\">Zurück zum Formular</a></p>";
  }else{
    echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";
    echo "<p><a href=\"contact.php?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
    echo urlencode($mail_text)."\">Zurück zum Formular</a></p>";
  }
}
?>
 
"Beim Versenden der E-Mail ist ein Fehler aufgetreten!" lautet die Fehlermeldung, ist also die die im allerletzten else erzeugt wird!
Daher meine Annahme das irgendwas mit dem @mail, aus der vorhergehenden if-Abfrage nicht stimmt!
Ich seh aber einfach nicht welcher Wert fehlt, oder nicht korrekt ist....*grummel*

EDIT:
so hab mir mal die übergebenen Werte ausgeben lassen jetzt bin ich entgülig ratlos, da diese für mich korrekt aussehen
Adresse:mail@mail.de
Betreff:Online-Kontaktformular
Inhalt: Firma: you Position: chef Name: tanja Telefon: 000 Telefon: 000
Header: From: tanja <> Reply-To: X-Mailer: PHP-FormMailer Content-Type: text/plain
 
Zuletzt bearbeitet:
Erhöhe mal die Sensibilität der Fehlerausgabe und mache das @ vor mail() weg.

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 'on');
#Code
 
Hat sich erledigt..
Das Script ist soweit korrekt nur mein Heim-Server auf dem ich das Formular getestet habe funktioniert nicht vernünftig*grummel*
Das hat gedauert bis ich drauf gekommen bin, mal wo anders zu testen
Vielen vielen Dank für die Mühe bei der Fehlersuche!!
 
Warscheinlich hast du keinen lokalen Mailserver/sendmail bei dir installiert. Dann funktioniert die Funktion mail() nicht. Darum solltest du auch das @ vor mail() mal weglassen :)
 
Zurück