Inlogscript probleem
maar om de een of andere onbekende reden heeft hij problemen met accountnamen met rare tekens zoals é ä ò e.d.
Deze wilt hij niet uitlezen
Enig idee hoe ik dat moet veranderen?
Wat bedoel je trouwens met uitlezen? Echt weergeven of in een vergelijking gebruiken?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if (!preg_match("/^[a-zA-Z0-9\-]+$/", $_POST['naam'])) {
echo 'Je naam mag alleen a-z, A-Z en 0-9 bevatten!';
}
?>
if (!preg_match("/^[a-zA-Z0-9\-]+$/", $_POST['naam'])) {
echo 'Je naam mag alleen a-z, A-Z en 0-9 bevatten!';
}
?>
Verder word het in deze query gebruikt waar hij dus niet op verder gaat
SELECT * FROM user_users WHERE naam = '" . $naam . "'
En hoe wordt $naam tot stand gebracht?
Die komt van <input type='text' name='naam' />
stefan lenders schreef op 17.05.2009 21:27:
$naam = $_post['naam'];
Die komt van <input type='text' name='naam' />
Die komt van <input type='text' name='naam' />
Dat mag je dan wel even beveiligen.
Roel schreef op 17.05.2009 19:24:
Die moet je sowieso niet accepteren. Ik weet niet of het met dit script werkt, maar je kan het proberen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if (!preg_match("/^[a-zA-Z0-9\-]+$/", $_POST['naam'])) {
echo 'Je naam mag alleen a-z, A-Z en 0-9 bevatten!';
}
?>
if (!preg_match("/^[a-zA-Z0-9\-]+$/", $_POST['naam'])) {
echo 'Je naam mag alleen a-z, A-Z en 0-9 bevatten!';
}
?>
Je regex klopt niet, want jij laat ook - toe.
Ja ok, maar ik snap hier niet veel van en het moet makkelijk gefixt worden. we hebben namelijk een db met over de 3000 bezoekers. en ik ben niet van plan om die allemaal er uit te gooien
Ànders moet je de query effe taggen.. "" dus.
SELECT * FROM user_users WHERE naam = '" . $naam . "'
stefan lenders schreef op 18.05.2009 13:32:
Ja ok, maar ik snap hier niet veel van en het moet makkelijk gefixt worden. we hebben namelijk een db met over de 3000 bezoekers. en ik ben niet van plan om die allemaal er uit te gooien
Tja, dat had je eerst moeten bedenken...
Want nu kun je wel lekker de namen van gebruikers gaan veranderen die zo'n rare naam heeft, maar dan kunnen ze d'r nog niet in.
Ja maar wat moet ik doen dan wat ik snap er nog niets van?
@Karl; Moet A-Z AZ zijn?
Roel schreef op 19.05.2009 22:32:
@Karl; Moet A-Z AZ zijn?
Nee, je escape't de - want je hebt \- d'r in staan.
Hiermee kan ik bijvoorbeeld geen -500 gebruiken, dan krijg ik een error.
De string moet beginnen met, matcht elk character in de range 0-9, probeert vorige nul tot vijftig keer te matchen (greedy: probeert zoveel mogelijk characters te match), moet eindige met vorige.
Laten we dat eens gaan testen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$regex = "/^[0-9]{0,50}$/";
$zoek1 = "abc";
$zoek2 = "000000";
$zoek3 = "";
$zoek4 = null;
$zoek5 = str_repeat(0, 50); // Ik ga geen vijftig tekens tikken.
$zoek6 = str_repeat(0, 51);
$match1 = preg_match($regex, $zoek1);
$match2 = preg_match($regex, $zoek2);
$match3 = preg_match($regex, $zoek3);
$match4 = preg_match($regex, $zoek4);
$match5 = preg_match($regex, $zoek5);
$match6 = preg_match($regex, $zoek6);
var_dump($regex, $zoek1, $zoek2, $zoek3, $zoek4, $match1, $match2, $match3, $match4, $match5, $match6);
/* Ja, het kan vast en zeker makkelijker. Maar daar heb ik geen zin in.
Het levert:
string(15) "/^[0-9]{0,50}$/"
string(3) "abc"
string(6) "000000"
string(0) ""
NULL
int(0)
int(1)
int(1)
int(1)
int(1)
int(0) */
?>
$regex = "/^[0-9]{0,50}$/";
$zoek1 = "abc";
$zoek2 = "000000";
$zoek3 = "";
$zoek4 = null;
$zoek5 = str_repeat(0, 50); // Ik ga geen vijftig tekens tikken.
$zoek6 = str_repeat(0, 51);
$match1 = preg_match($regex, $zoek1);
$match2 = preg_match($regex, $zoek2);
$match3 = preg_match($regex, $zoek3);
$match4 = preg_match($regex, $zoek4);
$match5 = preg_match($regex, $zoek5);
$match6 = preg_match($regex, $zoek6);
var_dump($regex, $zoek1, $zoek2, $zoek3, $zoek4, $match1, $match2, $match3, $match4, $match5, $match6);
/* Ja, het kan vast en zeker makkelijker. Maar daar heb ik geen zin in.
Het levert:
string(15) "/^[0-9]{0,50}$/"
string(3) "abc"
string(6) "000000"
string(0) ""
NULL
int(0)
int(1)
int(1)
int(1)
int(1)
int(0) */
?>
Ik denk niet dat dit de regex is die je wilt. En als je die min wilt hebben, dan zou je die zoals je hierboven deed moeten escape'en (je weet toch wat escape'en is?). (Je mist overigs ook een haakje ) bij je if.)
Code (php)
1
2
3
2
3
<?
if(preg_match('/^[a-zA-Z_\-]+$/', $naam) == 0) { print "De opgegeven gebruikersnaam is ongeldig, je mag enkel letters gebruiken.\n"; exit; }
?>
if(preg_match('/^[a-zA-Z_\-]+$/', $naam) == 0) { print "De opgegeven gebruikersnaam is ongeldig, je mag enkel letters gebruiken.\n"; exit; }
?>
Mvg,
Tim Kampherbeek
Tim Kampherbeek schreef op 26.05.2009 04:32:
Ik zou het gewoon zo doen in je register,
Mvg,
Tim Kampherbeek
Code (php)
1
2
3
2
3
<?
if(preg_match('/^[a-zA-Z_\-]+$/', $naam) == 0) { print "De opgegeven gebruikersnaam is ongeldig, je mag enkel letters gebruiken.\n"; exit; }
?>
if(preg_match('/^[a-zA-Z_\-]+$/', $naam) == 0) { print "De opgegeven gebruikersnaam is ongeldig, je mag enkel letters gebruiken.\n"; exit; }
?>
Mvg,
Tim Kampherbeek
Jij mag ookal streepjes in je naam stoppen :-O
die regex laat alleen nummers en letters toe, voor letters case-insensitive, dus HOOFDLETTERS en kleine letters.
Verder moet het minimaal 4 tekens lang zijn en maximaal 15.
Als jullie nouw gewoon een keertje met dit ding testen, dan zien jullie dat die van jullie niet klopt.