parley: Fehler bei Überprüfung von übergebenen Variablen

Hallo,
ich sitze hier gerade an einem Gästebuch und habe ein Problem:
Zwei Variablen werden jeweils übergeben: die Variable für den Anfangseinträg der jeweils nächsten Seite und die Variable des Endeintrags der jeweils nächsten Seite.
also seite.php?begin=2&end=5 meinetwegen ...

Nun wollte ich eine Prüfung einbauen, da die Variablen ja nur vom Typ Ganzzahl sein dürfen und habe folgendes probiert:

$begin=$_GET[begin];
$pruefung=is_integer($begin);

if($pruefung=="false") { ...
                       }
else {...

Funktionieren tut sie allerdings nicht ...

  1. Hi,

    Zwei Variablen werden jeweils übergeben:

    null Variablen werden übergeben. Es ist nicht möglich, über HTTP irgend welche Variablen zu übergeben.

    also seite.php?begin=2&end=5 meinetwegen ...

    Das nennt sich Parameter.

    $pruefung=is_integer($begin);
    if($pruefung=="false") { ...

    Nach meinem Kenntnisstand liefert is_integer einen Boolean zurück. Du vergleichst ihn mit dem String "false", der im Boole'schen Sinne true ist. Ich bin mir ziemlich sicher, dass dies nicht Deiner Intention entspricht.

    Funktionieren tut sie allerdings nicht ...

    Und die Fehlerbeschreibung lautet ...?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. also ich hab es nun mal so ausprobiert:

      $begin=$_GET[anfang];

      if($begin=is_real($begin)) {
                                 print("ab");
                                 }
                                else {
                                print("xy");
                                }

      Egal welchen Wert ich für $begin übergeben, es kommt immer die Ausgabe "xy" - da kann doch irgendwas nicht stimmen ...

      1. Hi,

        also ich hab es nun mal so ausprobiert:
        if($begin=is_real($begin)) {
        Egal welchen Wert ich für $begin übergeben, es kommt immer die Ausgabe "xy" - da kann doch irgendwas nicht stimmen ...

        ja, Deine Interpretation der Funktion is_real(). Dabei finde ich die Dokumentation diesbezüglilch sehr klar. Was genau hast Du daran nicht verstanden?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. ja, Deine Interpretation der Funktion is_real(). Dabei finde ich die Dokumentation diesbezüglilch sehr klar. Was genau hast Du daran nicht verstanden?

          Hm, naja bei is_string funktioniert es ja - allerdings will ich nicht testen ob ein integer übergeben wurde, sondern ob eine natürliche Zahl übergeben wurde (da nur diese in meinem Fall sinn macht) - also positive reele Zahl - mit welcher Funktion kann ich das denn testen?

          1. Hi there,

            Hm, naja bei is_string funktioniert es ja - allerdings will ich nicht testen ob ein integer übergeben wurde, sondern ob eine natürliche Zahl übergeben wurde

            Hm? _Der_ Unterschied ist, zumal in einer nicht typisierten Sprache wie PHP, ohnehin ein rein philosophischer (vom Vorzeichen einmal abgesehen. Wie Du das feststellen kannst, wirst Du ja vermutlich wissen ;)

            (da nur diese in meinem Fall sinn macht) - also positive reele Zahl - mit welcher Funktion kann ich das denn testen?

            "Reele" Zahlen wirst Du auf einem Rechner streng genommen nie erhalten. "Rationale" Zahlen sind auch etwas anderes als "natürliche" Zahlen; also, was suchst Du wirklich?

            1. "Reele" Zahlen wirst Du auf einem Rechner streng genommen nie erhalten. "Rationale" Zahlen sind auch etwas anderes als "natürliche" Zahlen; also, was suchst Du wirklich?

              Ich suche eine Funktion die mir testet ob eine Variable vom Typ
              1.) Zahl ist
              2.) positive Zahl
              3.) Ganzzahl
              also 1, 2, 3, 4, 5, 6
              und nicht -1 oder 1.6 oder xy ...

              1. Hi there,

                Ich suche eine Funktion die mir testet ob eine Variable vom Typ
                1.) Zahl ist

                Dann multipliziere die Variable mit 1; wenn Du 0 erhältst -> keine Zahl (ausser natürlich 0 selbst, das mußt Du vorher abfragen)

                2.) positive Zahl

                Du vergleichst, ob die Zahl >= 0 ist oder die Zahl ident mit ihrem Absolutbetrag ist

                3.) Ganzzahl

                wenn $zahl gleich dem intval($zahl) ist, hast Du eine Ganzzahl

                mehr brauchst Du nicht...

                1. Hi there,

                  Ich suche eine Funktion die mir testet ob eine Variable vom Typ
                  1.) Zahl ist

                  Dann multipliziere die Variable mit 1; wenn Du 0 erhältst -> keine Zahl (ausser natürlich 0 selbst, das mußt Du vorher abfragen)

                  2.) positive Zahl

                  Du vergleichst, ob die Zahl >= 0 ist oder die Zahl ident mit ihrem Absolutbetrag ist

                  3.) Ganzzahl

                  wenn $zahl gleich dem intval($zahl) ist, hast Du eine Ganzzahl

                  mehr brauchst Du nicht...

                  Danke! :)

                2. Hi,

                  Dann multipliziere die Variable mit 1;

                  warum? Das ist doch Unsinn.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Hi there,

                    warum?

                    was genau ist Dir unklar?

              2. Hi,

                Ich suche eine Funktion die mir testet ob eine Variable vom Typ [...]

                und was bitte ist Dir nun nach zwei Stunden, die Du zur Konsultierung der Dokumentation nutzen konntest, noch immer unklar?

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
            2. echo $begrüßung;

              Hm, naja bei is_string funktioniert es ja - allerdings will ich nicht testen ob ein integer übergeben wurde, sondern ob eine natürliche Zahl übergeben wurde

              Hm? _Der_ Unterschied ist, zumal in einer nicht typisierten Sprache wie PHP, ohnehin ein rein philosophischer (vom Vorzeichen einmal abgesehen. Wie Du das feststellen kannst, wirst Du ja vermutlich wissen ;)

              Es mag ja sein, dass PHP-Variablen nicht typisiert sind. Das heißt aber noch lange nicht, dass PHP nicht zwischen Typen unterscheidet.

              $x = 0; und $x = "0"; ist nicht das gleiche, wie dir die Funktionen gettype() oder var_dump() zeigen werden, wenn du sie auf $x anwendest.

              echo "$verabschiedung $name";

              1. Hi there,

                $x = 0; und $x = "0"; ist nicht das gleiche

                Hab ich auch nie behauptet, es ging um den Unterschied zwischen "natürlichen" und "integer" Zahlen. Im übrigen ist es in den meisten Fällen völlig egal, was PHP zu den verschiedenen Typen "behauptet", die Bedeutung einer Variablen ergibt sich aus ihrem Gebrauch...

                1. echo $begrüßung;

                  Im übrigen ist es in den meisten Fällen völlig egal, was PHP zu den verschiedenen Typen "behauptet", die Bedeutung einer Variablen ergibt sich aus ihrem Gebrauch...

                  Einspruch Euer Ehren! Wenn dem so wäre, hätte der OP ja keine Probleme seinem  is_integer('42')/is_real('0.815') haben dürfen.

                  echo "$verabschiedung $name";

                  1. Hi there,

                    Im übrigen ist es in den meisten Fällen völlig egal, was PHP zu den verschiedenen Typen "behauptet", die Bedeutung einer Variablen ergibt sich aus ihrem Gebrauch...

                    Einspruch Euer Ehren! Wenn dem so wäre, hätte der OP ja keine Probleme seinem  is_integer('42')/is_real('0.815') haben dürfen.

                    Naja, im Grunde genommen waren das ja echte Scheinprobleme, die aus einer gewissen Unkenntnis seinerseits erwachsen sind. Was ich eigentlich meinte, ist, daß der Datentyp einer PHPVariablen sinnigerweise eher durch die auf die Variable angewendeten Operatoren bestimmt wird denn durch irgendwelche Funktionen, die sich noch von Version zu Version ändern und irgendwelche logischen Werte zurückgeben, die zB beim Portieren in andere Sprachen eher lästig sein können. (Womit ich dem OP eine solche Absicht nicht unterstellen will ;)

                    Natürlich zwischen 1 und "1" ein Unterschied, aber wenn ich einen numerischen Operator auf "1" anwende, dann ist es eben eine Zahl und durch nichts von 1 zu unterscheiden. Man kann da jetzt stilistische Einwände haben, dem kann man in PHP aber imho nur durch entsprechen Wahl der Variablennamen entgehen...

                    1. echo $begrüßung;

                      »Was ich eigentlich meinte, ist, daß der Datentyp einer PHPVariablen sinnigerweise eher durch die auf die Variable angewendeten Operatoren bestimmt wird

                      Ich weiß was du meinst, aber der Sachverhalt ist dann doch etwas anders. Der Typ der Variablen bleibt, einmal gesetzt, gleich. Geändert werden kann er durch settype() oder durch eine Zuweisung mit einem Wert eines anderen Typs.
                      Bei Leseoperationen ändert sich der Typ einer Variablen selbst nicht, es wird aber im Bedarfsfall mit dem daraus ausgelesenen Wert eine implizite (von PHP selbst vorgenommene und vom Programmautor nicht ausdrücklich verlangte) und kontextabhängige Typumwandlung durchgeführt, bevor damit weitergerechnet wird.

                      $x = 'Ich';  
                      echo $x . ' entspreche zwar ' . ($x ? '"true"' : '"false"');  
                      echo ', bin aber immer noch ein ' . gettype($x) . '.';
                      

                      echo "$verabschiedung $name";

          2. Hi,

            Hm, naja bei is_string funktioniert es ja

            es _ist_ ja auch ein String.

            allerdings will ich nicht testen ob ein integer übergeben wurde,

            Integer?

            sondern ob eine natürliche Zahl übergeben wurde

            Und warum überprüfst Du dann, ob der Datentyp eines Strings Float (also ein anderer als String) ist?

            mit welcher Funktion kann ich das denn testen?

            Das sagt die Doku sehr, sehr deutlich.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          3. echo $begrüßung;

            Hm, naja bei is_string funktioniert es ja

            Per HTTP übergebene Werte, die PHP über $_GET/$_POST/etc. verfügbar macht, sind immer vom Typ string. Das kannst du sehen, wenn du typanzeigende Funktionen wie gettype() oder var_dump() bemühst.

            allerdings will ich nicht testen ob ein integer übergeben wurde, sondern ob eine natürliche Zahl übergeben wurde [...] mit welcher Funktion kann ich das denn testen?

            is_numeric() sollte dafür geeignet sein.

            Weiterhin könnte floatval() und/oder das Thema Type Juggling für dich interessant sein.

            echo "$verabschiedung $name";