PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überprüfung ob Eingabe eine Zahl ist



Duke
25-05-2003, 00:56
Ich muss bei mehreren Skripten überprüfen, ob die Usereingabe eine Zahl ist, da es sonst Fehler gibt

Ich habs versucht mit gettype() und is_int() aber beide stempeln den Wert der per Formular gesendet wird als String ab obwohl er wirklich nur ne Zahl is, hat da jemand ne Lösung ??

phate
25-05-2003, 10:26
Hi Duke,

überprüf die Eingabe mit einer regular-expression.
if (preg_match("^[0-9]+$", $var_mit_eingabe))
{
//auszuführender Code wenn Eingabe ne Zahl ist
}
else
{
//Fehlerbehandlung wenn Eingabe keine Zahl ist (dies beinhaltet leere Variable)
}

gruss,

phate

Duke
25-05-2003, 11:08
Also so läuft das bis jetzt aber noch nit der mag den ^ nicht und das +$ auch nicht und ohne die beiden funktioniert es nicht
...


<?
if (preg_match("^[0-9]+$", $var))
{
echo "IS"; //auszuführender Code wenn Eingabe ne Zahl ist
}
else
{
echo "NEIN"; //Fehlerbehandlung wenn Eingabe keine Zahl ist (dies beinhaltet leere Variable)
}

?>

phate
25-05-2003, 11:49
Hi Duke,

bei mir funktioniert o.g. einwandfrei. Meine wahrlich nicht neuste PHP-Version ist 4..1.2 und insofern dir Dein PHP die Verwendung von preg_match nicht anmeckert, dann muss es bei Dir auch funktionieren, denn die Syntax von pcre (perl comatible regular expressions) ist fest definiert.

Nun noch kurz zu Deinem Verständnis ein paar erhellende Worte zu verwendeter regex.

preg_match prüft eine Variable gegen ein Prüfmuster bestehend aus Zeichen, Zeichenklassen und Metazeichen, eine sog. regular expression. Die in konkretem Fall verwendete Regex ist von links nach rechts zu lesen und setzt sich folgendermassen zusammen:

^ Markiert den Beginn der zu prüfenden Variable
[0-9] Beschreibt eine Zeichenklasse mit den Zahlen 0-9
+ Wirkt als Quantifier für die vorangehende Zeichenklasse und legt fest, dass diese ein- oder mehrmal vorkommen muss
$ Markiert das Ende der zu prüfenden Variable

Stell Dir das ganze wörtlich vor und lies es von links nach rechts. Die Variable beginnt, es folgt eine Zahl (bestehend aus mind. einer aber beliebig vielen Ziffern) und die Variable endet.

Lässt Du nun ^ und $ (die sog. Anker) fort, so würde der Ausdruck auch auf Variablen wie z.B. "abc123def" passen, da der Ausdruck nun an beliebiger Stelle in zu überprüfender Variable stehen kann. Entfernst Du nun noch das + bedeutet das, dass der Ausdruck auf eine Ziffer an beliebiger Stelle in zu überprüfender Variable passt und dass ist wahrlich nicht das, was Du erreichen willst.

Wenn Du das ganze etwas ausführlicher nachlesen willst, schau Dir mal http://www.tekromancer.com/perl/7.html an.

gruss,

phate

Duke
25-05-2003, 15:44
Also eigenltich sollte das zeug bei mir auch von nem php4 mod gemacht werden ich muss mal schauen welches modul ich genau habe


#
# AddType allows you to tweak mime.types without actually editing it, or to
# make certain files to be certain types.
#
# For example, the PHP 3.x module (not part of the Apache distribution - see
# http://www.php.net) will typically use:
#
# <IfModule mod_php3.c>
# AddType application/x-httpd-php .php .php3 .php4
# AddType application/x-httpd-php3-source .phps
# AddType application/x-httpd-php3 .phtml
#</IfModule>
#
# And for PHP 4.x, use:
#
<IfModule mod_php4.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4 .php3
AddType application/x-httpd-php-source .phps
</IfModule>

Duke
25-05-2003, 15:59
Sieht aus als hätte ich 4.0.4 drauf und eigenltich habe ich auch kein Bock das jetzt upzudaten

Gaert
25-05-2003, 17:10
Solltest du tun... egal ob du bock hast oder nicht... mit 4.04 lässt sich nicht mehr vernünftig entwickeln (von den Sicherheitslücken ganz zu schweigen).

Duke
25-05-2003, 17:11
Kann ich das alte modul mit nem neuen ohne probleme überschreiben sprich einfach nen neues rpm installieren ??

Gaert
25-05-2003, 17:21
Wenn die alte Version ne rpm war, dann sollte das IMHO funktionieren.

Duke
25-05-2003, 17:26
Sorry IMHO ??

phate
25-05-2003, 18:09
Hi Duke,

IMHO ^= In My Humble Opinion, also seiner bescheidenen Meinung nach. Seh ich übrigens auch so.

rpm -Uvh packname.rpm

War Deine jetzige Version per rpm installiert, dann wird Dir dieser Befehl in Verbindung mit dem entsprechenden neueren Paket, das ganze updaten.

gruss,

phate

Duke
25-05-2003, 19:11
So gehts übrigens :cool:


if (!preg_match('/^[0-9]*$/', $variable)) { $fehler.="Die Variable darf nur aus Zahlen bestehen.";}