isset und empty funktioniert nicht

  • Ich versuche mittels JQuery Ajax Daten an php zu übermitteln und im PHP script abzufragen, ob das Formular leer ist.


    PHP
    <?php 
    
        echo "ok";
    
        if(!isset($_POST['name'])) {
    
            echo "NO";
        }
    
    ?>

    Nun ist das Problem, dass $_POST['name'] immer gesetzt ist, auch wenn es leer ist. empty klappr komischerweise auch nicht, und das obwohl es eindeutig empty ist.


    Das ist einmal der ganze JS Code. Ich weiß nicht mehr wo noch der Fehler sein kann.

  • Ja stimmt, ist aber nicht der Fehler, auch mit echo klappts nicht.


    Sowas kommt dadurch zustande dass man so viel versucht bis man so verwirrt ist, dass man den Code nur halb löscht, oder halb hinschreibt, weil man zwischendurch auf andere Ideen kommt.

  • Dann wird $_POST irgendwo von Dir gesetzt. Der erste Aufruf über HTTP ist ein reines GET, da gibt es kein POST.

    Kannst Du mal Deinen ganzen Code zur Verfügung stellen?


    Oder reden wir hier von Deinem Ajax-Script?

    Das liefert doch POST-Daten. Du rufst es beim load-Event auf, was zur Folge hat, dass das Ajax-Script mit leerem Formular abgesendet wird.

  • Das ist der ganze Code.


    Naja, HTML gibts noch:

  • Ich habe das mit Ajax und Jquery noch nicht so verstanden. Mein Ziel ist es die Daten mittels Ajax zum php script zu senden um sie dann dort zu überprüfen und auf der Website dann die Rückmeldung zu sehen.


    Was ist denn das load-event? das JQuery load() nutze ich ja gar nicht.

  • Diese Zeile

    JavaScript
    window.addEventListener('load', main);

    sorgt dafür, dass nach dem Laden des kompletten Dokumentes die JavaScript-Methode main() aufgerufen wird.

    Und die wiederum führt den Ajax-Request durch. Nur und beim ersten Aufruf der Seite sind die POST-Daten nunmal leer...


    main() müsste beim Senden des Formular ausgeführt werden.

  • Naja, die Ajax reguest wird doch erst beim senden des Formulars ausgeführt.


    Code
    $('#registerForm').on("submit", function(event)

    Das ist der eventhandler, der darauf wartet, dass das Formular abgeschickt wird.

  • Versuch mal das erste echo rauszunehmen. Bin mir grad ungetestet nicht ganz sicher, aber ich meine, dass er nach dem ersten echo beendet ist.

    Dein Ajax bekommt das erste echo und springt in die Routine success, wodurch der Request als abgeschlossen gilt.


    Vielleicht mal so:

    PHP
    <?php
    
    $log = [ 'script started' ];
    $log[] = isset( $_POST['name'] ) ? 'received post data' : 'NO DATA';
    
    echo implode( PHP_EOL, $log );
  • Kann mir mal einer für so ein doofmann wie mich erklären was hier sache ist ?

    Er möchte doch abfragen ob i irgendwas im formular steht ?

    Also alle Felder leer, soll php empty erkennen und NO zurückgeben ?

    Steht was drinne dann dann YES ?

    Sehe ich das richtig ?


    Aber in sein Formular sind die beiden selectfelder "days" und "month" doch immer auf den ersten Eintrag eingestellt und somit ist das Formular doch nie empty .

    Oder bin ich heute total bekloppt ?


    Wenn man im ersten select Feld das value leer läst

    <option value="">Bitte auswählen...</option>

    dann ist das Formular auch leer.


    Oder sehe ich jetzt was verkehrt.

    Ich brauche Input sonst verblöde ich noch danke.

  • Arne Drews Ich verstehe das Script nicht ganz. Was genau soll es bewirken? Die Sache mit dem Echo ist soweit ich das sehe auch nicht richtig, das Script läuft auch nach einem Echo weiter.


    basti1012 Wenn Du dir das Script nochmal anschaust, siehst Du das ich nur nach dem ersten Feld Frage, mit dem namen "name".

  • Die Sache mit dem Echo ist soweit ich das sehe auch nicht richtig, das Script läuft auch nach einem Echo weiter.

    Das PHP-Script ja, aber Dein Ajax nimmt imho nichts mehr entgegen, weil success bereits verarbeitet wurde.


    Ich verstehe das Script nicht ganz.

    Macht nichts anderes, als die Ausgabe zu sammeln in $log, um dann am Schluss mit einer Ausgabe dies an den Client zurückzusenden.

  • DER Auch wenn mein Posting #15 nur aus zwei Zeilen besteht, empfehle ich, es nicht zu ignorieren. Du schriebst ja schon in deinem Eingangsposting, dass isset() nicht zum Ziel führt. empty() ist dagegen der richtige Ansatz und sollte zum Ziel führen, wenn man es richtig anwendet.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!