Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschachtelte POST Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verschachtelte POST Abfrage

    Hallo zusammen,

    ich versuche gerade ein Formular zu schreiben, in dem insgesamt 5 Werte per POST zur Weiterverarbeitung auf die gleiche Seite geleitet werden sollen. Dazu muss die Seite natürlich wissen, ob sie mit POST aufgerufen wird, oder ob nicht.
    Dabei sind die Werte 1 (Text) und 2 (Checkbox) gegenseitig ausschließend. Wenn Wert 2 gesetzt ist soll Wert 1 ignoriert werden.
    Ich möchte gerne per if abfragen, ob (1 || 2) && 3 && 4 && 5 im POST stehen.
    Ich bekomme dazu allerdings die Fehlermeldung
    Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in C:\xampp\htdocs\trashmailer.php on line 133
    Der genaue Code sieht wie folgt aus:

    PHP-Code:
    if (isset(($_POST["mailbox"]) || ($_POST["random"])) && ($_POST["destination"]) && ($_POST["ttl"]) ){
        echo 
    "none";

    Kann ich das irgendwie so abfragen? Oder muss ich zumindest das 1/2 Problem schon vorher lösen?


  • #2
    PHP-Code:
    (isset($_POST["mailbox"]) || isset($_POST["random"])) &&... 
    man kann nicht im isset ein OR einbauen
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

    Kommentar


    • #3
      Zitat von GabbaLo Beitrag anzeigen
      [PHP]if (isset(($_POST["mailbox"]) || ($_POST["random"])) && ($_POST["destination"]) && ($_POST["ttl"]) ){
      du musst jedem Element in $_POST ein eigenes isset() spendieren, du kannst isset() keinen Ausdruck übergeben (sagt ja auch die Fehlermeldung), isset(true) bzw. isset(false) ist auch irgendwo wenig sinnvoll …

      Kommentar


      • #4
        Das isset() kannst du nicht alles umschließen lassen, das sagt ja schon die Fehlermeldung. Du musst also:
        PHP-Code:
        if (isset($_POST["mailbox"]) || isset($_POST["random"]) && isset($_POST["destination"]) && isset($_POST["ttl"]) { 
            echo 
        "none"

        verwenden.

        Mist ich war zu langsam.

        Kommentar


        • #5
          Steht doch genau da. Nicht nur einmal isset nutzen...

          PHP-Code:
          if ( isset( $_POST["mailbox"] ) || isset( $_POST["random"], $_POST["destination"], $_POST["ttl"] ) ){ 
              echo 
          "none"


          Ungetestet, sollte aber machen was du willst.


          @Vorposter, isset kann mit mehreren Werten befüllt werden.
          Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

          Kommentar


          • #6
            Zitat von TessaKavanagh Beitrag anzeigen
            Mist ich war zu langsam.
            Und falsch ist dein Code auch noch: es fehlt eine schließende runde Klammer und es fehlt ein Satz Klammern um die beiden mit or verknüpften isset() (and bindet stärker als or, das Ergebnis wäre demnach nicht wie gewünscht).

            Kommentar


            • #7
              @tk1234

              Geschenkt! haste recht.

              Kommentar


              • #8
                Danke für die Antworten
                Ich hab mir den Code von Geromel mal genauer angesehen.

                Müsste es nicht so heißen?

                PHP-Code:
                if ( ( isset($_POST["mailbox"]) || isset($_POST["random"] ) ) && isset($_POST["destination"], $_POST["ttl"] ) ){ 
                    echo 
                "none";

                Ich brauche ja entweder mailbox oder random und zusätzlich destination und ttl.
                Oder hab ich da jetzt was falsch verstanden?

                Kommentar


                • #9
                  PHP-Code:
                  isset($_POST["destination"], $_POST["ttl"] ) 
                  Zitat von tk1234
                  du kannst isset() keinen Ausdruck übergeben (sagt ja auch die Fehlermeldung), isset(true) bzw. isset(false) ist auch irgendwo [PHP]wenig sinnvoll …
                  PHP-Code:
                  if (
                        ( isset(
                  $_POST["mailbox"]) || isset($_POST["random"]) ) && isset($_POST["destination"]) && isset($_POST["ttl"])
                     ){
                      echo 
                  "none";

                  ^^ (mailbox oder randon) UND destination UND ttl

                  Kommentar


                  • #10
                    Ich hab mir den Code von Geromel mal genauer angesehen.
                    Auch ausprobiert? Funktioniert er nicht?

                    @der_robert #9: Wobei das Verhalten ja ident ist.

                    PHP-Code:
                    // Ich möchte gerne per if abfragen, ob (1 || 2) && 3 && 4 && 5 im POST stehen.
                    // Ich brauche ja entweder (mailbox ODER random) UND destination UND ttl

                    $_POST["mailbox"] = null;
                    $_POST["random"] = "foo";
                    $_POST["destination"] = "foo";
                    $_POST["ttl"] = "foo";


                    if (
                          ( isset(
                    $_POST["mailbox"]) || isset($_POST["random"]) ) && isset($_POST["destination"], $_POST["ttl"])
                       ){
                        echo 
                    "Bedingung 1 erfüllt";
                    }  


                    if (
                          ( isset(
                    $_POST["mailbox"]) || isset($_POST["random"]) ) && isset($_POST["destination"]) && isset($_POST["ttl"])
                       ){

                       echo 
                    "Bedingung 2 erfüllt";

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von GabbaLo Beitrag anzeigen
                      Ich hab mir den Code von Geromel mal genauer angesehen.

                      Müsste es nicht so heißen?

                      PHP-Code:
                      if ( ( isset($_POST["mailbox"]) || isset($_POST["random"] ) ) && isset($_POST["destination"], $_POST["ttl"] ) ){ 
                          echo 
                      "none";


                      Wie man im Manual lesen kann, ist der Rückgabewert von isset() TRUE wenn alle der übergebenen Variabeln TRUE sind.

                      Also funktioniert sowohl
                      PHP-Code:
                      if ( isset($_POST["mailbox"]) || ( isset($_POST["random"] )  && isset($_POST["destination"]) && isset( $_POST["ttl"] ))){ 
                          echo 
                      "none";

                      als auch
                      PHP-Code:
                      if ( isset($_POST["mailbox"]) || isset($_POST["random"], $_POST["destination"], $_POST["ttl"] )){ 
                          echo 
                      "none";

                      Kommentar


                      • #12
                        Zitat von hausl Beitrag anzeigen
                        Auch ausprobiert? Funktioniert er nicht?
                        Ausprobiert noch nicht, da mein Formular aktuell das Absenden verweigert.
                        Ich habe hier schon

                        PHP-Code:
                        <form action="<?php htmlentities($_SERVER['PHP_SELF']) ?>" method="POST">
                        und
                        PHP-Code:
                        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
                        und
                        PHP-Code:
                        <form action="selbeseite.php" method="post"
                        ausprobiert, was aber irgendwie alles nichts bringt. Das Formular bleibt ausgefüllt und immer da, obwohl es eigentlich ausgeblendet werden müsste und statt dessen ein var_dump der entsprechenden POST Inhalte erscheinen sollte.

                        Ausgeführt werden sollte es hier
                        PHP-Code:
                        <input type="button" onClick="reset" value="Reset"><input type="button" onClick="submit" value="Absenden"

                        Kommentar


                        • #13
                          Zitat von GabbaLo Beitrag anzeigen
                          Ich habe hier schon […]
                          Lasst das action-Attribut einfach weg bzw. wenn du nicht HTML5 verwendest leer.

                          <input type="button" onClick="reset" value="Reset"><input type="button" onClick="submit" value="Absenden">
                          Das ist auch Unsinn, da würde ich mich auch weigern irgendwas abzuschicken. Schau mal in die Javascript-Fehlerkonsole, da dürfte es dir ein paar Fehlermeldungen um die Ohren hauen. Und dann verwende einfach <input type="submit" value="Absenden" /> (den reset-Button braucht man imho nicht, da besteht nur die Gefahr dass der User seine Eingaben zurücksetzt und nochmal von vorne anfangen muss)

                          Kommentar


                          • #14
                            @Mr. Beer Das spart zumindest einige zeichen und ist etwas übersichtlicher als mit 100en && und || zu arbeiten. Zudem gibts keine Probleme mit der Reihenfolge der logischen Ausdrücke
                            Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

                            Kommentar


                            • #15
                              PHP-Code:
                              <input type="button" onClick="reset" value="Reset">
                              <
                              input type="button" onClick="submit" value="Absenden"
                              Was ist das "onclick" Attribut? Mach das mal weg. http://www.w3schools.com/tags/tag_button.asp

                              Dann, wenn du html5 hast dann so:
                              PHP-Code:
                              <form method="post"
                              Aktiviere error_reporting und mach mal auf deiner Seite ganz oben ein var_dump($_POST); rein.

                              Also Scriptbeginn:

                              PHP-Code:
                              <?php
                              error_reporting
                              (-1);
                              ini_set('display_errors'1);

                              var_dump($_POST);
                              und schick das form mal ab.
                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X