Ankündigung

Einklappen
Keine Ankündigung bisher.

Variablen

Einklappen

Neue Werbung 2019

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

  • Variablen

    Grüße!

    Sorry für Anfängerfrage, aber mich interessiert folgendes. Was ist der Unterschied zwischen,

    PHP-Code:
    if(isset($_POST['variable'] && is_string($_POST['variable'])) {
        
    $variable htmlspecialchars($_POST['variable']);
    } else {
        
    $variable "";

    und

    PHP-Code:
    if(!empty($_POST['variable'] && is_string($_POST['variable'])) {
        
    $variable htmlspecialchars($_POST['variable']);
    } else {
        
    $variable "";

    Mir geht es im diesem Fall um isset() und empty(). Wie ich das mit isset verstehe, wird das obere immer abgefragt, wenn das $_POST gesetzt ist und $_POST['variable'], also immer. Im zweiten nur, falls $_POST['variable'] tatsächlich existiert. Was ist die bessere Variante, oder haben die alle irgendeinen Hacken, was ich noch nicht sehe?

    Vielen Dank im Vorraus

  • #2
    Mit empty() prüfst Du atomatisch bereits auch die Existenz der Variable.
    Wenn Du also prüfen willst, ob eine Variable einen "Leer"-Wert hat und ob sie überhaupt existiert, bist Du mit empty() richtig.
    Es sei denn, Du willst bei Nicht Existenz eine andere Logik verarbeiten, dann brauchst Du wieder isset().
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Hinweis: Alle Werte in GET/POST/... sind Strings

      Kommentar


      • #4
        Siehe auch das Handbuch dazu:

        http://php.net/manual/de/types.comparisons.php

        http://php.net/manual/de/function.empty.php

        Kommentar


        • #5
          Habt vielen Dank!

          Werde es so mitnehmen

          Kommentar


          • #6
            protestix Dein erster Link geht auch auf empty(), hier die Korrektur: http://php.net/manual/de/types.comparisons.php
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Hinweis: Alle Werte in GET/POST/... sind Strings
              .. und somit ist
              PHP-Code:
              is_string($_POST['variable']) 
              überflüssig.
              !empty($_POST['name']) kann auch als isset($_POST['name']) && $_POST['name'] != false interpretiert werden.

              Dann:
              htmlspecialchars bei der Eingabeverarbeitung pauschal anzuwenden ist der falsche Zeitpunkt.

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                !empty($_POST['name']) kann auch als isset($_POST['name']) && $_POST['name'] != "" interpretiert werden.
                Nö Deine Prüfung bildet nicht empty() ab! Da fehlt noch eine Prüfung. '0' is auch empty!

                Prinzipbedingt sind die Werte aller superglobalen Variablen nicht readonly und somit eben nicht exklusiv Zeichenketten.

                Beispiel: https://eval.in/631471

                Edit: Wenn man wegen der Zeichenketten sichergehen will und auch wegen der Quelle der Daten dann sollte man lieber zum ohnehin saubereren filter_* functionen greifen.

                PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                Kommentar


                • #9
                  Wenn man über

                  HTML-Code:
                  <input type="checkbox" name="checkbox[]">
                  also name="checkbox[]" übergibt, ist das $_GET/$_POST kein string mehr, sondern array(). Aufgegriffen aus einem schlauem PHP-Buch. Dort wird halt erklärt, das man auf String prüfen sollte, weil auch Arrays übergeben werden können. Aber das ist für mich erst einmal eine andere Geschichte. Ich versuche das mit isset und empty zu verinnerlichen. Das htmlspecialchars zu falschem Zeitpunkt anwende, ist ein guter Tipp. Ich werde es berücksichtigen.

                  Kommentar


                  • #10
                    Zitat von Ulfikado Beitrag anzeigen
                    Prinzipbedingt sind die Werte aller superglobalen Variablen nicht readonly und somit eben nicht exklusiv Zeichenketten.
                    Aber wer macht schon so absonderliche Sachen wie die Request-Superglobals zu veraendern ...

                    Kommentar


                    • #11
                      Zitat von Dormilich Beitrag anzeigen
                      Aber wer macht schon so absonderliche Sachen wie die Request-Superglobals zu veraendern ...
                      Kann man super als Hack mißbrauchen klar. Mal abgesehen davon ging es doch darum das es eben nicht nur Zeichenketten sein können und wie das auf einen, für Dich vielleicht nicht so absonderlichen Weg geht hat Goethe gezeigt.
                      PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                      Kommentar


                      • #12
                        Grüße!

                        Danke an alle für die Tipps! Ich werde denen nachgehen, nachlesen, ausprobieren und natürlich anwenden

                        Kommentar

                        Lädt...
                        X