X-Eon Geschrieben 3. November 2005 Teilen Geschrieben 3. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 3. November 2005 Teilen Geschrieben 3. November 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X-Eon Geschrieben 3. November 2005 Autor Teilen Geschrieben 3. November 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 3. November 2005 Teilen Geschrieben 3. November 2005 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X-Eon Geschrieben 3. November 2005 Autor Teilen Geschrieben 3. November 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. November 2005 Teilen Geschrieben 3. November 2005 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 4. November 2005 Teilen Geschrieben 4. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X-Eon Geschrieben 4. November 2005 Autor Teilen Geschrieben 4. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 4. November 2005 Teilen Geschrieben 4. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X-Eon Geschrieben 4. November 2005 Autor Teilen Geschrieben 4. November 2005 Okay, gut - Danke! Werd das heute Abend gleich mal ausprobieren. Schreibe dann noch obs so funktioniert hat. Gruß, X-Eon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etherius Geschrieben 4. November 2005 Teilen Geschrieben 4. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 4. November 2005 Teilen Geschrieben 4. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X-Eon Geschrieben 7. November 2005 Autor Teilen Geschrieben 7. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etherius Geschrieben 7. November 2005 Teilen Geschrieben 7. November 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.