Ik heb een inlogscript.

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?
dat heb ik al

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?

if (!preg_match("/^[a-zA-Z0-9]+$/", $_POST['naam'])) {
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.
@Karl; Wat is het dan? Als ik het probeer met bijvoorbeeld dit:
<?php
if (!preg_match("/^[0-9]{0,50}$/", $_POST['iets']) {
echo 'Ongeldig';
}
?>

Hiermee kan ik bijvoorbeeld geen -500 gebruiken, dan krijg ik een error.
Zie die van Aar. En weet je wel wat je doet?
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:
<?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) */
?>

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.)
Ik zou het gewoon zo doen in je register,


<?
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,


<?
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
/[a-zA-Z0-9]{4,15}/i

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.

Reageren