Kan maar 1 row lezen.
ik ben bezig met een activation email code.
bijna alles werkt.
1 account kan ik activeren.
maar als een ander account aanmaak. kan ik hem niet activeren hij zegt dan dat ie de email niet kan vinden en de activationcode niet kan vinde. maar dat kan hij wel bijn mijn 1e account en mijn 2e account.
waarom niet???
Hopelijk kunnen jullie helpen.
activate.php
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
if (isset($_GET['succes']) == true && empty($_GET['succes']) == true) {
echo '<h2>Thanks, we\'ve activated you\'re account...</h2>';
echo '<p>And you\'re free to log in.</p>';
} else if (isset($_GET['email'], $_GET['email_code']) == true) {
$email = trim($_GET['email']);
$email_code = trim($_GET['email_code']);
if (email_exists($email) == false) {
$errors[] = 'Oops, something went wrong, and we couldn\'t find that email!';
} else if (activate($email, $email_code) == false) {
$errors[] = 'We had some problems to activate you\'re account.';
}
if (empty($errors) == false) {
echo '<h2>Oops...</h2>';
echo output_errors($errors);
} else {
header("Location: activate.php?succes");
}
} else {
header("Location: index.php");
exit();
}
?>
if (isset($_GET['succes']) == true && empty($_GET['succes']) == true) {
echo '<h2>Thanks, we\'ve activated you\'re account...</h2>';
echo '<p>And you\'re free to log in.</p>';
} else if (isset($_GET['email'], $_GET['email_code']) == true) {
$email = trim($_GET['email']);
$email_code = trim($_GET['email_code']);
if (email_exists($email) == false) {
$errors[] = 'Oops, something went wrong, and we couldn\'t find that email!';
} else if (activate($email, $email_code) == false) {
$errors[] = 'We had some problems to activate you\'re account.';
}
if (empty($errors) == false) {
echo '<h2>Oops...</h2>';
echo output_errors($errors);
} else {
header("Location: activate.php?succes");
}
} else {
header("Location: index.php");
exit();
}
?>
user.php
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
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
<?php
function activate($email, $email_code) {
$email = mysql_real_escape_string($email);
$email_code = mysql_real_escape_string($email_code);
$query = mysql_result(mysql_query("SELECT user_id FROM users WHERE email = '$email' AND email_code = '$email_code' AND active = 0"), 0);
if ($query == 1) {
mysql_query("UPDATE users SET active = 1 WHERE email = '$email'");
return true;
} else {
return false;
echo $register_data['email'];
}
}
function register_user($register_data){
array_walk($register_data, 'array_sanitize');
$register_data['password'] = md5($register_data['password']);
$fields = implode(', ', array_keys($register_data));
$data = '\'' . implode('\', \'', $register_data) . '\'';
mysql_query("INSERT INTO users ($fields) VALUES ($data)");
mail($register_data['email'], 'M-Tutorial - Activation code!', "Hello " . $register_data['first_name'] . ",\n\nThanks for that you registerd on our website.\n\nTo activate you're account please click the link below.\n\nActivation code: http://localhost/tutorial/activate.php?email=" . $register_data['email'] . "&email_code=" . $register_data['email_code'] . "\n\nWe all thank you and wish you much enjoy to our website. Kind regards from the MTUT Crew.", 'From: [email protected]');
}
function email_exists($email) {
$email = sanitize($email);
$query = mysql_query("SELECT user_id FROM users WHERE email = '$email'");
if (mysql_num_rows($query) == 0) {
} else {
return (mysql_result($query, 0) == 1) ? true : false;
}
}
?>
function activate($email, $email_code) {
$email = mysql_real_escape_string($email);
$email_code = mysql_real_escape_string($email_code);
$query = mysql_result(mysql_query("SELECT user_id FROM users WHERE email = '$email' AND email_code = '$email_code' AND active = 0"), 0);
if ($query == 1) {
mysql_query("UPDATE users SET active = 1 WHERE email = '$email'");
return true;
} else {
return false;
echo $register_data['email'];
}
}
function register_user($register_data){
array_walk($register_data, 'array_sanitize');
$register_data['password'] = md5($register_data['password']);
$fields = implode(', ', array_keys($register_data));
$data = '\'' . implode('\', \'', $register_data) . '\'';
mysql_query("INSERT INTO users ($fields) VALUES ($data)");
mail($register_data['email'], 'M-Tutorial - Activation code!', "Hello " . $register_data['first_name'] . ",\n\nThanks for that you registerd on our website.\n\nTo activate you're account please click the link below.\n\nActivation code: http://localhost/tutorial/activate.php?email=" . $register_data['email'] . "&email_code=" . $register_data['email_code'] . "\n\nWe all thank you and wish you much enjoy to our website. Kind regards from the MTUT Crew.", 'From: [email protected]');
}
function email_exists($email) {
$email = sanitize($email);
$query = mysql_query("SELECT user_id FROM users WHERE email = '$email'");
if (mysql_num_rows($query) == 0) {
} else {
return (mysql_result($query, 0) == 1) ? true : false;
}
}
?>
register.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if (isset($_GET['succes']) && empty($_GET['succes'])) {
echo 'You\'ve been registerd succesfully.<br>Please activate you\'re account to log in on our website.';
} else {
if (empty($errors) == false) {
echo output_errors($errors);
} else if (empty($_POST) == false && empty($errors) == true) {
$register_data = array(
'username' => $_POST['username'],
'password' => $_POST['password'],
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'email_code' => md5($_POST['username'] + microtime()),
'email' => $_POST['email']
);
register_user($register_data);
header("Location: register.php?succes");
exit();
}
?>
if (isset($_GET['succes']) && empty($_GET['succes'])) {
echo 'You\'ve been registerd succesfully.<br>Please activate you\'re account to log in on our website.';
} else {
if (empty($errors) == false) {
echo output_errors($errors);
} else if (empty($_POST) == false && empty($errors) == true) {
$register_data = array(
'username' => $_POST['username'],
'password' => $_POST['password'],
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'email_code' => md5($_POST['username'] + microtime()),
'email' => $_POST['email']
);
register_user($register_data);
header("Location: register.php?succes");
exit();
}
?>
general.php
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function email($to, $subject, $header) {
mail($to, $subject, $body, 'From: [email protected]');
}
?>
function email($to, $subject, $header) {
mail($to, $subject, $body, 'From: [email protected]');
}
?>
Ik geef alleen de stukjes code mee de van belang zijn.!!.
En jaja ik doe het nog met mysql. dat is omdat ze het zo in de tutorial doen maar als het zover is verander ik het naar mysqli_... en ik gebruik ook nu nog even md5() om te hashen.
Gewijzigd op 25/06/2014 15:14:17 door Mathieu Posthumus
Wat je hier doet is testen of de waarde van de eerste kolom van de eerste rij gelijk is aan 1. Dat klopt dus alleen voor de gebruiker met id 1. Voor alle andere gebruikers klopt dat niet en dus kan je andere gebruikers nooit activeren.
Als je dit uit een tutorial hebt dan moet je die of weggooien.... of beter overtikken. Ik kan me niet voorstellen dat dit er zo in staat.
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
<?
function email_exists($email) {
$query = mysql_query("SELECT user_id FROM users WHERE email = '".mysql_real_escape_string($email)."'");
if($query !== false){
if (mysql_num_rows($query) == 1) {
return true;
}
}
return false;
}
?>
function email_exists($email) {
$query = mysql_query("SELECT user_id FROM users WHERE email = '".mysql_real_escape_string($email)."'");
if($query !== false){
if (mysql_num_rows($query) == 1) {
return true;
}
}
return false;
}
?>
Gewijzigd op 25/06/2014 15:31:22 door gerhard l
Oke ik ga het even proberen dankje:)
Je wilt helemaal niet weten wat de waarde is van die kolom, daar kan je namelijk helemaal niets mee. Wat mij betreft is die hele regel vreemd. Het enige wat je namelijk op dat moment kunt doen is testen of je een rij terug krijgt of niet (en dat doe je al in de eerdere conditie). Wat deze regel nog test is mij volkomen onduidelijk. Persoonlijk zou ik die hele else weggooien en alleen testen of er een rij terugkomt -> true, of dat er geen rij terug komt -> false.
Edit:
en dan kom je dus op wat Gerhard poste
Als dit zo in de tutorial staat dan weet je wat je er wat mij betreft mee kunt doen....
Gewijzigd op 25/06/2014 15:31:23 door Erwin H
Yes het werkt naja ik had dan die ik had gezegt. dat >= 1 werkt ook maar toch bedankt.:)
Maar fijn dat het werkt. Lees Erwin zijn reactie wel goed, over de werking van mijn stukje code en als die oude code inderdaad zo in je tutorial staat, kan je misschien beter een andere zoeken.
Plaats hier en daar een controle om te kijken/controleren of het script wel die stappen zet die jij denkt. Kom je er vanzelf achter waar het fout gaat.
Mathieu Posthumus op 25/06/2014 15:13:28:
Wat is hier de bedoeling? Eerst controleren of $_GET['succes'] bestaat en dan controleren of die leeg is?
Mathieu Posthumus op 25/06/2014 15:13:28:
user.php
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
function activate($email, $email_code) {
$email = mysql_real_escape_string($email);
$email_code = mysql_real_escape_string($email_code);
$query = mysql_result(mysql_query("SELECT user_id FROM users WHERE email = '$email' AND email_code = '$email_code' AND active = 0"), 0);
if ($query == 1) {
mysql_query("UPDATE users SET active = 1 WHERE email = '$email'");
return true;
} else {
return false;
echo $register_data['email'];
}
}
?>
function activate($email, $email_code) {
$email = mysql_real_escape_string($email);
$email_code = mysql_real_escape_string($email_code);
$query = mysql_result(mysql_query("SELECT user_id FROM users WHERE email = '$email' AND email_code = '$email_code' AND active = 0"), 0);
if ($query == 1) {
mysql_query("UPDATE users SET active = 1 WHERE email = '$email'");
return true;
} else {
return false;
echo $register_data['email'];
}
}
?>
Misschien goed om code over meerdere regels uit te schrijven en dan te gaan debuggen.
Hoe ziet je SELECT-query er uit? Klopt dat met wat je verwacht?
Lukt de query ook daadwekelijk?
Wordt de update-query succesvol uitgevoerd?
Kun je eerst een return in een functie geven en daarna nog een echo?