PHP Kontaktformular HILFE ;)

  • Hallo!

    Ich hoffe ich stoße hier auf Hilfe ;) .
    Kann mir jemand verraten warum die Emails durch mein Kontaktformular nicht ankommen? Bin langsam echt verzweifelt :S

    <?php

    $recipient = "info@mustermann.de";
    $mail_to="info@mustermann.de";

    $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 geben Sie Ihren Namen an.<br>";
    if(trim($from_mail)=="")
    $err_text.="Bitte geben Sie 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.="Bitte geben Sie eine g&uuml;ltige E-Mail-Adresse an.<br>";
    if(trim($mail_subject)=="") $err_text.="Bitte geben Sie einen Betreff ein.<br>";
    if(trim($mail_text)=="") $err_text.="Bitte geben Sie einen Nachrichtentext ein.<br>";


    if(strlen($mail_text)>9999) {
    $mail_text=substr($mail_text,0,9999)."... (Text wurde gek&uuml;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="kontakt.php" method="post">
    <div align="center">
    <table border="0" cellspacing="2" cellpadding="0" width="0">
    <tr>
    <td nowrap="nowrap" align="right"><font size="2" face="Tahoma">Ihr Name:</td>
    <td>&nbsp;</td>
    <td width="100%"><input type="text" name="fromname" size="38" maxlength="120" value="<?php echo $from_name; ?>" /></td>
    </tr>
    <tr>
    <td nowrap="nowrap" align="right"><font size="2" face="Tahoma">Ihre e-mail Adresse:</td>
    <td></td>
    <td width="100%"><input type="text" name="frommail" size="38" maxlength="120" value="<?php echo $from_mail; ?>" /></td>
    </tr>
    <tr>
    <td nowrap="nowrap" align="right"><font size="2" face="Tahoma">Betreff:</td>
    <td></td>
    <td width="100%"><input type="text" name="mailsubject" size="38" maxlength="120" value="<?php echo $mail_subject; ?>" /></td>
    </tr>
    <tr>
    <td nowrap="nowrap" align="right" valign="top"><font size="2" face="Tahoma">Text:<br /></td>
    <td></td>
    <td width="100%"><textarea cols="38" 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>
    </div>
    </form>
    <?php
    } else {
    $header="From: $from_name <$from_mail>\n";
    $header.="Reply-To: $from_mail\n";
    $header.="FIGP:\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>Danke f&uuml;r Ihre e-mail!</b></p>";
    echo "Wir werden Ihnen so schnell wie m&ouml;glich antworten.</a></p>";
    }else{
    echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";
    echo "<p><a href=\"kontakt.php?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
    echo urlencode($mail_text)."\">zur&uuml;ck</a></p>";
    }
    }
    ?>

  • 1) Schalte mit error_reporting(E_ALL); die Fehlermeldungen an
    2) Unterdrücke deine Fehlermeldungen nicht mit @.

    Dann bekommst du vielleicht von PHP selbst die Antwort ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Quellcode bitte formatiert posten: [ php ]Quellcode[/ php ] (ohne Blanks bei php)

  • Fehler ist hier:

    PHP
    $mail_subject=str_replace(chr(34),"''",$mail_subje ct); // <-- LEERZEICHEN


    da ich hier auch Oft Hilfe bekomme, naja manchmal sowie du Hinweise, ab und an zeigt mir auch einer den Weg. Ich dir nun auch. Hier funktioniert, allerdings würde ich es online nicht einsetzen, da es keinen spamschutz hat


    Viel Spaß

  • Auch dieses Script ist unsauber programmiert. Leute, ein

    PHP
    error_reporting(E_ALL);
    ini_set("display_errors", true);


    und PHP überschlägt sich dabei vor lauter Notice-Meldungen.

  • bedeutet das die variablen für die inhalte noch gar nicht abgerufen werden können oder, man kann den Teil vor dem Formular doch einfach danach aufbauen. Werd das mal testen

    Notice: Undefined index: fromname in C:\xampp\htdocs\kontakt.php on line 7

    Notice: Undefined index: frommail in C:\xampp\htdocs\kontakt.php on line 8

    Notice: Undefined index: mailsubject in C:\xampp\htdocs\kontakt.php on line 9

    Notice: Undefined index: mailtext in C:\xampp\htdocs\kontakt.php on line 10

    Notice: Undefined index: s in C:\xampp\htdocs\kontakt.php on line 11

    Notice: Undefined variable: err_text in C:\xampp\htdocs\kontakt.php on line 15

  • ok danke, was ich logisch nicht verstehe warum ist das senden als hidden(verstecktes Feld) gemacht?

  • ich bin nicht der Threadersteller aber hab mir jetzt echt mühe gegeben das etwas zu überarbeiten da ich das auch brauche für meine webseite. Ich habe jetzt alles überarbeitet soweit ich dazu in der Lage bin :)


    Das mit dem isset habe ich noch nicht ganz hinbekommen, da ich den Zusammenhang mit dem hidden feld nicht verstehe. ich hätte dem submit button den name "senden" gegeben und dann wie hier, aber bei den vielen angaben fällt es mir nicht ganz so leicht..

    Müssen die Variablen erst nach dem Formular gesetzt werden oder nur dann wenn sie leer sind? Nur wenn sie leer sind. Aber bitte erklärt das mit hidden feld. was wird da übergeben?

    DANKESCHÖN

  • Dann führ mal den PHP Code aus, ich wette es kommen Fehler ;)

    Das Hiddenfeld ist nicht nötig hier, es wird lediglich gemacht wohl gegen Bots (das ganze bringt aber absolut nichts)

  • Hier meine überabreitete Version:


    Gruß, Jetzt fehlt noch ein Spamschutz aber da muss ich wohl noch paar Tuts machen. 2tens. ich muss es so amchen das wenn man auf submit drückt das die variablen überprüft weerden ob gesetzt und wenn nicht dann erst setzen richtig.. Muss ich mal ausprobieren. ich poste es dann nochmal hier. Es ist ja schon besser geworden.

  • Was soll eigentlich stripslashes bringen?

    Um zb gegen XSS vorzubeigen nimmt man htmlspecialchars

    Da bei dir aber nur der Angreifer selber schaden nehmen kann bzw bei einer Email es nicht interpretiert wird ist es demnach nicht gefährlich was der Nutzer eingibt

    Trotzdem die Funktion als Routine anwenden

  • ok werd ich noch überarbeiten, Jetzt habe ich den Code so überarbeitet, die alten Sachen erstmal ausgeklammert. Wichtig, wenn ihr euch der Sache annehmt die meisten Kommentare habe ich im Qellcode bei der Ursache vermerkt.


    ich erhalte bei folgendem quellcode eine meldung die ich gerade nicht verstehe, wahrscheinlich habe ich nur die eine klammer falsch gesetzt aber alle änderungen schlagen fehl

    Undefined variable: nachricht in C:\xampp\htdocs\kontakt.php on line 51


    und in den feldern stehen jetzt auch meldungen:

    Name: <br /><b>Notice</b>: Undefined variable: name in <b>C:\xampp\htdocs\kontakt.php</b> on line <b>83</b><br />

    Email: <br /><b>Notice</b>: Undefined variable: absender in <b>C:\xampp\htdocs\kontakt.php</b> on line <b>85</b><br />

    Betreff: <br /><b>Notice</b>: Undefined variable: betreff in <b>C:\xampp\htdocs\kontakt.php</b> on line <b>87</b><br />

    Ihre nachricht: <br />
    <b>Notice</b>: Undefined variable: nachricht in <b>C:\xampp\htdocs\kontakt.php</b> on line <b>89</b><br />



    ich habe leider keinen eigenen space. vielleicht könnt ihr kurz local testen, mach ich ja auch:-) Danke euch/dir


  • Die meldung ist jetzt weg, aber in den feldern stehen immer noch die meldungen wie vorherigen post. Grübbbeeel...

  • Vom Prinzip her:


    Weitere Infos: google mit dem Begriff Affenformular füttern

  • Nööö jetzt funktioniert es, und hast eh nicht einmal ein Blick auf mein überarbeitetes Script zu werfen, in einer leeren datei hätte ich sowas nie hinbekommen. Also es funktioniert und Hilfe ist das nicht wirklich hier. Bei anderen wird aber immer alles ohne Merken gemacht, nur bei mir nicht. ihr wisst wer ich bin, und schon wieder ziemlich depressiv am Morgen

  • nee geht darum das ich das script mehrmals mit eurer hilfe angepasst ahbe und jetzt habe ich auch mit eurer hilfe versucht das noch mehr so hinzubekommen wie es sein soll. wenn man sich die letzten Posts 2 seiten voll anschaut sieht man die verbesserung meinerseits des quellcodes sehr wohl. Ich geb mir mühe sitz hier stundenlang, lese bei php.net und überall hier ikm forum und gebe alles. und ein kleiner ansatz zu meinem letzten script wäre schon schöner gewsen. ich arbeite auczh immer noch darn und mach tuts, täglich. nicht das ihr denkt. Irgendwann poste ich hier STOLZ mein fertiges perfektes script. aber habt ihre nicht auch mal klein Angefangen..


    ich hab alles kommentiert und die variablen sind deutsch, könntet ihr vielleicht ein kleines blicken draufwerfen.