04. januar 2004 - 01:43
Der er
62 kommentarer og 1 løsning
Validering af to værdier
Hej Jeg har følgende: $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); $_GET[name] må kun indeholde a-z,A-Z,0-9 $_GET[phonenumber] må max være 8 chars lang, og bestå af 0-9 Burde være meget simpel, jeg fatter det bare ikke.. Mange tak.
Annonceindlæg fra Infor
04. januar 2004 - 01:48
#1
$_GET['name'] $_GET['phonenumber'] læg mærke til '
04. januar 2004 - 01:49
#2
Prøv at læs mit spørgsmål?
04. januar 2004 - 01:51
#3
Altså $_GET[name] og $_GET[phonenumber] skal kun smides i databasen, hvis de opfylder betingelserne?
04. januar 2004 - 01:51
#4
Præcist.
04. januar 2004 - 01:52
#5
Har læst det men åbentbart ikke forstået det... jeg går ud fra din query ikke indsætter værdierne i DB. tænkte at det kunne hjælpe dig....men åbentbart ikke
04. januar 2004 - 01:52
#6
interkriller, kig "emne", og "bla bla må kun indeholde"
04. januar 2004 - 01:54
#7
gik ud fra det var din beskrivelse af værdierne i DB.... jeg trækker følehornene til mig..
04. januar 2004 - 01:54
#8
Kan ikke lige huske php-syntaksen for RegExps, men noget i stil med $regName = "^\w$"; $regPhone = "^\d{8}$"; if($_GET[name].match($regName)&&$_GET[phonenumber].match($regPhone)){ //din indsætningsblok }
04. januar 2004 - 01:59
#10
roenving, Fatal error: Call to undefined function: match() in numbersadd.php on line 7
04. januar 2004 - 02:01
#11
match() er vist også javascript syntax, bare smid dem ind i ereg()
04. januar 2004 - 02:02
#12
if(preg_match($regName,$_GET[name])&&preg_match($regPhone,$_GET[phonenumber])){
04. januar 2004 - 02:03
#13
$regName = "^\w$"; $regPhone = "^\d{8}$"; if(preg_match($regName,$_GET[name])&&preg_match($regPhone,$_GET[phonenumber])){ $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); } Giver: Warning: No ending delimiter '^' found in numbersadd.php on line 7
04. januar 2004 - 02:08
#14
hvis du bruger preg() $regName = "/^\w$/"; $regPhone = "/^\d{8}$/";
04. januar 2004 - 02:12
#15
if(eregi("^[a-z1-9]+$", $_GET['name']) && eregi("^[1-9]{8}$", $_GET['phonenumber'])) { echo "ja"; } else { echo "nej"; }
04. januar 2004 - 02:15
#16
if(eregi("^[a-z1-9]+$", $_GET['name']) && eregi("^[1-9]{8}$", $_GET['phonenumber'])){ $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); }
04. januar 2004 - 02:15
#17
-- og du mener vel alle cifre i begge tilfælde, nak-m ?-) -- til det findes der special-tegnet \d !-)
04. januar 2004 - 02:16
#18
-- og \w betyder alle bogstaver (de engelske a-z), både store og små samt cifrene og _ (underscore, som jo også tillades i stort set alle sammenhænge !-)
04. januar 2004 - 02:18
#19
roenving: din lurepels ;) forresten skulle det jo være 0-9 ikke 1-9: if(eregi("^[a-z0-9]+$", $_GET['name']) && eregi("^[0-9]{8}$", $_GET['phonenumber'])){ $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); }
04. januar 2004 - 02:19
#20
Men spørgsmålet er om der må være mellemrum i navnet?
04. januar 2004 - 02:19
#21
<ole> roenving >> \d giver en masse ud over 0-9, så det kan ikke bruges her :) nak-m >> Prøv med preg-funktionerne i stedet - de er som oftest langt hurtigere og mere effektive end ereg /mvh </bole>
04. januar 2004 - 02:21
#22
Hvad giver \d mere en cifre ?-)
04. januar 2004 - 02:21
#23
I øvrigt tillader \w osse "æøå" (i hvert fald på min maskine).
04. januar 2004 - 02:22
#24
\d matcher ethvert positivt eller negativt decimal-tal. Kan hurtigt gå hen og blive et pudsigt tlf-nummer ;o)
04. januar 2004 - 02:25
#25
-- gør den det i php ?-) -- det ville da være mystisk, for RegExp er tegnbaseret og fuldstændig uinteresseret i, hvad tegnene repræsenterer !-)
04. januar 2004 - 02:29
#26
denne bruger preg_match: if(preg_match("/^[a-z0-9]+$/", $_GET['name']) && preg_match("/^[0-9]{8}$/", $_GET['phonenumber'])) { $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); }
04. januar 2004 - 02:30
#27
-- og jeg kan se at Gecko matcher også de landespecifikke tegn med \w, men det gør IE ikke ... -- men den hopper ikke på punktummer og kommaer !-)
04. januar 2004 - 02:31
#28
- i \d sæ'fø'li'
04. januar 2004 - 02:32
#29
ups! : if(preg_match("/^[a-zA-Z0-9]+$/", $_GET['name']) && preg_match("/^[0-9]{8}$/", $_GET['phonenumber'])) { $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); } den var vidst case-sensitive :)
04. januar 2004 - 02:32
#30
nak-m -> Så mangler du bare de store bogstaver A-Z ;o)
04. januar 2004 - 02:33
#31
Nå, der var de :o)
04. januar 2004 - 02:34
#32
når vi nu er ved det /^[a-z0-9]+$/i matcher både store og små bogstaver
04. januar 2004 - 02:39
#33
squashguy: kan man med fordel skrive "i" i stedet for "A-Z" ? er der nogen egentlig forskel?
04. januar 2004 - 02:42
#34
Det giver et mindre søge pattern. Om det afvikles hurtigere, ved jeg ikke lige.
04. januar 2004 - 02:50
#35
Det er da i hvert fald taget til efterretning - og værsgo: if(preg_match("/^[a-z0-9]+$/i", $_GET['name']) && preg_match("/^[0-9]{8}$/", $_GET['phonenumber'])) { $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); }
04. januar 2004 - 02:52
#36
-- må jeg lige høre, om i får nogen forskel på \d og [0-9] i php ?-)
04. januar 2004 - 02:52
#37
har prøvet- giver det samme.
04. januar 2004 - 02:54
#38
også med ., og andre lovlige nummer-tegn ?-)
04. januar 2004 - 02:55
#39
afviser -., med \d
04. januar 2004 - 02:55
#40
Jeg kan ikke registrere nogen forskel.
04. januar 2004 - 02:59
#41
http://dk2.php.net/manual/en/pcre.pattern.syntax.php \d
any decimal digit
\D
any character that is not a decimal digit
\s
any whitespace character
\S
any character that is not a whitespace character
\w
any "word" character
\W
any "non-word" character
/mvh
04. januar 2004 - 03:00
#42
dvs. det er kortere at bruge \d (det kortere søgepattern !-), for jeg mener at RegExp internt er ret godt optimeret, hvis det er implementeret ordentligt, og det går jeg ud fra, at det er i php !o] -- altså: if(preg_match("/^[a-z\d]+$/i", $_GET['name'])&&preg_match("/^\d{8}$/", $_GET['phonenumber'])) { -- ergo det jeg skrev 01:54:34 bortset fra mit ukendskab til at php også bruger // !-)
04. januar 2004 - 03:15
#43
se'fø'li ... jeg æder mine ord *gulp* :)
04. januar 2004 - 03:18
#44
Men en hel anden ting er: Må man ikke hedde noget så ordinært som Hubert-Gilbert eller Karl Hulda? Skal man ikke tage hensyn til mellemrum og bindestreg - eller for den sags skyld accenter, som i Desireè?
04. januar 2004 - 03:20
#45
Ehhhh .... det er vist en acute og ikke en grave ... Desireé :)
04. januar 2004 - 03:21
#46
Tjah ... -- det var jo sådan set derfor jeg startede med \w, men uden at være opmærksom på, at den virker så forskelligt !-) -- og, ha, ole, der fik jeg ram på dig, det er vist første gang, du har fået den på den måde af mig *lol*
04. januar 2004 - 03:21
#47
olebole: Jo, hvis det er brugerens rigtige navn, og ikke et alias, burde det være muligt at skrive sit navn rigtigt.
04. januar 2004 - 03:22
#48
Og måske foretrækker brugeren at skrive sit navn som: Clausen, Ole *g*
04. januar 2004 - 03:26
#49
Og hvad hvis brugeren vil skrive det sådan: Ursüla_§!"#¤%&/(?^_Ivérsøn
04. januar 2004 - 03:28
#50
-- ah, der må vel være grænser, og de går vel cirka ved ovenstående !-)
04. januar 2004 - 03:34
#51
Så en rimelig RegExp er vel: /^[\w \,\.]+$/i, så burde den i en menneskelig browser svare det rigtige ... -- men ikke i IE ,-\
04. januar 2004 - 03:36
#52
Nej, det er zq første gang i år, jeg har fået den bagfra .... *SVIN* ...!!! :D
04. januar 2004 - 03:37
#53
roenving >> psssst ......... hvem kymrer sig om browsere? Vi taler PHP ...... du ved - på serveren ;o)
04. januar 2004 - 03:42
#54
Yes, men jeg ved jo ikke lige hvordan sådan en svarer ... -- og har det betydning, hvilket styresystem, som er bagved ?-)
04. januar 2004 - 03:49
#55
Jeg finder denne rimelig: if(preg_match("/^[ \w]+$/", $_GET['name']) && preg_match("/^[0-9]{8}$/", $_GET['phonenumber'])) { $q_phonebook = mysql_query("insert into userphonebook (userid,name,phonenumber) values ('$userid','$_GET[name]','$_GET[phonenumber]')"); }
04. januar 2004 - 03:51
#56
Vel if(preg_match("/^[ \w]+$/", $_GET['name']) && preg_match("/^\d{8}$/", $_GET['phonenumber'])) {
04. januar 2004 - 03:52
#57
så lad gå ;)
04. januar 2004 - 03:55
#58
klokken er næsten 4 om natten, og min mailbox bliver spammed på det groveste =)
04. januar 2004 - 04:03
#59
roenving >> Nej OS'et burde ikke betyde noget. Kun PHP's implementering af RegExp
04. januar 2004 - 20:45
#60
Hej, mange tak for de gode svar, jeg kigger på det i løbet af ugen, jeg har ikke til at rode mere med det idag - men læg nogle svar, så fyrer jeg lige nogle points efter jer, og lidt ekstra points oveni hatten! Jeg takker mange gange.
Slettet bruger
05. januar 2004 - 01:36
#61
Hvorvidt PHP tager et tegn som en word-character afhænger af locale-opsætningen. Hvis serveren kører med amerikansk locale, vil den nok ikke matche æøå med en \w
05. januar 2004 - 01:37
#62
well, strlen() og is_integer() på $_GET['phonenumber'] er nok hurtigere end noget andet.
05. januar 2004 - 01:41
#63
Så er vi vidst nede i marginalerne ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling