if else goed of fout?
hallo, ik heb een registratie script ik heb alle fouten inmiddels eruit, alleen krijg ik niets in mijn database maar krijg ik wel te zien ''opgegeven email adress is bij ons al bekendgelukt!''
ik vraag me af of de if/else klopt ( en de volgorde uiteraard ) enof mijn query voor de insert wel goed is nu.
als jullie willen kan ik het ook even online zetten,
ik vraag me af of de if/else klopt ( en de volgorde uiteraard ) enof mijn query voor de insert wel goed is nu.
als jullie willen kan ik het ook even online zetten,
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
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
<?php
ini_set('display_errors', 0); // 0 = uit, 1 = aan
error_reporting(E_ALL);
include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
// alles uit de DB halen en in variable zetten
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
}
else {
$insert = ("
INSERT INTO gebruiker (naam, email, wachtwoord)
VALUES ('" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
}
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
}
else {
echo"gelukt!";
}
}
?>
ini_set('display_errors', 0); // 0 = uit, 1 = aan
error_reporting(E_ALL);
include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
// alles uit de DB halen en in variable zetten
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
}
else {
$insert = ("
INSERT INTO gebruiker (naam, email, wachtwoord)
VALUES ('" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
}
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
}
else {
echo"gelukt!";
}
}
?>
Gesponsorde koppelingen:
Dit is wat je nu doet:
Als je eerste if dus naar true evalueert wordt er die melding gedaan van dat het email adres al bestaat, maar er wordt verder geen query aangemaakt. $registreer krijgt dus geen waarde.
Vervolgens kijk je of $registreer === false. OMdat $registreer dus geen waarde heeft kom je daar in de else terecht en krijg je dus het bericht "gelukt".
Volgens mij moet die hele tweede if/else dus binnen de else van je eerste:
Code (php)
Als je eerste if dus naar true evalueert wordt er die melding gedaan van dat het email adres al bestaat, maar er wordt verder geen query aangemaakt. $registreer krijgt dus geen waarde.
Vervolgens kijk je of $registreer === false. OMdat $registreer dus geen waarde heeft kom je daar in de else terecht en krijg je dus het bericht "gelukt".
Volgens mij moet die hele tweede if/else dus binnen de else van je eerste:
ik krijg nu standaard de fout 'opgegeven email is al bij ons bekend'
heb het nu zo
Toevoeging op 05/02/2012 16:39:58:
moet ik niet nog een dit weer in een else zetten die na regel 25 begint?
heb het nu zo
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
} else {
//insert waaruit je $registreer komt
$insert = ("
INSERT INTO gebruiker (naam, email, wachtwoord)
VALUES ('" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
} else {
echo"gelukt!";
}
}
?>
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
} else {
//insert waaruit je $registreer komt
$insert = ("
INSERT INTO gebruiker (naam, email, wachtwoord)
VALUES ('" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
} else {
echo"gelukt!";
}
}
?>
Toevoeging op 05/02/2012 16:39:58:
moet ik niet nog een dit weer in een else zetten die na regel 25 begint?
Reshadd farid op 05/02/2012 16:31:40:
ik krijg nu standaard de fout 'opgegeven email is al bij ons bekend'
Dan moet je het dus boven dit stuk zoeken.
Reshadd farid op 05/02/2012 16:31:40:
moet ik niet nog een dit weer in een else zetten die na regel 25 begint?
Denk na voor je iets doet. Waarom denk je dat dit nodig is?
Reshadd, je controleert verkeerd.
Kijk eens naar deze code:
Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?
Kijk eens naar 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
?> }
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
?> }
Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?
Gewijzigd op 05/02/2012 18:07:35 door Ger van Steenderen
Waarom niet gewoon in http://www.phphulp.nl/php/forum/topic/registratie-script/82452/ verder gegaan?
Reshadd farid op 05/02/2012 16:04:16:
Als je dit op 1 had gezet had je zelf allang de foutmelding gezien.
Ger van Steenderen op 05/02/2012 18:06:57:
Reshadd, je controleert verkeerd.
Kijk eens naar deze code:
Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?
Kijk eens naar 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
?> }
$chekExist = ("
SELECT email, naam, wachtwoord
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
AND naam = '" . mysql_real_escape_string($_POST['naam']). "'
AND wachtwoord = '" . mysql_real_escape_string($_POST['wachtwoord']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
$row = mysql_fetch_assoc($controle);
// controleren of gebruiker al bestaat
if($row['email'] == $email) {
echo "opgegeven email is al bij ons bekend!";
?> }
Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?
nee ik wil het juist andersom een wachtwoord kan meerdere malen voorkomen, maar een email adres en gebruikersnaam niet,
hoe kan ik dan kijken of de gebruikersnaam , email al bestaat?
dat is in principe het enige wat hij in het code erboven op moet controleren en als alles goed is inserten
Toevoeging op 05/02/2012 19:09:49:
- SanThe - op 05/02/2012 18:59:14:
Als je dit op 1 had gezet had je zelf allang de foutmelding gezien.
Reshadd farid op 05/02/2012 16:04:16:
Als je dit op 1 had gezet had je zelf allang de foutmelding gezien.
dat is het probleem ik krijg geen foutmelding alleen
Notice: Undefined variable: email in /Applications/MAMP/htdocs/testsite/registreer.php on line 68
Reshadd farid op 05/02/2012 19:06:53:
dat is het probleem ik krijg geen foutmelding alleen
Notice: Undefined variable: email in /Applications/MAMP/htdocs/testsite/registreer.php on line 68
Notice: Undefined variable: email in /Applications/MAMP/htdocs/testsite/registreer.php on line 68
Maar dat vertelt je toch dat die variabele niet bestaat.
Gewijzigd op 05/02/2012 19:23:39 door - SanThe -
Als volgt:
Even zonder foutafhandeling, het gaat om het idee.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql = "SELECT email, naam
FROM gebruiker
WHERE
email='" . $_POST['email'] . "'
OR
naam='" . $_POST['naam'] . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo 'emailadres en/of gebruikersnaam bestaat al';
}
else {
//gebruiker registreren
}
?>
$sql = "SELECT email, naam
FROM gebruiker
WHERE
email='" . $_POST['email'] . "'
OR
naam='" . $_POST['naam'] . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo 'emailadres en/of gebruikersnaam bestaat al';
}
else {
//gebruiker registreren
}
?>
Even zonder foutafhandeling, het gaat om het idee.
Gewijzigd op 05/02/2012 19:21:59 door Ger van Steenderen
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.
- SanThe - op 05/02/2012 19:25:06:
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.
Maar wel 1 van de twee
@ger dat doe ik dus altijd normaal gesproken, maar als ik hier dan om hulp vraag is er altijd wel een reactie met niet beveiligd dus ik dacht ik probeer het beveiligd en met foutafhandelingen even zo te doen, en dat lukt nu voor geen meter dus!
een ding wat ik niet snap is, als je normaal gesproken declareert dan doe je
$email = $_POST['email'];
dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je
('" . mysql_real_escape_string($_POST['naam'])."',
hebt? krijg je dan hetzelfde resultaat?
ik heb nu trouwens dit
@santhe maar wat voor fout krijg ik dan als ik dit in de database doe? kan ik hier dan wel een goede foutafhandeling mee maken?
een ding wat ik niet snap is, als je normaal gesproken declareert dan doe je
$email = $_POST['email'];
dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je
('" . mysql_real_escape_string($_POST['naam'])."',
hebt? krijg je dan hetzelfde resultaat?
ik heb nu trouwens dit
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
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
<?php
include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
// alles uit de DB halen en in variable zetten
$chekExist = ("
SELECT email, naam,
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
OR naam = '" . mysql_real_escape_string($_POST['naam']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
// controleren of gebruiker al bestaat
if (mysql_num_rows($controle) > 0) {
echo "opgegeven email is al bij ons bekend!";
} else {
//gebruiker registreren
}
?>
include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
// alles uit de DB halen en in variable zetten
$chekExist = ("
SELECT email, naam,
FROM gebruiker
WHERE email = '" . mysql_real_escape_string($_POST['email']) . "'
OR naam = '" . mysql_real_escape_string($_POST['naam']). "'
");
// controleren of de query ok was
$controle = mysql_query($chekExist);
if ($controle === false){
echo "er is iets fout gegaan in de database";
}
// controleren of gebruiker al bestaat
if (mysql_num_rows($controle) > 0) {
echo "opgegeven email is al bij ons bekend!";
} else {
//gebruiker registreren
}
?>
@santhe maar wat voor fout krijg ik dan als ik dit in de database doe? kan ik hier dan wel een goede foutafhandeling mee maken?
Ger van Steenderen op 05/02/2012 19:33:39:
Maar wel 1 van de twee
- SanThe - op 05/02/2012 19:25:06:
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.
Maar wel 1 van de twee
Dat mag toch.
En als dat niet mag maak je die ook UNIQUE.
ik heb trouwens nu als fout dat ik een 1 nodig heb als parameter maar dat ik een boolean terugkrijg,,
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/MAMP/htdocs/testsite/registreer.php on line 65
er is iets fout gegaan met het registreren
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/MAMP/htdocs/testsite/registreer.php on line 65
er is iets fout gegaan met het registreren
Je query is blijkbaar mislukt.
Reshadd farid op 05/02/2012 19:35:49:
@ger dat doe ik dus altijd normaal gesproken, maar als ik hier dan om hulp vraag is er altijd wel een reactie met niet beveiligd dus ik dacht ik probeer het beveiligd en met foutafhandelingen even zo te doen, en dat lukt nu voor geen meter dus!
Ik bedoelde dat ik de foutafhandeling heb weggelaten.
Quote:
een ding wat ik niet snap is, als je normaal gesproken declareert dan doe je
$email = $_POST['email'];
dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je
('" . mysql_real_escape_string($_POST['naam'])."',
hebt? krijg je dan hetzelfde resultaat?
$email = $_POST['email'];
dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je
('" . mysql_real_escape_string($_POST['naam'])."',
hebt? krijg je dan hetzelfde resultaat?
Normaal gesproken is dit het aanmaken van onnodige variabelen., maar ............
in dit geval kan je het dus wel op deze manier:
$email = mysql_real_escape_string($_POST['email']);
want je hebt dat namelijk 2 keer nodig
ohgodd de query misluktte omdat er nog een komma achter naam stond *facepalm*
maar nu krijg ik alleen de foutmelding er is iets fout gegaan met registreren ( dus geen andere met index en variables o.i.d )
maar nu krijg ik alleen de foutmelding er is iets fout gegaan met registreren ( dus geen andere met index en variables o.i.d )
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
else {
//insert waaruit je $registreer komt
$insert = ("
INSERT INTO gebruiker (gebruiker_id, naam, email, wachtwoord)
VALUES ('', '" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
} else {
echo"gelukt!";
}
?>
else {
//insert waaruit je $registreer komt
$insert = ("
INSERT INTO gebruiker (gebruiker_id, naam, email, wachtwoord)
VALUES ('', '" . mysql_real_escape_string($_POST['naam'])."',
'". mysql_real_escape_string($_POST['email']) ."',
'". mysql_real_escape_string($_POST['wachtwoord']). "'
") or die (mysql_error());
$registreer = mysql_query($insert);
if($registreer === false){
echo "er is iets fout gegaan met het registreren";
} else {
echo"gelukt!";
}
?>
Wat doet die "or die" in je query?
dat had ik er in gezet in de hoop dat het ietss maar dan ook iets van een foutmelding gaf maar nee, en ik heb de query in mysql gezet en daar voerde hij gewoon alles in mijn database heb nu de or die ook weggehaald weer en krijg nog steeds er is iets fout geaan met het registreren
echo mysql_error() eens.



