Avatar billede morteeart Nybegynder
15. august 2004 - 20:23 Der er 16 kommentarer og
2 løsninger

input validere i php eller js

Hey.

Jeg er ved at kode en webshop http://thedeathart.dk/WebShop/

men hvis man indtaster extremt store antal eller bruge bostaver som antal, som laver systemet fejl.

Er er nogen måde med enten php eller javascript (helst uden js) at jeg kan undgå dette ?
Avatar billede roenving Novice
15. august 2004 - 20:33 #1
Du skal da bare checke, at de indtastede værdier er gode nok, og du kan med fordel lave et første check før der submittes med javascript ...
Avatar billede morteeart Nybegynder
15. august 2004 - 20:38 #2
findes der en funktion i js som kan se forskel på tal (int) og bogstaver (char) ?
jeg tænker på denne her: http://www.dynamicdrive.com/dynamicindex16/limitinput.htm
til at sætte en max antal. Medmindre man kan gøre noget smartere/bedre.
Avatar billede morteeart Nybegynder
15. august 2004 - 21:42 #3
is_numeric() kan i hvertfald bruges til at undgå bogstaver.
Avatar billede dennismp Nybegynder
15. august 2004 - 22:11 #4
is_numeric vil også acceptere tal som: 1.8e308

Dette er et tal der er alt for stor til alm. integers i php, så brug: ctype_digit() til at teste om en variable er et heltal.

ctype_digit vil ikke acceptere tal som; 1,4 eller 1.4

Generelt bør man teste input man modtager. Man ved aldrig hvad folk har gjort ved det.
Avatar billede coderdk Praktikant
15. august 2004 - 22:35 #5
Du *skal* lave det serverside, altså med php. Hvis du så er flittig og gør det ordentligt, så laver du det også clientside, i javascript :)
Jeg ved folk godt kan finde på, ikke at bruge DIN form til at submitte fra ;)
Avatar billede morteeart Nybegynder
15. august 2004 - 23:09 #6
bruger is_int til at check for tal. Da det kun er heltal jeg arbejder med
og bruger maxlenght til min input for at begrænse det til 2 tal.

Og tak for reminderen coderdk at check om form navn er rigtigt er også en god ting.
Men hvis der er nogen som følger sig værdi til at få points må de da sige til.
Avatar billede dennismp Nybegynder
15. august 2004 - 23:15 #7
Tal der kommer fra en form, url ($_GET/$_POST osv) er altid strings. Så is_int vil ikke kunne bruges. Den vil kigge på typen af variablen og sige at det er ikke er en int. Derfor er is_numeric bedre (dette står også på is_int manual-siden) - og min favorit, ctype_digit.
Avatar billede morteeart Nybegynder
15. august 2004 - 23:18 #8
demmismp:

dette her input: <input type="int" maxLength="2" value="1" name="antal" style="width: 20px; text-align: right;">

giver mig ellers resultater i int format, ellers så ville siden jo melde fejl .
Avatar billede morteeart Nybegynder
15. august 2004 - 23:19 #9
og funktionen som validere det:

if ( is_int($_POST['antal']) ) {
header("Location: index.php?side=produkter.php&error=$_POST[antal]");
die();
}
Avatar billede dennismp Nybegynder
15. august 2004 - 23:22 #10
Er det ikke lidt omvendt?

Hvis $_POST['antal'] ER et heltal, så lave en error redirect? :-)

Da den altid vil være en string, så vil du aldrig komme ind i din if-sætning.
Avatar billede roenving Novice
15. august 2004 - 23:25 #11
Hvor har du fundet input type=int ?-)

Default for et input er text, så hvis browseren ikke kender type-attributten vil det være typen ...

http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT
Avatar billede morteeart Nybegynder
15. august 2004 - 23:26 #12
lol, wierd..

nu undre jeg mig enig over hvorfor det virker :s

måske er det denne her som gør det. Hvor bogstaver så er under eller = 0.

if ( $_POST['antal'] <= 0 ) {
header("Location: index.php?side=produkter.php&error=$_POST[antal]");
die();
}
Avatar billede dennismp Nybegynder
15. august 2004 - 23:28 #13
php konvertere imellem typer efter behov..

"a" vil blive lavet om til 0 hvis php laver det om til en int..
Avatar billede morteeart Nybegynder
15. august 2004 - 23:28 #14
roenving jeg undre mig også helt vildt nu..

fatter nada.. Det burde i teorien slet ikke virke.
Avatar billede morteeart Nybegynder
15. august 2004 - 23:32 #15
okay, type="int" findes ikke, og det er åbenbart
if ( $_POST['antal'] <= 0 ) {
header("Location: index.php?side=produkter.php&error=$_POST[antal]");
die();
}
som gør at det virker. Og så kan man åbenbart konkludere at bogstaver = 0;

:-)
Avatar billede morteeart Nybegynder
15. august 2004 - 23:43 #16
men vil i have points, eller må jeg godt lukke mens jeg husker det ?
Avatar billede dennismp Nybegynder
15. august 2004 - 23:52 #17
Det er op til dig - kommer jo an på om du har fået noget ud af det.
Avatar billede morteeart Nybegynder
15. august 2004 - 23:55 #18
jo, jeg synes ihvertfaldt at dennismp skulle have nogle. Pga. foreslået funktioner.

Men så lukker jeg, og siger mange tak for de forslag der er kommet op :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester