Problem mit is_int()-Funktion

  • Hey zusammen,


    und zwar möchte ich wenn die eingabe des users keine Ganzzahl ist eine fehlermeldung ausgeben. Nun wenn ich eine Ganzzahl dort eingebe wie z.b 23, dann gibt es mir immernoch die Fehlermeldung. 23 ist doch eine Ganzzahl ?


    Anbei mein codegeschnipsel :

    PHP
    if(empty($alter)){
    		$error[] = '<p class="fehlermeldung">Bitte geben Sie ihr Alter an!</p>';
    	} else if (!is_int($alter)){
    		$error[] = '<p class="fehlermeldung">Bitte geben Sie beim Alter eine Zahl an!</p>';
    	}


    Hier gebe ich wenn die var $alter keine ganzzahl ist den error aus. Die var $alter erhält seinen wert über ein formular.


    HTML
    <label>Alter:</label> <input type="text" name="alter" value="<?php if(is_int($alter)) print $alter ?>">


    Ich verstehe nicht warum es immer den error ausgiebt...


    Hoffe ihr wisst warum.


    Stef

  • Ohne zu wissen, was du wirklich in $alter zur Prüfung übergibst, ist das auch nur raten.
    Wenn $alter eine Ganzzahl wäre, gäbe es keine Fehlermeldung.
    Wenn die Fehlermeldung kommt, ist in $alter keine Ganzzahl.


    Fehler werden nur selten durch die Fehlermeldung verursacht, sondern meist vorher.


    Also, Butter bei die Fische: Was übergibst du wie in $alter ?

  • Er gibt eine Zahl in sein Formular ein und das steckt er in $alter.


    Stef Mach doch einfach mal vor dem ganzen Code ein var_dump() von $_POST['alter']. Dann wirst du sehen, dass es kein Integer ist, sondern ein String, was da aus dem Formular kommt.

  • Er gibt eine Zahl in sein Formular ein und das steckt er in $alter.


    Ja, wahrscheinlich hast Du recht. Bei mir werden schon so lange die Benutzereingaben geprüft, dass mir das schon garnicht einfällt, dass man die $_POST-Werte ungeprüft annimmt. Aus dem geposteten Code von Stef kann man ja nicht schliessen, dass die $_POST-Werte vor der Ausgabe noch geprüft werden. Somit wird die Zuweisung vermutlich sein $alter = $_POST['alter'] anstatt $alter = (int)$_POST['alter']. Aber das ist jetzt nur geraten.


    Ich habe dazu mal einen kleinen Schnipsel gecodet, der das ganz gut verdeutlicht.



    Die Ausgabe bei Erstaufruf des Scriptes:
    12 ist KEIN Integer
    12 ist Integer


    Gebe ich die Zahlen 34 und 56 in die Felder ein und schicke es ab, erfolgt als Ausgabe, wenn die obigen Zeilen 11+12 auskommentiert sind:
    34 aus txZahlText ist KEIN Integer
    56 aus txZahlNumber ist KEIN Integer


    Kommentiere ich die Zeilen 11+12 nicht aus (also die gesicherte Variante, so wie es oben im Script steht), gibt es diese Ausgabe:
    34 aus txZahlText ist Integer
    56 aus txZahlNumber ist Integer


    edit: Durch die Formatierung gingen die escape-Zeichen verloren. Das echo sieht original so aus:
    echo"<form action=\"\" method=\"post\">
    <input type=\"text\" name=\"txZahlText\" value=\"$a\" placeholder=\"Zahl in text\">
    <input type=\"number\" name=\"txZahlNumber\" value=\"$b\" placeholder=\"Zahl in number\">
    <input type=\"submit\" name=\"sbSend\">
    </form>";

  • Ja, da hast du durchaus Recht. Für spätere Rechnungen etc. ist es sauberer, es in einen Integer umzuwandeln.


    Das wäre dann halt die zweite Möglichkeit: Erst in Integer umwandeln und dann is_int() benutzen.

  • Hey,


    Ich gebe wie JR Cologne gesagt hat die Zahl im formular ein und füge dann diese zahl nach dem absenden des formulars der variable $alter zu.


    Ich habe jetzt mal die var $alter ausgeben lassen mit var_dump und es kommt immer raus : int(zahl) . Das Problem war das ich die usereingabe nicht als (int) gesetzt habe sondern ohne (int) , so : $alter = $_POST['alter'];
    Das 2.te problem war das ich die ganzen variablen durch die function htmlspecialchars() laufen gelassen habe und somit das int() zu string() wurde.


    Und danke für die Beispiele. Waren/Sind sehr hilfreich.


    Nun mal ne andere Frage. Ich habe diese variablen :


    PHP
    $vorname = (string)$_POST['vorname'];
    	$nachname = (string)$_POST['nachname'];
    	$alter = $_POST['alter'];
    	$wohnort = (string)$_POST['wohnort'];
    	$aktuelles_einsatzgebiet = (string)$_POST['aktuelles_einsatzgebiet'];
    	$qualifikationen = (string)$_POST['qualifikationen'];
    	$hobbys = (string)$_POST['hobbys'];
    	$v_arbeitsplatz = (string)$_POST['v-arbeitsplatz'];


    Diese Variablen werden im späteren Zeitpunkt im script in die datenbank eingetragen. Ich habe was von XSS-Attacken gehört und gelesen. Und habe auch gelesen das htmlspecialchars(); dabei hilft. Die funktion sollte sonderzeichen ja in htmlcode umwandeln. Jedoch als ich alle vars durch htmlspecialchars gejagt habe und diese in die db eingetragen habe und diese dann aufgerufen habe liefen die javascript-codes (als test) immernoch und waren unverändert.
    Wie kann ich mich denn dagegen am besten schützen? Mit welcher Funktion schützt ihr euch von XSS-Attacken ?


    Stef

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!