Avatar billede kapsel Nybegynder
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.
Avatar billede interkriller Nybegynder
04. januar 2004 - 01:48 #1
$_GET['name']
$_GET['phonenumber']

læg mærke til '
Avatar billede kapsel Nybegynder
04. januar 2004 - 01:49 #2
Prøv at læs mit spørgsmål?
Avatar billede nak-m Nybegynder
04. januar 2004 - 01:51 #3
Altså $_GET[name] og $_GET[phonenumber] skal kun smides i databasen, hvis de opfylder betingelserne?
Avatar billede kapsel Nybegynder
04. januar 2004 - 01:51 #4
Præcist.
Avatar billede interkriller Nybegynder
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
Avatar billede kapsel Nybegynder
04. januar 2004 - 01:52 #6
interkriller, kig "emne", og "bla bla må kun indeholde"
Avatar billede interkriller Nybegynder
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..
Avatar billede roenving Novice
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
}
Avatar billede kapsel Nybegynder
04. januar 2004 - 01:56 #9
Jeg er ret sikker på jeg skal bruge 'ereg' - kig evt. http://dk2.php.net/function.ereg
Avatar billede kapsel Nybegynder
04. januar 2004 - 01:59 #10
roenving, Fatal error: Call to undefined function: match() in numbersadd.php on line 7
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:01 #11
match() er vist også javascript syntax, bare smid dem ind i ereg()
Avatar billede roenving Novice
04. januar 2004 - 02:02 #12
if(preg_match($regName,$_GET[name])&&preg_match($regPhone,$_GET[phonenumber])){
Avatar billede kapsel Nybegynder
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
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:08 #14
hvis du bruger preg()

$regName = "/^\w$/";
$regPhone = "/^\d{8}$/";
Avatar billede nak-m Nybegynder
04. januar 2004 - 02:12 #15
if(eregi("^[a-z1-9]+$", $_GET['name']) && eregi("^[1-9]{8}$", $_GET['phonenumber']))
{ echo "ja"; } else { echo "nej"; }
Avatar billede nak-m Nybegynder
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]')");
}
Avatar billede roenving Novice
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 !-)
Avatar billede roenving Novice
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 !-)
Avatar billede nak-m Nybegynder
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]')");
}
Avatar billede detox Nybegynder
04. januar 2004 - 02:19 #20
Men spørgsmålet er om der må være mellemrum i navnet?
Avatar billede olebole Juniormester
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>
Avatar billede roenving Novice
04. januar 2004 - 02:21 #22
Hvad giver \d mere en cifre ?-)
Avatar billede detox Nybegynder
04. januar 2004 - 02:21 #23
I øvrigt tillader \w osse "æøå" (i hvert fald på min maskine).
Avatar billede olebole Juniormester
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)
Avatar billede roenving Novice
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 !-)
Avatar billede nak-m Nybegynder
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]')");
}
Avatar billede roenving Novice
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 !-)
Avatar billede roenving Novice
04. januar 2004 - 02:31 #28
- i \d sæ'fø'li'
Avatar billede nak-m Nybegynder
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 :)
Avatar billede detox Nybegynder
04. januar 2004 - 02:32 #30
nak-m -> Så mangler du bare de store bogstaver A-Z ;o)
Avatar billede detox Nybegynder
04. januar 2004 - 02:33 #31
Nå, der var de :o)
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:34 #32
når vi nu er ved det

/^[a-z0-9]+$/i

matcher både store og små bogstaver
Avatar billede nak-m Nybegynder
04. januar 2004 - 02:39 #33
squashguy:
kan man med fordel skrive "i" i stedet for "A-Z" ? er der nogen egentlig forskel?
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:42 #34
Det giver et mindre søge pattern. Om det afvikles hurtigere, ved jeg ikke lige.
Avatar billede nak-m Nybegynder
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]')");
}
Avatar billede roenving Novice
04. januar 2004 - 02:52 #36
-- må jeg lige høre, om i får nogen forskel på \d og [0-9] i php ?-)
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:52 #37
har prøvet- giver det samme.
Avatar billede roenving Novice
04. januar 2004 - 02:54 #38
også med ., og andre lovlige nummer-tegn ?-)
Avatar billede squashguy Nybegynder
04. januar 2004 - 02:55 #39
afviser -., med  \d
Avatar billede detox Nybegynder
04. januar 2004 - 02:55 #40
Jeg kan ikke registrere nogen forskel.
Avatar billede olebole Juniormester
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
Avatar billede roenving Novice
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 // !-)
Avatar billede olebole Juniormester
04. januar 2004 - 03:15 #43
se'fø'li ... jeg æder mine ord *gulp*  :)
Avatar billede olebole Juniormester
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è?
Avatar billede olebole Juniormester
04. januar 2004 - 03:20 #45
Ehhhh .... det er vist en acute og ikke en grave ... Desireé  :)
Avatar billede roenving Novice
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*
Avatar billede nak-m Nybegynder
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.
Avatar billede roenving Novice
04. januar 2004 - 03:22 #48
Og måske foretrækker brugeren at skrive sit navn som: Clausen, Ole *g*
Avatar billede nak-m Nybegynder
04. januar 2004 - 03:26 #49
Og hvad hvis brugeren vil skrive det sådan: Ursüla_§!"#¤%&/(?^_Ivérsøn
Avatar billede roenving Novice
04. januar 2004 - 03:28 #50
-- ah, der må vel være grænser, og de går vel cirka ved ovenstående !-)
Avatar billede roenving Novice
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 ,-\
Avatar billede olebole Juniormester
04. januar 2004 - 03:36 #52
Nej, det er zq første gang i år, jeg har fået den bagfra .... *SVIN* ...!!!  :D
Avatar billede olebole Juniormester
04. januar 2004 - 03:37 #53
roenving >> psssst ......... hvem kymrer sig om browsere? Vi taler PHP ...... du ved - på serveren  ;o)
Avatar billede roenving Novice
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 ?-)
Avatar billede nak-m Nybegynder
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]')");
}
Avatar billede roenving Novice
04. januar 2004 - 03:51 #56
Vel

if(preg_match("/^[ \w]+$/", $_GET['name']) && preg_match("/^\d{8}$/", $_GET['phonenumber'])) {
Avatar billede nak-m Nybegynder
04. januar 2004 - 03:52 #57
så lad gå ;)
Avatar billede squashguy Nybegynder
04. januar 2004 - 03:55 #58
klokken er næsten 4 om natten, og min mailbox bliver spammed på det groveste =)
Avatar billede olebole Juniormester
04. januar 2004 - 04:03 #59
roenving >> Nej OS'et burde ikke betyde noget. Kun PHP's implementering af RegExp
Avatar billede kapsel Nybegynder
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.
Avatar billede 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
Avatar billede repsac Nybegynder
05. januar 2004 - 01:37 #62
well, strlen() og is_integer() på $_GET['phonenumber'] er nok hurtigere end noget andet.
Avatar billede detox Nybegynder
05. januar 2004 - 01:41 #63
Så er vi vidst nede i marginalerne ;o)
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

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