LoRenz: mail-funktion tut nix...

hallo ihr,

ich sitze jetzt schon eine ganze weile an einem kontaktformular. die fehlerprüfung scheint zu funktionieren, allerdings scheint die mail()-funktion nicht zu funktionieren - ich bekomme jedenfalls nix (hab das skript auf dem server online getestet).
beim ausfüllen und abschicken kommt keine fehlermeldung!

ich vermute irgendwelche klammern oder schleifen tun nicht richtig... bin grad nachtblind... :-/

====== anfang quellcode kontakt2.php =======
<?php if(isset($go)) {

// die variable $go wird bei submit in kontakt.php an kontakt2.php übergeben.

echo"<form action='kontakt2.php' method='post'>
[...htlm-code...]";

if($name=="") {echo"<font style='font-size:12px; color:#FF9900;'>Geben Sie bitte Ihren Namen an.</font>";}

echo"[...htlm-code...]";

if($plz=="")
  {}
    else if(!is_numeric($plz))
    {
    echo"<font style='font-size:12px; color:#FF9900;'>Bitte nur Zahlen angeben.</font>"; }

echo "[...htlm-code...]";

function check_email($email) {
  // RegEx begin
  $nonascii      = "\x80-\xff"; # Non-ASCII-Chars are not allowed
  $nqtext        = "[^\\$nonascii\015\012"]";
  $qchar         = "\\[^$nonascii]";
  $protocol      = '(?:mailto:)';
  $normuser      = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
  $quotedstring  = ""(?:$nqtext|$qchar)+"";
  $user_part     = "(?:$normuser|$quotedstring)";
  $dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
  $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
  $dom_tldpart   = '[a-zA-Z]{2,5}';
  $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
  $regex         = "$protocol?$user_part@$domain_part";
  // RegEx end
  return preg_match("/^$regex$/",$email);
}

if($email=="")
{
echo "<font style='font-size:12px; color:#FF9900;'>Geben Sie bitte Ihre Email an.</font>";
}
else
  if(!check_email($email)) {
  echo "<font style='font-size:12px; color:#FF9900;'>Die Emailadresse ist nicht korrekt.</font>";;
  }

echo"[...htlm-code...]";

if($tel=="")
  {}
    else if(!is_numeric($tel)) {
    echo"<font style='font-size:12px; color:#FF9900;'>Bitte nur Zahlen angeben.</font>"; }

echo "[...htlm-code...]";

if($text=="") {
echo"<font style='font-size:12px; color:#FF9900;'>Geben Sie bitte eine Nachricht ein.</font>";}

echo"[...htlm-code...]";}

else{
  //mailversand:
  $empf = "blabla@blabla.net";
  $subject = "Kontakt von Webseite";
  $message .= "Von: " . $firma . ", " . $name . "\n";
  $message .= "E-Mail: " . $email . "\n";
  $message .= "URL: " . $url . "\n";
  $message .= "Anschrift:" . "\n" . $strasse . "\n" . $plz . " " . $ort . "\n";
  $message .= "Telefon: " . $tel . "\n";
  $message .= "Nachricht: " . $text . "\n";
  mail($empf,$subject,$message);
  //ende mailversand
}

?>
====== ende quellcode kontakt2.php =======

vielen dank für eure hilfe!!

  1. Hallo LoRenz,

    ich sitze jetzt schon eine ganze weile an einem kontaktformular. die fehlerprüfung scheint zu funktionieren, allerdings scheint die mail()-funktion nicht zu funktionieren

    wieso 2mal 'scheint'?

    • ich bekomme jedenfalls nix (hab das skript auf dem server online getestet).

    kann man von dem Server aus überhaupt E-Mails versenden? (mal in die Ausgabe von phpinfo() und/oder in die faq vom Provider schauen)

    ich vermute irgendwelche klammern oder schleifen tun nicht richtig...

    ich tippe jetzt mal fast auf register_globals=off

    bin grad nachtblind... :-/

    nachtblind? hast du kein Licht - achne, der Monitor leuchtet ja sowieso :-) *scnr*

    ====== anfang quellcode kontakt2.php =======
    <?php if(isset($go)) {

    ich würde mal vermuten, du hast ein Formular das u.a. folgende Zeile enthält:
    <input type="submit" name="go" value="senden"> (oder so ähnlich zumindest)
    dann solltest du eher <?php if(isset($_POST['go'])){ schreiben

    // die variable $go wird bei submit in kontakt.php an kontakt2.php übergeben.

    *grmpf* man sollte vielleicht erst weiterlesen :-)

    echo"<form action='kontakt2.php' method='post'>

    warum beendest du den php Bereich nicht vor dem Formular und machst ihn danach wieder auf?

    if($name=="")

    nene, besser if(!empty($_POST['name']))

    {echo"<font style='font-size:12px; color:#FF9900;'>Geben Sie bitte Ihren Namen an.</font>";}

    verwende doch bitte kein <font>.

    if($plz=="")

    if(!emtpy($_POST['plz']))

    else if(!is_numeric($plz))

    oh, wusste ich ja garnicht, dass es so eine Funktion gibt :-) allerdings können Postleitzahlen auch Buchstaben enthalten (nicht in D aber soweit ich weis in UK o. USA)

    echo"<font style='font-size:12px; color:#FF9900;'>Bitte nur Zahlen angeben.</font>"; }

    gnade! kein <font> :-)

    $dom_tldpart   = '[a-zA-Z]{2,5}';

    deine regex taugt nichts - Domains auf .museum kommen nicht durch. (beim Rest der regexp bin ich auch nicht so ganz sicher)

    if($email=="")

    if(!emtpy($_POST['email']))

    if($tel=="")

    $_POST['tel']

    else if(!is_numeric($tel)) {

    lässt die funktion is_numeric auch Leerzeichen und '/' durch?

    if($text=="") {

    $_POST['text']

    vielen dank für eure hilfe!!

    bist du sicher :-) ich glaube ich habe deine Code etwas sehr zerlegt :-)

    Grüße aus Nürnberg
    Tobias

    --
    sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
    1. hallo tobias,

      wieso 2mal 'scheint'?

      gute frage. :-)

      kann man von dem Server aus überhaupt E-Mails versenden? (mal in die Ausgabe von phpinfo() und/oder in die faq vom Provider schauen)

      daran liegts nicht. email senden ist erlaubt.

      ich tippe jetzt mal fast auf register_globals=off

      nope =>register_globals=on

      nachtblind? hast du kein Licht - achne, der Monitor leuchtet ja sowieso :-) *scnr*

      ja, hab schon die sonnenbrille auf... ;-)

      echo"<form action='kontakt2.php' method='post'>
      warum beendest du den php Bereich nicht vor dem Formular und machst ihn danach wieder auf?

      gute frage, aber erst mal egal. ;-)

      nene, besser if(!empty($_POST['name']))

      meinst du wirklich?
      "Fatal error: Call to undefined function: emtpy() in e:\kontakt2.php on line 67"
      ist diese funktion nicht eher für ein formular geeignet, dass in der gleichen datei abgeprüft wird. ich gebe ja die daten aus kontakt.php an kontakt2.php weiter. nur so ein gedanke...

      verwende doch bitte kein <font>.

      hast recht, wie kommt das da hin? *tz* wurde durch <p> ersetzt. :-)

      else if(!is_numeric($plz))
      oh, wusste ich ja garnicht, dass es so eine Funktion gibt :-) allerdings können Postleitzahlen auch Buchstaben enthalten (nicht in D aber soweit ich weis in UK o. USA)

      von denen will/werde ich eh keine post bekommen. ;o) die hp ist nur für gewisse zeit für bestimmte firmen gedacht.

      $dom_tldpart   = '[a-zA-Z]{2,5}';
      deine regex taugt nichts - Domains auf .museum kommen nicht durch. (beim Rest der regexp bin ich auch nicht so ganz sicher)

      hab da ehrlich gesagt keine ahnung von, die funktion is aus selfhtml kopiert.

      else if(!is_numeric($tel)) {
      lässt die funktion is_numeric auch Leerzeichen und '/' durch?

      nee leider nicht. gibts da ne andere möglichkeit? habs vorerst vernachlässigt.

      vielen dank für eure hilfe!!
      bist du sicher :-) ich glaube ich habe deine Code etwas sehr zerlegt :-)

      das kann/werde ich erst beurteilen, wenn das script funzt. ;-))

      viele grüße,
      LoRenz

      1. nene, besser if(!empty($_POST['name']))
        meinst du wirklich?
        "Fatal error: Call to undefined function: emtpy() in e:\kontakt2.php on line 67"

        ok... blind! eindeutig! ;o)
        "empty" ist schon was anderes als "emtpy".... *g*

        das script läuft dennoch noch immer nicht... :-/

        LoRenz

      2. Hallo LoRenz,

        ich tippe jetzt mal fast auf register_globals=off
        nope =>register_globals=on

        off wäre zwar besser, aber dann liegt es schonmal nicht daran.

        nene, besser if(!empty($_POST['name']))
        meinst du wirklich?
        "Fatal error: Call to undefined function: emtpy() in e:\kontakt2.php on line 67"

        schau dir mal genau an, was du geschrieben hast, und was ich geschrieben habe - du hast einen kleinen Verdreher reingebracht, das 't' und das 'p' gehören andersrum (passiert mir aber auch ständig, nur merke ich das gleich, da mein Phase5 Funktionsnamen in einer anderen Farbe darstellt, als andere Sachen :-))

        ist diese funktion nicht eher für ein formular geeignet, dass in der gleichen datei abgeprüft wird. ich gebe ja die daten aus kontakt.php an kontakt2.php weiter. nur so ein gedanke...

        ob du die Daten von kontakt.php zu kontakt2.php oder von kontakt.php zu kontakt.php weitergibst ist eigentlich so ziemlich das gleiche, da du wenn du mit php arbeitest, jedesmal einen neuen Request absetzen muss, und da ist es dann egal, welche Datei aufgerufen wird...

        verwende doch bitte kein <font>.
        hast recht, wie kommt das da hin? *tz* wurde durch <p> ersetzt. :-)

        <p>? nagut, <span> hätte es auch getan :-)

        allerdings können Postleitzahlen auch Buchstaben enthalten (nicht in D aber soweit ich weis in UK o. USA)
        von denen will/werde ich eh keine post bekommen. ;o) die hp ist nur für gewisse zeit für bestimmte firmen gedacht.

        musst du wissen, ich sage es dir nur :-)

        $dom_tldpart   = '[a-zA-Z]{2,5}';
        deine regex taugt nichts - Domains auf .museum kommen nicht durch. (beim Rest der regexp bin ich auch nicht so ganz sicher)
        hab da ehrlich gesagt keine ahnung von,

        mit [a-zA-Z]{2,5} wird geprüft, ob die Endung die Buchstaben a-z (groß und klein) enthält und zwar genau 2 bis 5 Buchstaben - um allso auch .museum durchkommen zu lassen, musst du die 5 einfach durch eine 6 ersetzten - allerdings ist mir ehrlichgesagt noch keine Domain auf .museum untergekommen :-)

        die funktion is aus selfhtml kopiert.

        von http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html?

        lässt die funktion is_numeric auch Leerzeichen und '/' durch?
        nee leider nicht. gibts da ne andere möglichkeit?

        reguläre Ausdrücke - ich glaube auf http://www.php.net/is_numeric in den Kommentaren habe ich was mehr oder weniger passendes gesehen. oder du ersetzt vorher '/' durch " " oder durch "".

        habs vorerst vernachlässigt.

        'vorerst vernachlässigen' ist manchmal ganz schlecht (in diesem Fall vielleicht nicht unbedingt) es kann dann nämlich sein, dass es einfacher gewesen wäre es gleich mit zu berücksichtigen.

        das kann/werde ich erst beurteilen, wenn das script funzt. ;-))

        ich kann mir jetzt aber trotzdem noch nicht so ganz erklären, warum es nicht funktioniert, moment mal, was passiert, wenn du die kontakt2.php einfach so aufrufst? wenn ich das richtig sehe (deine Verschachtelung ist grauenvoll :-)) hast du nämlich diese Grundstruktur:
        if(isset($_POST['go'])){
        //formular prüfen
        }
        else{
        //mailsenden
        }
        wenns das nicht ist, kann man sich das ganze vielleicht online anschauen? (die Funktion mail kannst du ja durch ein echo $empf.$subject.$message; o.ä. ersetzen)

        Grüße aus Nürnberg
        Tobias

        --
        sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)