Registratiescript problemen
Ik ben bezig met mijn website waarvoor ik een inlogsysteem maak en later ook een forum bij ga maken. Ik heb een tijdje niks met php en MySQL gedaan en daarom lukt niet alles precies meer.. Nu heb ik een probleem met dit 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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<div id="reg">
<?php
include('./functions.php');
if($_POST['username'] && $_POST['email'] && $_POST['password'] && $_POST['password2'] && $_POST['submit']) {
$sql_user = "
SELECT username
FROM users
WHERE username = '" . $_POST['username'] . "'";
$sql_email = "
SELECT email
FROM user
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'";
if(checkMail($_POST['email'])) { // als het email adres klopt, return true. WERKT
$mailG = true;
}
if(!$mailG) { // als email adres onjuist is, terug naar registatieformulier. WERKT
echo "Emailadres onjuist.";
header("Refresh: 3; url=./index.php?reg=1");
}
if($mailG) { // als email adres juist is.
if(mysql_num_rows(mysql_query($sql_user)) > 0) {
echo "Gebruiker " . $_POST['username'] . " bestaat al.";
header("Refresh: 3; url=./index.php?reg=1");
}
if(mysql_num_rows(mysql_query($sql_email))) {
echo "Er is al een gebruiker met het emailadres" . $_POST['email'] . ".";
header("Refresh: 3; url=./index.php?reg=1");
}
if(mysql_num_rows(mysql_query($sql_user)) == 0 && mysql_num_rows(mysql_query($sql_email)) == 0) { //dit hier onder laat hij altijd zien als alles ingevuld is en het emailadres correct is. wat is het probleem?
echo "hoik";
}
}
}
else if(isset($_POST['submit'])) { // als niet alles ingevuld is. WERKT ?>
Niet alles ingevuld.<br />
<a href='javascript: history.go(-1)'>Terug</a>
<?php }
else { // als er geen data om te registeren naar de pagina verzonden wordt. WERKT ?>
<form action="" method="post">
<table width="556" border="0">
<tr>
<td width="147">Gebruikersnaam:</td>
<td width="144"><input type="text" name="username" maxlength="12" /></td>
<td width="251">Max. 25 tekens lang.</td>
</tr>
<tr>
<td>Email:</td>
<td><input name="email" type="text" /></td>
<td>Geldig emailadress!</td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="password" /></td>
<td> </td>
</tr>
<tr>
<td>Wachtwoord (controle):</td>
<td><input type="password" name="password2" /></td>
<td>Herhaal wachwoord ter controle.</td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Registreer" style="width: 147px;" /></td>
<td><input type="reset" name="Reset" value="Reset" style="width: 140px;" /></td>
<td></td>
</tr>
</table>
</form>
<?php }
$reg = false;
?>
</div>
<?php
include('./functions.php');
if($_POST['username'] && $_POST['email'] && $_POST['password'] && $_POST['password2'] && $_POST['submit']) {
$sql_user = "
SELECT username
FROM users
WHERE username = '" . $_POST['username'] . "'";
$sql_email = "
SELECT email
FROM user
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'";
if(checkMail($_POST['email'])) { // als het email adres klopt, return true. WERKT
$mailG = true;
}
if(!$mailG) { // als email adres onjuist is, terug naar registatieformulier. WERKT
echo "Emailadres onjuist.";
header("Refresh: 3; url=./index.php?reg=1");
}
if($mailG) { // als email adres juist is.
if(mysql_num_rows(mysql_query($sql_user)) > 0) {
echo "Gebruiker " . $_POST['username'] . " bestaat al.";
header("Refresh: 3; url=./index.php?reg=1");
}
if(mysql_num_rows(mysql_query($sql_email))) {
echo "Er is al een gebruiker met het emailadres" . $_POST['email'] . ".";
header("Refresh: 3; url=./index.php?reg=1");
}
if(mysql_num_rows(mysql_query($sql_user)) == 0 && mysql_num_rows(mysql_query($sql_email)) == 0) { //dit hier onder laat hij altijd zien als alles ingevuld is en het emailadres correct is. wat is het probleem?
echo "hoik";
}
}
}
else if(isset($_POST['submit'])) { // als niet alles ingevuld is. WERKT ?>
Niet alles ingevuld.<br />
<a href='javascript: history.go(-1)'>Terug</a>
<?php }
else { // als er geen data om te registeren naar de pagina verzonden wordt. WERKT ?>
<form action="" method="post">
<table width="556" border="0">
<tr>
<td width="147">Gebruikersnaam:</td>
<td width="144"><input type="text" name="username" maxlength="12" /></td>
<td width="251">Max. 25 tekens lang.</td>
</tr>
<tr>
<td>Email:</td>
<td><input name="email" type="text" /></td>
<td>Geldig emailadress!</td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="password" /></td>
<td> </td>
</tr>
<tr>
<td>Wachtwoord (controle):</td>
<td><input type="password" name="password2" /></td>
<td>Herhaal wachwoord ter controle.</td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Registreer" style="width: 147px;" /></td>
<td><input type="reset" name="Reset" value="Reset" style="width: 140px;" /></td>
<td></td>
</tr>
</table>
</form>
<?php }
$reg = false;
?>
</div>
Als ik alles goed invul en het emailadres goed is, laat hij 'hoik' zien, ik gebruik een gebruikersnaam en emailadres die niet voorkomt in de database maar alsnog doet hij het niet. Ik snap het allemaal niet meer en daarom vraag ik maar om hulp:3
Groeten, Kees.
Gewijzigd op 31/08/2011 16:03:59 door Kees van Kempen
Gewijzigd op 31/08/2011 16:00:23 door Jasper DS
Gewijzigd op 31/08/2011 16:05:11 door Kees van Kempen
Ik zal eens even kijken, momentje. En opgelet -> je script is lek, sql injectie is mogelijk.
Code (php)
1
2
3
4
2
3
4
$sql_user = "
SELECT username
FROM users
WHERE username = '" . $_POST['username'] . "'";
SELECT username
FROM users
WHERE username = '" . $_POST['username'] . "'";
Ja, daar heb ik mysql_real_escape_string weggehaald om iets te testen. Nog ergens anders lek dan?
neen daar ja. En wow wat een logica, ik stel voor om even opnieuw te beginnen. Let ook op de foutafhandeling van je query's want deze ontbreekt nu.
Tot nu toe heb ik deze code:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
require('./functions.php'); //voor de checkMail functie.
require('./connect.php'); //voor de MySQL connectie.
if($_POST['username'] && $_POST['email'] && $_POST['password'] && $_POST['password2'] && $_POST['submit']) { //als hij alle gegevens krijgt om te registreren.
$username = mysql_real_escape_string($_POST['username']);
$usernameclean = mysql_real_escape_string(strtolower($_POST['username']));
$email = mysql_real_escape_string($_POST['email']);
//sql om username te controleren:
$sql_user = "
SELECT username, usernameclean
FROM users
WHERE username = '" . $username . "'
AND usernameclean = '" . $usernameclean . "'
";
//sql om email te controleren:
$sql_email = "
SELECT email
FROM users
WHERE email = '" . $email . "'
";
$query_user = mysql_query($sql_user);
$query_email = mysql_query($sql_email);
if(mysql_num_rows($query_user) > 0) {
echo 'Gebruikersnaam ' . $username . ' is al in gebruik.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
else {
$userG = true;
}
if(checkMail($email)) {
if(mysql_num_rows($query_email) > 0) {
echo 'Het emailadres ' . $email . ' is al in gebruik.';
header("Refresh: 3; url=./index.php?reg=1");
}
else {
$emailG = true;
}
}
else {
echo 'Het emailadres ' . $email . ' is ongeldig.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
if($_POST['password'] == $_POST['password2']) {
$passwordG = true;
}
else {
echo 'Wachtwoorden niet gelijk.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
if($userG == true && $emailG == true && $passwordG == true) {
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$password = mysql_real_escape_string(md5($_POST['password']));
$sql_reg = "
INSERT username, usernameclean, email, password_md5, ip
INTO users
VALUES '" . $username . "', '" . $usernameclean . "', '" . $email . "', '" . $password . "', '" . $ip . "',
";
$query_reg = mysql_query($sql_reg);
if($query_reg) {
echo 'Geregistreerd. Je wordt doorgestuurd naar de index.';
header("Refresh: 3; url=./index.php");
}
}
}
elseif(isset($_POST['submit'])) { //als hij niet alles krijgt, maar wel submit.
echo 'Niet alles ingevult.';
header("Refresh: 3; url=./index.php?reg=1");
}
else { //als hij niks krijgt, laat hij het registratieformulier zien. ?>
<form action="" method="post">
<table width="200" border="0">
<tr>
<td>Gebruikersnaam:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Wachtwoordcontrole:</td>
<td><input type="password" name="password2" /></td>
</tr>
<tr>
<td><input type="reset" value="Reset" style="width: 134px" /></td>
<td><input name="submit" type="submit" value="Registreer" style="width: 144px"></td>
</tr>
</table>
</form>
<?php
}
?>
require('./functions.php'); //voor de checkMail functie.
require('./connect.php'); //voor de MySQL connectie.
if($_POST['username'] && $_POST['email'] && $_POST['password'] && $_POST['password2'] && $_POST['submit']) { //als hij alle gegevens krijgt om te registreren.
$username = mysql_real_escape_string($_POST['username']);
$usernameclean = mysql_real_escape_string(strtolower($_POST['username']));
$email = mysql_real_escape_string($_POST['email']);
//sql om username te controleren:
$sql_user = "
SELECT username, usernameclean
FROM users
WHERE username = '" . $username . "'
AND usernameclean = '" . $usernameclean . "'
";
//sql om email te controleren:
$sql_email = "
SELECT email
FROM users
WHERE email = '" . $email . "'
";
$query_user = mysql_query($sql_user);
$query_email = mysql_query($sql_email);
if(mysql_num_rows($query_user) > 0) {
echo 'Gebruikersnaam ' . $username . ' is al in gebruik.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
else {
$userG = true;
}
if(checkMail($email)) {
if(mysql_num_rows($query_email) > 0) {
echo 'Het emailadres ' . $email . ' is al in gebruik.';
header("Refresh: 3; url=./index.php?reg=1");
}
else {
$emailG = true;
}
}
else {
echo 'Het emailadres ' . $email . ' is ongeldig.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
if($_POST['password'] == $_POST['password2']) {
$passwordG = true;
}
else {
echo 'Wachtwoorden niet gelijk.<br />';
header("Refresh: 3; url=./index.php?reg=1");
}
if($userG == true && $emailG == true && $passwordG == true) {
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$password = mysql_real_escape_string(md5($_POST['password']));
$sql_reg = "
INSERT username, usernameclean, email, password_md5, ip
INTO users
VALUES '" . $username . "', '" . $usernameclean . "', '" . $email . "', '" . $password . "', '" . $ip . "',
";
$query_reg = mysql_query($sql_reg);
if($query_reg) {
echo 'Geregistreerd. Je wordt doorgestuurd naar de index.';
header("Refresh: 3; url=./index.php");
}
}
}
elseif(isset($_POST['submit'])) { //als hij niet alles krijgt, maar wel submit.
echo 'Niet alles ingevult.';
header("Refresh: 3; url=./index.php?reg=1");
}
else { //als hij niks krijgt, laat hij het registratieformulier zien. ?>
<form action="" method="post">
<table width="200" border="0">
<tr>
<td>Gebruikersnaam:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Wachtwoordcontrole:</td>
<td><input type="password" name="password2" /></td>
</tr>
<tr>
<td><input type="reset" value="Reset" style="width: 134px" /></td>
<td><input name="submit" type="submit" value="Registreer" style="width: 144px"></td>
</tr>
</table>
</form>
<?php
}
?>
Ter informatie:
Ik include deze registratiepagina in de index als hij ?reg=1 krijgt en er geen login sessie is.
EDIT:
Hier de code van functions.php, ik heb dat script van phphulp gehaald omdat mijn eigen het niet deed:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function checkMail($mail)
{
// explode het e-mail adres op een @
$email_host = explode("@", $mail);
// pak alles na de @
$email_host = $email_host['1'];
// zet een var met de (eventuele) DNS van de domein
$email_resolved = gethostbyname($email_host);
// kijk of er een DNS aan zit en of alles voor en na het e-mail adres klopt
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;
// wanneer het geldig is, is $valid = 1, zo niet, dan geeft hij geen result (NULL)
return $valid;
}
?>
function checkMail($mail)
{
// explode het e-mail adres op een @
$email_host = explode("@", $mail);
// pak alles na de @
$email_host = $email_host['1'];
// zet een var met de (eventuele) DNS van de domein
$email_resolved = gethostbyname($email_host);
// kijk of er een DNS aan zit en of alles voor en na het e-mail adres klopt
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;
// wanneer het geldig is, is $valid = 1, zo niet, dan geeft hij geen result (NULL)
return $valid;
}
?>
Is daar nog iets verkeerd aan?
Want ik krijg nu het probleem dat ie een error op regel 12 van de functions geeft:
Code (php)
1
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
Error: Deprecated: Function eregi() is deprecated in E:\***\functions.php on line 12
Gewijzigd op 31/08/2011 17:25:38 door Kees van Kempen