Bernd: isset($_POST['abschicken']

Hallo,

warum kann ich so nicht prüfen?

if(isset($_POST['abschicken'] == 'Abschicken')){ echo $info; }

Ich erhalte folgende Felhermeldung

Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in

akzeptierte Antworten

  1. Ah, ich muss es so machen

    if(isset($_POST['abschicken'])) {
      if ($_POST['abschicken'] == 'Abschicken') {
    	 echo $info; 
      }
    }
    
    1. Lieber Bernd,

      Ah, ich muss es so machen

      müssen tust Du das nicht. Das geht auch so:

      if (
        array_key_exists('abschicken', $_POST)
        && $_POST['abschicken'] == 'Abschicken'
      ) {
        echo $info;
      }
      

      Liebe Grüße,

      Felix Riesterer.

      1. Hallo Felix,

        danke dir. Hat deine Schreibweise Vorteile gegenüber meine oder ist dieses einfach eine Geschmackssache?

        1. Lieber Bernd,

          Hat deine Schreibweise Vorteile gegenüber meine oder ist dieses einfach eine Geschmackssache?

          es ist wohl eher letzteres. Die Funktion array_key_exists tut genau das, was man von ihrem Namen her vermuten würde. isset dagegen prüft auf das generelle Vorhandensein einer Variable - obwohl wir ja wissen, dass es $_POST unbedingt geben muss, nur nicht, ob es den speziellen Schlüssel "abschicken" hat. Vom Schreibaufwand her ist isset schlanker und leistet in diesem speziellen Fall das gleiche.

          Was das Verschachteln von if-Statements angeht, so hat das selbstverständlich auch seinen Sinn, wenn Du innerhalb des "äußeren if" noch weitere Anweisungsblöcke notieren willst:

          if (isset($_POST['abschicken'])) {
          
            if ($a) { ... }
            if ($b) { ... }
          }
          

          Ansonsten notiere ich ein if-Statement, in dem ich alle benötigten Teile der Bedingung verwende (s.o.).

          Was mich an Deinem Beispiel ein bisschen wundert: Warum muss $_POST['abschicken'] exakt den Wert "Abschicken" enthalten? Könnte es noch andere Werte enthalten? Und wenn ja, warum? Genügt es nicht, rein und allein auf das Vorhandensein dieses Schlüssels zu prüfen?

          Liebe Grüße,

          Felix Riesterer.

          1. Hallo Felix,

            Was mich an Deinem Beispiel ein bisschen wundert: Warum muss $_POST['abschicken'] exakt den Wert "Abschicken" enthalten? Könnte es noch andere Werte enthalten? Und wenn ja, warum? Genügt es nicht, rein und allein auf das Vorhandensein dieses Schlüssels zu prüfen?

            auf meiner Seite habe ich zwei Buttons

            <input type="submit" name="abschicken" value="Abschicken">
            <input type="submit" name="abschicken" value="Speichern">
            

            Mit dem ersten schicke ich das Formular komplett ab.
            Mit dem zweiten bleibe ich auf der Seite

            1. hi

              Was mich an Deinem Beispiel ein bisschen wundert: Warum muss $_POST['abschicken'] exakt den Wert "Abschicken" enthalten? Könnte es noch andere Werte enthalten? Und wenn ja, warum? Genügt es nicht, rein und allein auf das Vorhandensein dieses Schlüssels zu prüfen?

              Natürlich genügt das.

              auf meiner Seite habe ich zwei Buttons

              <input type="submit" name="abschicken" value="Abschicken">
              <input type="submit" name="abschicken" value="Speichern">
              

              name+value setzen wie folgt:

              <input type="submit" value="1" name="Abschicken">
              <input type="submit" value="1" name="Speichern">
              

              Mit dem ersten schicke ich das Formular komplett ab.
              Mit dem zweiten bleibe ich auf der Seite

              Macht es dann serverseitig einfacher: isset() genügt. Die ganz Faulen lassen gar den value weg.

              FF

            2. Lieber Bernd,

              auf meiner Seite habe ich zwei Buttons

              <input type="submit" name="abschicken" value="Abschicken">
              <input type="submit" name="abschicken" value="Speichern">
              

              na, wenn das Gunnar sieht, dann wird er Dir sagen, dass Buttons mit <button> notiert werden.

              Mit dem ersten schicke ich das Formular komplett ab.

              Das ist eine Eigenschaft von Submit-Buttons.

              Mit dem zweiten bleibe ich auf der Seite

              Nein. Du landest bestenfalls auf einer neuen Seite unter der alten URL. Das ist etwas anderes. Warum Du identische Name-Werte verwendest, weißt wohl nur Du.

              Liebe Grüße,

              Felix Riesterer.

              1. Hallo,

                na, wenn das Gunnar sieht, dann wird er Dir sagen, dass Buttons mit <button> notiert werden.

                ob ein Button oder ein <input type="submit"> verwendet wird spielt für eine Suchmaschine und für die Funktionalität überhaupt keine Rolle. Und Gunnar ist nicht Gott. Man muss nicht alles gut finden was er sagt, auch wenn ich in vielen Sachen was CSS angeht seine Meinung sehr schätze.

                Nein. Du landest bestenfalls auf einer neuen Seite unter der alten URL. Das ist etwas anderes. Warum Du identische Name-Werte verwendest, weißt wohl nur Du.

                Naja eigentlich ganz einfach. Mein INSERT führe ich wie folgt aus

                if(isset($_POST['abschicken'])){}
                

                Am Ende wo ich dann entscheide ob ich auf der Seite bleiben möchte oder auf Seite zwei Weitergeleitet werden möchte mache ich dieses so

                if ($_POST['abschicken'] == 'Speichern') {
                	$targetURL = "Step-01.php";
                	header("Location: $targetURL");
                }
                
                if ($_POST['abschicken'] == 'Weiter') {
                	$targetURL = "Step-02.php";
                	header("Location: $targetURL");
                }
                

                Auf der Seite selbst prüfe ich dann noch, ob Fehler vorhanden sind, diese sind aber nur wichtig, wenn ich auf Seite zwei möchte, solange ich den Wert nur speichern möchte können die Fehler umgemerkt bleiben

                if(isset($_POST['abschicken'])) {
                  if ($_POST['abschicken'] == 'Weiter') {
                    echo $info; 
                  }
                }
                

                Am liebsten wäre es mir ja, wenn die Felder automatisch gespeichert werden wenn ich das Feld verlasse, dieses ist aber bestimmt sehr komplex und schwer umzusetzen.

                1. Hallo Bernd,

                  ob ein Button oder ein <input type="submit"> verwendet wird spielt für eine Suchmaschine und für die Funktionalität überhaupt keine Rolle.

                  https://blog.selfhtml.org/2015/02/09/input-oder-button-fuer-submit-elemente/

                  Bis demnächst
                  Matthias

                  --
                  Pantoffeltierchen haben keine Hobbys.
                  1. .... wie gesagt es ändert nichts an der Funktionalität der Seite. Und für mein SEO ist dieses ebenfalls nicht wichtig. Google meckert auch nicht. Und ich erstelle meine Seite für Google.

                    1. Hallo

                      Und ich erstelle meine Seite für Google.

                      Gut zu wissen. Dann werde ich mir in Zukunft keine Mühe mehr geben, deine Fragen zu beantworten.

                      Ich erstelle meine Antworten nämlich nur für Fragende, die ihre Seiten für Menschen erstellen.

                      Frohes Fest und so,

                      Orlok

                      1. Man merkt, von Marketing hast du keine Ahnung. Ich lebe davon dass man meine Ware mietet und dieses erreiche ich nur wenn ich auf Seite 1 am besten auf Platz 1-3 zu finden bin. Alles andere wird nicht mehr angeklickt. Also muss ich eine Seite für Suchmaschinen erstellen. Die Menschen müssen anschließend eh bei mir anrufen da sie selbst überhaupt nichts bestellen können.

                        1. hallo

                          Man merkt, von Marketing hast du keine Ahnung. Ich lebe davon dass man meine Ware mietet und dieses erreiche ich nur wenn ich auf Seite 1 am besten auf Platz 1-3 zu finden bin. Alles andere wird nicht mehr angeklickt. Also muss ich eine Seite für Suchmaschinen erstellen. Die Menschen müssen anschließend eh bei mir anrufen da sie selbst überhaupt nichts bestellen können.

                          Warum nur sind wir von einem Problem (wie beschreibe ich Buttons mit submit-Wirkung am Besten), zu SEO gekommen?

                          Ich kann mir beim besten Willen nicht vorstellen, dass Google jetzt auch Formulare bedient. Das wird AI vielleicht tun. Mit der möchte ich aber weder Schach noch Go noch Formular spielen.

                          1. Deshalb ist scheiß egal ob du ein Button oder ein Submit nimmst. Wollen aber hier einige Menschen nicht kapieren.

                        2. Hallo,

                          Die Menschen müssen anschließend eh bei mir anrufen da sie selbst überhaupt nichts bestellen können.

                          Und mit deinem Formular kann man telefonieren?

                          Gruß
                          Kalk

                          1. ... nö, dieses benötige ich nur für die Verwaltung. Die Webseite dient nur um Leute zum anrufen zu bewegen mehr auch nicht. Deshalb wir die Seite auch nur für Google entwickelt um da auf Seite 1 Platz 3-4 zu stehen.

                2. Lieber Bernd,

                  Auf der Seite selbst prüfe ich dann noch, ob Fehler vorhanden sind, diese sind aber nur wichtig, wenn ich auf Seite zwei möchte, solange ich den Wert nur speichern möchte können die Fehler umgemerkt bleiben

                  das muss ich jetzt sicherlich nicht verstehen. Meinst Du, dass Du die Eingaben in einer Session so lange speicherst, bis es zu einem INSERT kommt?

                  Am liebsten wäre es mir ja, wenn die Felder automatisch gespeichert werden wenn ich das Feld verlasse, dieses ist aber bestimmt sehr komplex und schwer umzusetzen.

                  Meinst Du mit "das Feld verlasse" ein blur-Event? Das kann man mit JavaScript "merken", um dann mit JavaScript einen passenden POST-Request abzusetzen. Das setzt aber zuallererst voraus, dass Deine PHP-Logik stimmt. Und ob Du dann noch mit step-01.php und step-02.php sinnvoll modularisiert hast, bleibt fraglich.

                  Liebe Grüße,

                  Felix Riesterer.

    2. Ah, ich muss es so machen

      if(isset($_POST['abschicken'])) {
        if ($_POST['abschicken'] == 'Abschicken') {
      	 echo $info; 
        }
      }
      

      Ne, musst nicht. Wenn der Parameter 'abschicken' eine bestimmte Aktion auslösen soll, reicht doch die Prüfung ob der Parameter vorhanden ist.

      fF

  2. hallo

    Hallo,

    warum kann ich so nicht prüfen?

    if(isset($_POST['abschicken'] == 'Abschicken')){ echo $info; }
    

    Ich erhalte folgende Felhermeldung

    Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in

    Ehrlich gesagt, finde ich es ziemlich idiotisch den input name als abschicken zu benennen.

    Wenn schon:

    • name="action" value="sendmail"
    • name="action" value="previewmail"
    1. Lieber beatovich,

      Ehrlich gesagt, finde ich es ziemlich idiotisch

      nicht jeder der hier Fragenden hat Deine Erfahrungsebene erreicht und kann daher seine Elemente mit der Menge Sinn benennen, wie Du das tust.

      • name="action" value="sendmail"
      • name="action" value="previewmail"

      Warum nicht <button name="sendmail">Mail senden</button>? Dieses "action" kann man zwar so machen, muss man aber nicht.

      Und TOFU in allen seinen Varianten finde dagegen ich ziemlich idiotisch, weil man sich dabei ganz offensichtlich nichts gedacht hat.

      Liebe Grüße,

      Felix Riesterer.

      1. hallo

        Warum nicht <button name="sendmail">Mail senden</button>? Dieses "action" kann man zwar so machen, muss man aber nicht.

        Weil du so nicht im gleichen Script verschiedene Aktionen einfach abfragen kannst.

        1. Lieber beatovich,

          Weil du so nicht im gleichen Script verschiedene Aktionen einfach abfragen kannst.

          $actions = array(
            'sendmail' => 'send_my_mail',
            'preview' => 'preview_my_mail'
          );
          
          $messages = array();
          
          if (!empty($_POST)) {
          
            foreach ($actions as $key => $function) {
              if (array_key_exists($key, $_POST)) {
                $messages[] = {$function}();
              }
            }
          }
          

          Liebe Grüße,

          Felix Riesterer.

    2. Hallo,

      Ehrlich gesagt, finde ich es ziemlich idiotisch den input name als abschicken zu benennen.

      warum? Unter abschicken versteht jeder was gemeint ist und was die Aktion tut. Daher finde ich es nicht idiotisch.

      1. hallo

        Hallo,

        Ehrlich gesagt, finde ich es ziemlich idiotisch den input name als abschicken zu benennen.

        warum? Unter abschicken versteht jeder was gemeint ist und was die Aktion tut. Daher finde ich es nicht idiotisch.

        Was meint abschicken?

        • Vorschau einer Mail oder
        • Senden einer Mail an eine Mailbox

        Verschiedene Teilnehmer müssen verschiedenes verstehen.

        • Der Formular-User muss verstehen, dass dieser Button die Formular-Verarbeitung starten wird, ob Daten hierbei an den Server geschickt werden, oder von einem lokalen js-Script verarbeitet werden, interessiert ihn nicht. Er muss wissen, was der Button in seinen Konsequenzen tut.
        • Ein Serverscript muss verstehen, was es mit den ankommenden Daten zu tun hat.