Probleempje met wachtwoord verander code.
Dus ik heb een bug als ik mn wachtwoord probeer te veranderen op mn website.
error:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/u404994150/public_html/editpass_parse.php on line 28 Warning: mysql_close() expects parameter 1 to be resource, null given in /home/u404994150/public_html/editpass_parse.php on line 29
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
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
<?php
session_start(); // Start your sessions to allow your page to interact with session variables
include_once('header.php');
include_once('sidebar.php');
include_once('connect.php');
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
$newpass=$_POST['newpass'];
$newpass2=$_POST['newpass2'];
$uid = $_SESSION['uid'];
// Function that will convert a user id into their username
function getcurpass($uid) {
$sql = "SELECT password FROM users WHERE id='".$uid."' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
return $row['password'];
}
$playerpass=getcurpass($uid);
if($oldpass == $playerpass){
if($newpass == $newpass2) {
$password = md5($newpass);
$sql = "UPDATE users SET password='".$password."' WHERE id='".$uid."'";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
mysql_close($con);
} else {
echo "<p>Uw wachtwoord zijn niet gelijk.</p>";
}
}else{
echo "<p>Het ingegeven huidig wachtwoord is niet gelijk aan het huidige wachtwoord $uid,$oldpass,$playerpass,$newpass</p>";
}
include_once('footer.php');
?>
session_start(); // Start your sessions to allow your page to interact with session variables
include_once('header.php');
include_once('sidebar.php');
include_once('connect.php');
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
$newpass=$_POST['newpass'];
$newpass2=$_POST['newpass2'];
$uid = $_SESSION['uid'];
// Function that will convert a user id into their username
function getcurpass($uid) {
$sql = "SELECT password FROM users WHERE id='".$uid."' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
return $row['password'];
}
$playerpass=getcurpass($uid);
if($oldpass == $playerpass){
if($newpass == $newpass2) {
$password = md5($newpass);
$sql = "UPDATE users SET password='".$password."' WHERE id='".$uid."'";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
mysql_close($con);
} else {
echo "<p>Uw wachtwoord zijn niet gelijk.</p>";
}
}else{
echo "<p>Het ingegeven huidig wachtwoord is niet gelijk aan het huidige wachtwoord $uid,$oldpass,$playerpass,$newpass</p>";
}
include_once('footer.php');
?>
Groetjes Jasper,
Als je zoekt op de foutmelding(en) krijg je genoeg uitleg wat er fout gaat.
Echo je query. Staat daar wat je verwacht?
Wat gebeurt er als je de query direct in php-admin uitvoert?
Ten aanzien van je code:
Waar controleer je of er iets verzonden is?
Waar controleer je of de $_POST-waarden bestaan?
Waarom variabelen aanmaken (regel 7 tm 11)?
Gebruik geen md5; is niet veilig.
Ik zou een function niet midden in code plaatsen, maar in een apart bestand of bovenaan in een bestand.
Bouw goede foutafhandeling ipv 'or die' (en laat zeker de bezoeker de foutmelding niet zien).
Spring je code in, zodat je kunt zien welke { bij } hoort. Nu heb je 2 if's (regel 23+24) vlak na elkaar. Zoek het dan maar uit welke code waarbij hoort.
Controleer of je query (regel 27) 1 update heeft opgeleverd.
Wat is nut van regel 28?
Ik zou geen " gebruik in php (regel 32, 35), maar '
Variabelen, regel 35, zou ik buiten quotes houden. Gebruik niet user-input, maar beveilig dit.
Zou overstappen op mysqli
Nou Jasper neem de adviezen van Obelix maar ter harte.
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
Zo weet hij niet welke hij moet gebruiken.
Frank Martens op 23/08/2013 19:43:54:
Waarschijnlijk zit de fout hierin, er zijn 2 dezelfde gegeven:
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
Zo weet hij niet welke hij moet gebruiken.
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
Zo weet hij niet welke hij moet gebruiken.
Dit is klinkklare onzin, maar het gaat even te ver om in dit draadje uit te leggen waarom. De code zelf is in ieder geval in orde.
Terug naar de foutmelding uit de eerste post: die is volledig terecht. In regel 27 voert mysql_query een UPDATE-query uit. In dat geval geeft mysql_query geen resource terug, maar alleen TRUE of FALSE. De $res die in regel 28 aan mysql_fetch_assoc wordt gevoerd, bevat dus geen resource, zodat er niets gefetcht kan worden. Ik zou ook niet weten wát je zou willen fetchen...
Frank Martens op 23/08/2013 19:43:54:
Waarschijnlijk zit de fout hierin, er zijn 2 dezelfde gegeven:
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
Zo weet hij niet welke hij moet gebruiken.
$oldpass=$_POST['oldpass'];
$oldpass=md5($oldpass);
Zo weet hij niet welke hij moet gebruiken.
Ik weet zelf dat dat niet de bug is :p
Toevoeging op 25/08/2013 15:24:23:
Obelix en Idefix op 23/08/2013 19:33:09:
Ga debuggen ;-)
Als je zoekt op de foutmelding(en) krijg je genoeg uitleg wat er fout gaat.
Echo je query. Staat daar wat je verwacht?
Wat gebeurt er als je de query direct in php-admin uitvoert?
Ten aanzien van je code:
Waar controleer je of er iets verzonden is?
Waar controleer je of de $_POST-waarden bestaan?
Waarom variabelen aanmaken (regel 7 tm 11)?
Gebruik geen md5; is niet veilig.
Ik zou een function niet midden in code plaatsen, maar in een apart bestand of bovenaan in een bestand.
Bouw goede foutafhandeling ipv 'or die' (en laat zeker de bezoeker de foutmelding niet zien).
Spring je code in, zodat je kunt zien welke { bij } hoort. Nu heb je 2 if's (regel 23+24) vlak na elkaar. Zoek het dan maar uit welke code waarbij hoort.
Controleer of je query (regel 27) 1 update heeft opgeleverd.
Wat is nut van regel 28?
Ik zou geen " gebruik in php (regel 32, 35), maar '
Variabelen, regel 35, zou ik buiten quotes houden. Gebruik niet user-input, maar beveilig dit.
Zou overstappen op mysqli
Als je zoekt op de foutmelding(en) krijg je genoeg uitleg wat er fout gaat.
Echo je query. Staat daar wat je verwacht?
Wat gebeurt er als je de query direct in php-admin uitvoert?
Ten aanzien van je code:
Waar controleer je of er iets verzonden is?
Waar controleer je of de $_POST-waarden bestaan?
Waarom variabelen aanmaken (regel 7 tm 11)?
Gebruik geen md5; is niet veilig.
Ik zou een function niet midden in code plaatsen, maar in een apart bestand of bovenaan in een bestand.
Bouw goede foutafhandeling ipv 'or die' (en laat zeker de bezoeker de foutmelding niet zien).
Spring je code in, zodat je kunt zien welke { bij } hoort. Nu heb je 2 if's (regel 23+24) vlak na elkaar. Zoek het dan maar uit welke code waarbij hoort.
Controleer of je query (regel 27) 1 update heeft opgeleverd.
Wat is nut van regel 28?
Ik zou geen " gebruik in php (regel 32, 35), maar '
Variabelen, regel 35, zou ik buiten quotes houden. Gebruik niet user-input, maar beveilig dit.
Zou overstappen op mysqli
Veel om te lezen maar heb er veel van geleerd ;)
En ik zou inderdaad beter is mysqli leren
Toevoeging op 25/08/2013 15:35:34:
BTW: Ik heb het gefixt en normaal zien spelers de foutmelding ook niet maar dat was maar tijdelijk ;)