Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP]is_int mit Macken?

Empfohlene Antworten

Veröffentlicht

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

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.

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]

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.

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]

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

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

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

Okay, gut - Danke!

Werd das heute Abend gleich mal ausprobieren.

Schreibe dann noch obs so funktioniert hat.

Gruß,

X-Eon

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

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.