Gebruikersnaam valideren
Ik heb een scriptje gemaakt voor een deense website van mij waar de gebruiker een gebruikersnaam invullen in een database.
Deze gebruikersnaam mag geen spaties bevatten, hoe kan ik dit controleren?
Mijn script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
include("footer.php");
?>
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
include("footer.php");
?>
Met welke functie kan ik dus het veld 'gebruikersnaam' controleren of er spaties in voor komen of niet ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$name = 'mijn naam';
if (preg_match('/[ ]/', $name)) {
echo 'fout';
}
else {
echo 'ok';
}
?>
$name = 'mijn naam';
if (preg_match('/[ ]/', $name)) {
echo 'fout';
}
else {
echo 'ok';
}
?>
De SELECT-query kun je trouwens weggooien, daar heb je helemaal niets aan, het is niet 100% te vertrouwen. 2 personen die vrijwel gelijktijdig het script aanroepen, kunnen 2x dezelfde naam in de database wegschrijven. Op het moment van controleren bestaat de naam nog niet, dus wordt de INSERT uitgevoerd. Dat er intussen een andere INSERT is uitgevoerd, daar weet jouw script helemaal niets van af...
Maak de kolom 'brugernavn' UNIQUE en jouw database zorgt er voor dat er onmogelijk een dubbele naam ingezet kan worden. De query zal namelijk keurig mislukken wanneer je dat toch probeert. Met mysql_errno() kun je de juiste foutcode opvragen, 1062, en op basis daarvan kun je de melding geven dat een gebruikersnaam al bestaat.
Zo veel verstand heb ik nou ook weeer niet van PHP. Ik heb zoiets van als het maar werkt. Dat met die dubbele naam in de database maakt me niet zoveel uit, het is wel heel toevallig dat er 2 dezelfde namen in één keer in kunnen komen. Die kans is 1 op 10.000.
En wanneer het je niet uitmaakt, waarom voer je dan uberhaubt die controle uit? Dan slaat dit nergens op. Maak duidelijke keuzes in je scripts, dat maakt het een stuk eenvoudiger.
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
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
if (preg_match('/[ ]/', $gebruikersnaam)) {
echo 'fout';
exit();
}
else{
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
}
include("footer.php");
?>
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
if (preg_match('/[ ]/', $gebruikersnaam)) {
echo 'fout';
exit();
}
else{
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
}
include("footer.php");
?>
Frank schreef op 30.12.2006 18:31:
Tja, je moet het natuurlijk zelf weten. Alleen is jouw methode langzamer (2 queries nodig) en nog eens onbetrouwbaar. Waarom moeilijk doen als het makkelijk kan?
En wanneer het je niet uitmaakt, waarom voer je dan uberhaubt die controle uit? Dan slaat dit nergens op. Maak duidelijke keuzes in je scripts, dat maakt het een stuk eenvoudiger.
En wanneer het je niet uitmaakt, waarom voer je dan uberhaubt die controle uit? Dan slaat dit nergens op. Maak duidelijke keuzes in je scripts, dat maakt het een stuk eenvoudiger.
Omdat ik toch wel wil hebben dat er gecheckt wordt of die er al in zit.
Ik heb geen verstand van die methode die jij uitlegt, ik zal er eens extra naar kijken.
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
30
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
30
<?php
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
if (preg_match('/[ ]/', $gebruikersnaam)) {
echo 'fout';
include("footer.php");
exit();
}
else{
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
}
include("footer.php");
?>
include("setup.php");
include("header.php");
include ('../scripts/admin/config.php');
$gebruikersnaam = $_POST['T2'];
$gebruikersnaam2 = $_POST['T1'];
if (preg_match('/[ ]/', $gebruikersnaam)) {
echo 'fout';
include("footer.php");
exit();
}
else{
$select = mysql_query("SELECT * FROM betaltetilmeldinger_hjertebanken WHERE brugernavn='".$gebruikersnaam."'");
$array = mysql_fetch_array($select);
if(empty($array))
{
$result = mysql_query("INSERT INTO betaltetilmeldinger_hjertebanken (brugernavn, brugernavnhjertebanken, antalpoint, godkendt) VALUES ('".$gebruikersnaam."', '".$gebruikersnaam2."', '500', 'nej')") or die(mysql_error());
echo "<br><br><br><br><center> Uw aanmelding is nu verzonden en moet manueel gecontroleerd worden, daarvoor kan het enige tijd duren voordat u uw punten ontvangt.";
}
else{
echo ('<br><br><br><br><center> Du har allerede sendt dit brugernavn for Hjertebanken. Det er ikke muligt få 2 gange point for din tilmelding på Hjertebanken.<br><a href=pts.php>Klik her for at komme tilbage</a></center>');
}
}
include("footer.php");
?>
Dit scriptje werkt, bedankt voor julllie hulp.
Bedankt Frank :D