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
    1. <?php
    2. echo "ok";
    3. if(!isset($_POST['name'])) {
    4. echo "NO";
    5. }
    6. ?>

    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.

  • Ich sehe keinerlei Debug-Ausgaben :(


    Code
    1. foreach ($_POST as $key => $value)
    2. echo "$key = --" . $value . "--<br>";

    Alles unter dem Strich ist eine Signatur!


    Die Deutsche Rechtschreibung ist Freeware, sprich, du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen!


    Zitat von Dieter Nuhr: "Wenn man keine Ahnung hat, einfach mal Fresse halten". Wie recht er doch hat...

  • 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
    1. 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.

  • 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
    1. <?php
    2. $log = [ 'script started' ];
    3. $log[] = isset( $_POST['name'] ) ? 'received post data' : 'NO DATA';
    4. 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.

  • 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.