MySql probleem
Hallo dames en heren,
ik ben een beginnende phper, ben bezig met een activatie script voor me login pagina, hij werkt maar toch niet helemaal goed. als ik me account activeer verplaatst hij wel de tempuser naar user maar, hij zend wachtwoord er username niet mee en hij verwijderd de user niet uit tempusers. hoop dat jullie het snappen hier het scriptje wat ik gemaakt heb!
ik ben een beginnende phper, ben bezig met een activatie script voor me login pagina, hij werkt maar toch niet helemaal goed. als ik me account activeer verplaatst hij wel de tempuser naar user maar, hij zend wachtwoord er username niet mee en hij verwijderd de user niet uit tempusers. hoop dat jullie het snappen hier het scriptje wat ik gemaakt heb!
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
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
<?php
include("includes/connect.php");
if(isset($_GET['email']) && preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_GET['email'])) {
$email = mysql_real_escape_string($_GET['email']);
}
if(isset($_GET['key']) && (strlen($_GET['key'])==32)){//de activation key MD5 hash
$key = mysql_real_escape_string($_GET['key']);
}
if(isset($email) && isset($key)){
$result =mysql_query(" SELECT * FROM tempusers WHERE (email='$email' AND activation='$key') LIMIT 1 ") or die(mysql_error());
while($row = mysql_fetch_array()){
$user_id = mysql_real_escape_string($row['user_id']);
$username = mysql_real_escape_string($row['username']);
$email = mysql_real_escape_string($row['email']);
$password = mysql_real_escape_string($row['password']);
}
$result1 =mysql_query("INSERT INTO users (user_id,username,email,password,role,credits) VALUES ('','$username','$email','$password','user',0)") or die(mysql_error());
$result2 =mysql_query("DELETE FROM tempusers WHERE user_id='$user_id' ") or die(mysql_error());
if(!$result2){
echo "Your account could not be activated, please contact the system admin! ";
}else{
header( 'Location:prompt.php?x=0' );
}
}else{
echo"Error, please contact the system admin! ";
}
?>
include("includes/connect.php");
if(isset($_GET['email']) && preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_GET['email'])) {
$email = mysql_real_escape_string($_GET['email']);
}
if(isset($_GET['key']) && (strlen($_GET['key'])==32)){//de activation key MD5 hash
$key = mysql_real_escape_string($_GET['key']);
}
if(isset($email) && isset($key)){
$result =mysql_query(" SELECT * FROM tempusers WHERE (email='$email' AND activation='$key') LIMIT 1 ") or die(mysql_error());
while($row = mysql_fetch_array()){
$user_id = mysql_real_escape_string($row['user_id']);
$username = mysql_real_escape_string($row['username']);
$email = mysql_real_escape_string($row['email']);
$password = mysql_real_escape_string($row['password']);
}
$result1 =mysql_query("INSERT INTO users (user_id,username,email,password,role,credits) VALUES ('','$username','$email','$password','user',0)") or die(mysql_error());
$result2 =mysql_query("DELETE FROM tempusers WHERE user_id='$user_id' ") or die(mysql_error());
if(!$result2){
echo "Your account could not be activated, please contact the system admin! ";
}else{
header( 'Location:prompt.php?x=0' );
}
}else{
echo"Error, please contact the system admin! ";
}
?>
Begin met het inbouwen van fatsoenlijke foutafhandeling ipv or die.
Benoem het veld/de velden die je wilt ophalen en gebruik geen *
Wordt aangeraden om variabelen in een query buiten quotes te houden.
Waarom variabelen kopiëren (regel 5, 9 en 15-18)?
Waarom mysql_real_escape_string als je informatie uit je database komt?
Ik vermoed dat er maar 1 resultaat zal zijn van je query --> dan heb je geen while lus nodig. En ook die limit 1 in je query lijkt me niet zo zinvol. Of kunnen er meerdere e-mailadressen zijn (met dezelfde code)??
Waarom mysql_fetch_array als je geen gebruik maakt van die functionaliteit; gebruik dan mysql_fetch_assoc?
Na header wordt exit aangeraden --> je script hoeft niet verder.
Ten aanzien van je vraag: debuggen. Echo de query's naar het scherm en kijk of er dat staat wat je verwacht.
Benoem het veld/de velden die je wilt ophalen en gebruik geen *
Wordt aangeraden om variabelen in een query buiten quotes te houden.
Waarom variabelen kopiëren (regel 5, 9 en 15-18)?
Waarom mysql_real_escape_string als je informatie uit je database komt?
Ik vermoed dat er maar 1 resultaat zal zijn van je query --> dan heb je geen while lus nodig. En ook die limit 1 in je query lijkt me niet zo zinvol. Of kunnen er meerdere e-mailadressen zijn (met dezelfde code)??
Waarom mysql_fetch_array als je geen gebruik maakt van die functionaliteit; gebruik dan mysql_fetch_assoc?
Na header wordt exit aangeraden --> je script hoeft niet verder.
Ten aanzien van je vraag: debuggen. Echo de query's naar het scherm en kijk of er dat staat wat je verwacht.
Oke bedankt zal eens kijken of ik het op kan lossen!
Nog een tip: je maakt gebruik van de mysql_ functies. Aangezien deze in PHP6 niet meer zullen werken raad ik je aan de mysqli_ functies te gebruiken. Hier word het duidelijk uitgelegd:
http://www.phphulp.nl/php/tutorial/overig/mysqli/499/een-simpele-select/1207/
http://www.phphulp.nl/php/tutorial/overig/mysqli/499/een-simpele-select/1207/
PHP6 duurt nog een tijd, en mysql_*() zal er niet zomaar uit gebonjourd worden. Je gaat dit advies toch niet aan de overige 95% van de MySQL gebruikers op PHPhulp opperen hè ;-) ?
Gewijzigd op 17/10/2012 19:18:47 door - Ariën -
Ohh, ik las hier op PHPhulp veel dat het er met PHP6 uit was. Maar als dat niet zo is, dan mijn excuses




