Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

habe mal wieder nen Problem :rolleyes:

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 :o

(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... .

:rolleyes: 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

Geschrieben

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.

Geschrieben

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]

Geschrieben

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.

Geschrieben

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]

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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 :P

Gruß,

X-Eon

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...