Veröffentlicht 3. November 200519 j Hallo zusammen, habe mal wieder nen Problem Einige User trixen meine Scripts gezielt mit Falscheingaben aus. Die Meißten Sonderzeichen sind mittlerweile verboten, da es mit # etc. ziemlich leicht ist Fehler in der DB hervorzurufen etc. pp. Der Neuste Trend ist Buchstaben statt Zahlen einzutragen (Werden z.T. als Hex-Wert behandelt) Habe nen bischen gegoogelt und die Funktion is_int($var) oder is_integer gefunden. Funktioniert aber nur wenn ich das einzelnd abfrage. Mache ich ne IF-Bedingung in der gleich 10 hintereinander abgeglichen werden (!is_int($var1) || !is_int($var2) ...) ist die Bedingung im A... . Gibts ne Lösung ohne tausend IF´s untereinander zu schreiben? Oder überhaupt, wieso funktioniert das nicht? Diese Funktion sollte doch eigentlich true oder false zurückgeben, das sollte dann doch nicht das Problem sein die nacheinander zu prüfen :confused: is_numeric funktionier _so_ auch nicht Also ist das denk ich mal nen generelles Problem bei Funktionen?! Aber das merkwürdige ist das es funktioniert wenn nur eine Bedingung existiert. Danke! Gruß, X-Eon
3. November 200519 j Könntest du vielleicht mal etwas Code zeigen, wo das Problem auftritt. Ich kann aus den bis jetzt geschriebenen Angaben noch nicht so viel herleiten.
3. November 200519 j Klar. ... IF (!is_int($var1) || !is_int($var2) || !is_int($var3)) { echo "Keine gültige Eingabe."; exit; } ... [/PHP] Hab das nen bischen abgekürzt. In meinem Script sinds etwa 20 Variablen die geprüft werden.
3. November 200519 j Na mir ging es mehr darum wo die User die falschen Eingaben machen können und wo du sie dann in die Datenbank einträgst. Ich denke da liegt eher das Problem. Mit is_numeric() kann man mehrere hintereinander schalten ohne, dass es Probleme gibt. Habe es eben mal getestet. if(!is_numeric($var1) || !is_numeric($var2) || !is_numeric($var3)){ echo "Fehler"; } else{ echo "Erfolg"; } [/PHP]
3. November 200519 j Das erlaubt aber auch Kommazahlen. Und die User geben was in nen Formular ein, dieses wird geprüft nen bischen gerechnet und dann in die DB eingetragen. Eigentlich nix großes Habs auch schon mit preg_match versucht, aber das Filtert keine Buchstaben. Hatte als Bereich 0-9 angegeben, dennoch nimmt der die Eingabe 'a' an.
3. November 200519 j mach doch einfach deine ganzen felder in ein Array und schleif dass dann durch: <input type="text" name="var[1]" /> <input type="text" name="var[2]" /> u. $errors = array(); foreach ( $_POST['var'] as $var) { if ( !is_int( $var)) { $errors[] = $var; } } if (empty($errors)) { echo "alles ok"; } else { echo "fehler in"; foreach( $errors as $error) { echo $error; } } [/PHP]
4. November 200519 j wäre auch gut wenn du mal beschreiben würdest was genau die user da für werte eingeben bzw. für das die werte gedacht sind, oder besser: was für eine anwendung ist das ganzen denn? dann könnte man dir besser weiterhelfen oder evtl sogar bessere und sicherere lösungsansätze bieten viele grüße
4. November 200519 j Das ganze ist nen einfaches Formular indem der User seine Einheiten eintragen kann (nur die, die er wirklich besitzt). Diese werden dann abgezogen und in eine andere Tabelle geschrieben (natürlich nach Prüfung der eingabe und einigen Rechnungen). Später werden die dann umgerechnet und ggf. wieder zurück in die User-Tabelle geschrieben ... Willst du den genauen Code sehen? Den hab ich grad nicht hier, könnte ich heut Abend aber noch posten. Und das Problem ist das die User z.B. 'a' oder '1.2' eingeben. Was zum Abzug aller Einheiten führt (da a irgendwie verdammt groß ist) oder Krumme Werte in der Datenbank erzeugt (123.4983 etc.). Es sollen aber lediglich Dezimale Ganzzahlen drin stehen, da andere Werte zu Rundungsfehlern führen oder sich mit diesen garnicht mehr Rechnen lässt. Natürlich sollen Negative Zahlen genausowenig erlaubt sein, aber das habe ich momentan mit einer anderen Prüfung abgefangen. Genauso wie das Eingeben von '#' oder '//'. Gruß, X-Eon
4. November 200519 j ok, das verstehe ich. damit ist aber auch klar, dass die lösung von kills die richtige ist, weil sie nur integer werte zulässt
4. November 200519 j Okay, gut - Danke! Werd das heute Abend gleich mal ausprobieren. Schreibe dann noch obs so funktioniert hat. Gruß, X-Eon
4. November 200519 j Kleiner exkurs: falls is_int oder is_numeric mal wieder rumspacken (schon öfters gehabt): function isNumeric($num) { return preg_match("/[0-9]+/",$num); } [/PHP] ^^ mfg Eth
4. November 200519 j Hi, falls is_int oder is_numeric mal wieder rumspacken (schon öfters gehabt): function isNumeric($num) { return preg_match("/[0-9]+/",$num); } [/PHP] Naja, mit rumspacken hat das nichts zu tun. 4a4 ist eben auch eine Zahl, eben nur als HEX geschrieben. oder 10.01e2 ist 1001... Wenn du also nur Zahlen haben möchtest, dann bist du mit dem o.g. preg_match am besten bedient.. Gruß, Markus
7. November 200519 j Mhm habe da am Wochenende noch ne ganze Weile dran rumgebastelt. Mit dieser Funktion hat das nicht geklappt. Allerdings funktioniert es, wenn man beim Suchmuster ein ^ vor die eckige Klammer setzt und ein $/ hinten dran. Kann mir einer sagen wofür diese Zeichen stehen? Im PHP Manual steht nichts weiter darüber wie das Suchmuster aussehen darf/muss. ThX und Schönen Montag Gruß, X-Eon
7. November 200519 j das ^ am Anfang steht für "Anfang" bzw. fängt an mit das $ am Ende stehf für "Ende" bzw. hört auf mit mfg Eth
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.