Kontaktformular funktioniert nicht

  • Hallo mal wieder!

    Ich habe hier ein mitgeliefertes Kontaktformular, welches ich gerne verwenden würde (weil es wahrscheinlich besser ist als ich es je schreiben könnte :lol: )
    Nun habe ich absolut keine Ahnung wie ich es zum laufen bringe:

    index.php

    main.js

    contact.php

    Für mich ist die ganze funktionsweise noch sehr undurchsichtig, ich habe nicht annähernd einen Lösungsansatz und hoffe mal wieder auf eure Unterstützung.
    Danke!

    Mir raucht der Gulliver :smilie085:

    2 Mal editiert, zuletzt von Arne Drews (12. November 2018 um 17:30) aus folgendem Grund: MOD: Code-Highlightning neutralisiert

  • Nicht gut?

    Ich wittere Arbeit und muss weiter fragen:
    Zwecks PHPMailer nur die Funktion sendEmail() abändern?
    Dann ist mir immer noch nicht klar wie ich die Eingaben an das Script übergebe,
    von AJAX und JSON habe ich nämlich auch keinen Schimmer.
    Wobei ich gerne beibehalten würde dass die Seite nicht neu geladen werden muss beim versenden...
    Will nicht faul sein aber hier schaut ein Schwein ins Uhrwerk

    Mir raucht der Gulliver :smilie085:

    • Offizieller Beitrag

    Ja nun... Wenn man es richtig machen will. darf man so ein Schwein nicht frei rumlaufen lassen...
    Wenn Du die Zeit nicht hast, es richtig zu machen, solltest Du aber hier auch nicht fragen, ob Dir jemand hilft.

    Du musst beim Versenden von E-Mails so vieles bedenken, was in dem Script einfach nicht beachtet wird.
    All diese Dinge übernehmen Mailerklassen für Dich. Ich schenk Dir mal zwei Links: PHPMailer ( und ein funktionierendes Tutorial ).

    Feel free to learn...

    btw., ich will ja nichts böses unterstellen, aber ich könnte mir vorstellen, dass sich hinter der DB-Klasse die mysql-Erweiterung verbirgt, das wäre dann auch was für Auswechselbank.

  • Naja die DB-Klasse...

    PHP
    try{    $db = new PDO('mysql:host=localhost;dbname=blechlavine_v2', $user, $pass);    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    $db->query('SET CHARSET utf8');}

    Nicht falsch verstehen, ich bin durchaus gewillt mich dahinter zu klemmen, muss nur einen Anfang finden. Und das fällt mir gerade schwer...
    Deine Tutorials werde ich mir auf jeden Fall reinpfeifen, ahne allerdings schon dass ich das Formular auf kurz oder lang verschwinden lasse :?

    Mir raucht der Gulliver :smilie085:

  • Zitat von Sysmatic

    ahne allerdings schon dass ich das Formular auf kurz oder lang verschwinden lasse :?

    Das wäre schade. Es ist kein Hexenwerk.

    Wenn du die Daten per Formular entgegennimmst, kannst du sie auch an das eigene Script (in dem auch das Formular ist) senden. Dann werden deine bisherigen Eingaben in den Feldern angezeigt, der Bildschirm bleibt erhalten. Dann testen ob die Eingaben logisch sind, HTML-Tags entschärfen, damit kein Schadcode ausgeführt werden kann. Und zum Schluss mit dem PHP-Mailer abschicken. Letzteres ist noch die einfachste Sache, da man eigentlich nur Variablen mit Inhalten füttert und dann die Mail-Funktion ausführt.

    Wenn du das alles in einer Datei erledigst, nennt man das "Affenformular".

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Selbst das tatsächliche Abschicken fällt mir wahrscheinlich schwer :? Ich bin eigentlich schon viel zu lange raus gewesen aus der ganzen PHP-Sache...
    PHP-Mailer ist quasi 'installiert', Arne's Tutorial habe ich mir durchgelesen, viel gegoogelt habe ich um fast das gleiche Tutorial nochmal auf englisch zu finden.
    Bin jetzt mehr konfus als wie zuvor :shock:

    Habe jetzt...


    ...ganz oben in meiner index.php stehen, weil ich es gerade nicht besser weiß...nennt mich doof, aber ich habe irgendwie einen Hänger

    Mir raucht der Gulliver :smilie085:

  • Dieser Teil darf natürlich nur dann ausgeführt werden, wenn das Script vom Formular aufgerufen wird. Das kannst du mit isset prüfen:

    PHP
    if (isset($_POST['ein_formular_feld_name']))
    {
        // Hier dann den Mailversand rein
    }
  • :D Ja okay, das ist klar.

    Habe jetzt folgendes:
    Das Script steht nun in einer contact2.php

    Die main.js habe ich auch dahingehend angepasst:

    Habe hier versucht logisch zu schlussfolgern da meine Kenntnisse schon längst am Limit sind :roll:
    Müsste ich nicht wenigstens eine Fehlermeldung zurück bekommen?
    Es passiert einfach gar nichts und ich weiß ehrlich gesagt auch nicht wie ich mich hier durchprüfe um den/die Fehler zu finden

    Mir raucht der Gulliver :smilie085:

    Einmal editiert, zuletzt von Sysmatic (13. November 2018 um 09:02)

    • Offizieller Beitrag

    Setz mal ganz an den Anfang das ErrorReporting ein:

    PHP
    error_reporting ( -1 );
    ini_set ( 'display_errors', true );


    Dann sollten auch Fehler kommen, bspw. gibt es kein

    PHP
    returnfalse;

    ...obwohl, ich sehe gerade, das ist im JS-Block. Die Fehler findest Du in der Entwickler-Konsole Deines Browsers (F12)

  • Leider nichts...error_reporting gibt nichts aus und die Konsole zeigt mir auch nichts entsprechendes

    werde den Spaß mal auf den Testserver laden, vielleicht hilft es ja

    Mir raucht der Gulliver :smilie085:

    Einmal editiert, zuletzt von Sysmatic (13. November 2018 um 09:16)

  • Die ersten 4 Zeilen der index.php:

    PHP
    [COLOR=#000000][FONT=Consolas][COLOR=#800000]<?php[/COLOR]
    [COLOR=#000000]error_reporting ([/COLOR][COLOR=#000000]-[/COLOR][COLOR=#09885a]1[/COLOR][COLOR=#000000]);[/COLOR]
    [COLOR=#000000]ini_set([/COLOR][COLOR=#a31515]'display_errors'[/COLOR][COLOR=#000000], [/COLOR][COLOR=#0000ff]true[/COLOR][COLOR=#000000]);[/COLOR]
    [COLOR=#000000]ini_set([/COLOR][COLOR=#a31515]'error_reporting'[/COLOR][COLOR=#000000], E_ALL);[/COLOR]
    
    
    [/FONT][/COLOR]


    (doppelt hält besser...)


    http://blechlavine.bplaced.net/Verzeih' mir die Ladezeit, aber kostenlose Server sind meistens langsam :???:
    Ich glaube auch nicht dass xampp und bplaced zur gleichen Zeit kaputt sind :D

    Mir raucht der Gulliver :smilie085:

    • Offizieller Beitrag

    Ne hält es nicht... Je nach PHP Version ist E_ALL nicht dasselbe, wie -1. Nur -1 ist in allen PHP-Versionen konstant und liefert wirklich ALLE Fehler!
    Davon mal abgesehen, hat die Konstante E_ALL einen Wert von 32767, was ini_set() veranlasst dies in ein true zu casten.

    Versuch diesen Code mal:

    PHP
    $contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
    $contact_form->sendRequest();


    EDIT: Zudem vermute ich, dass die E-Mail Adresse hiernach immer leer sein wird:

    PHP
    $string = preg_replace( $regex, '', $this->email );
    return empty( $string );

    Weiterhin ist sowas unnötig ( und zudem noch falsch ):

    PHP
    $oMailer->Username = '".$this->admin_email."';


    das ist das gleiche, wie das hier:

    PHP
    $oMailer->Username = $this->admin_email;

    , außer, dass Du den Interpreter mehr forderst, weil er versucht eine Zeichenkette zu parsen, die gar nicht da ist.


    EDIT2: Ich habe den Code oben nochmal etwas korrigiert. Teste und poste evtl. Fehler

  • Ja die 'kleinen' Fehler hätte ich noch rausgeschmirgelt...

    Der Code als solcher funktioniert nicht (sagt schon mein Editor).
    Es fehlt eine Klammer bei
    private function validateEmail()
    sowie noch irgendwas anderes:

    bei
    $contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
    die Meldung:


    syntax error, unexpected '$contact_form' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST)

    Mir raucht der Gulliver :smilie085:

    • Offizieller Beitrag

    Na zumindest kommen jetzt Fehler!
    Ich hatte den Code vorhin nochmal überarbeitet. Musst Du nochmal versuchen.

    Zitat

    Ja die 'kleinen' Fehler hätte ich noch rausgeschmirgelt...

    Sag mal, nimmst Du uns auf den Arm?!
    Erstens sind das keine kleinen Fehler! und zweitens können auch die dazu führen, dass nichts geht! Wenn Du so arbeitest, ist jede Hilfe verschwendete Zeit...

  • Ich würde meine Worte nicht all zu ernst nehmen.

    Mir ist immer noch nicht klar wo der letzte Fehler herkommt

    Ah okay..noch eine Klammer...

    Mir raucht der Gulliver :smilie085:

    Einmal editiert, zuletzt von Sysmatic (13. November 2018 um 10:15)

    • Offizieller Beitrag

    Du hast den Code selber wieder angepasst... Ich habe keine Lust, in jedem Beitrag den kompletten Code wieder zu überprüfen.
    Nimm den korrigierten Code aus #14, kopiere den 1:1 und gebe Feedback, welche Fehler dann kommen. Dann kann man das Step by Step angehen.
    Wenn Du jedesmal wieder selber was reinfriemelst, finden wir nie heraus, wo die Fehler genau liegen

  • Richtig debuggen


    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • 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. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...:( mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.