Session/SQL data probleem
In ben bezig met m'n CMS en ik heb een probleem met m'n session handling. Zodra ik inlog met een willekeurig profiel en ik naar het onderdeel "Edit Profile" ga, wordt altijd entry met id nr. 1 opgehaald. Hieronder drie scripts: de inlogcontrole; de html form en de form controle.
De inlogcontrole.php checkt, zoals de naam al zegt, de id met de database en maakt de sessie aan (hopelijk omschrijf ik het zo goed)
De editprofileform.php haalt de data uit de database en zet die in de form zodat de gebruiker de al eerder ingevoerde data meteen kan zien en aanpassen.
De editprofilecontrole.php voert de controle uit bij veranderingen van het profiel en veranderd de data ook daadwerkelijk in de database.
Zelf denk ik dat het probleem zit in de SQL code van de editprofileform maar ik weet niet precies de oplossing...
Hoe kan ik zorgen dat de juiste data uit de database gehaald wordt? dus de informatie van degene die is ingelogd?
Bij voorbaat dank!
Script 1: inlogcontrole.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
37
38
39
40
41
42
43
44
45
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
<?php
//Username and Password from the login screen
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
// encrypt password
$encrypted_mypassword=md5($mypassword);
//niets ingevuld
if($myusername == null || $mypassword == null) {
header("Location: inlogscherm.php?msg=2");
exit;
//Protection of MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
//wel wat ingevuld, controle met db
} else {
//db includen + q uitvoeren
include("../../databaseconnectie/database.php");
$sql="SELECT username, password FROM users WHERE username='" . $myusername . "' AND password='" . $encrypted_mypassword . "'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
if ($count==1){
//sessie aanmaken met userid
session_register("myusername");
session_register("mypassword");
header("Location: ../index.php");
} else {
header("Location: inlogscherm.php?msg=1");
}
}
?>
//Username and Password from the login screen
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
// encrypt password
$encrypted_mypassword=md5($mypassword);
//niets ingevuld
if($myusername == null || $mypassword == null) {
header("Location: inlogscherm.php?msg=2");
exit;
//Protection of MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
//wel wat ingevuld, controle met db
} else {
//db includen + q uitvoeren
include("../../databaseconnectie/database.php");
$sql="SELECT username, password FROM users WHERE username='" . $myusername . "' AND password='" . $encrypted_mypassword . "'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
if ($count==1){
//sessie aanmaken met userid
session_register("myusername");
session_register("mypassword");
header("Location: ../index.php");
} else {
header("Location: inlogscherm.php?msg=1");
}
}
?>
Script 2: de editprofileform.php (snippet; zonder html form)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
echo "<h2>Verander je profiel</h2>";
include('../databaseconnectie/database.php');
$sql = "SELECT userid,name,email,userpic,usergear,usermsg FROM users WHERE userid = " . session_is_registered(myusername);
$res = mysql_query($sql);
$msg = $_GET['msg'];
switch ($msg){
case "1":
echo "<font color='#ff0000'><small>You forgot something to fill in!</small></font>";
break;
case "2":
echo "<small><font color='#ff0000'>Updated!<BR><BR></font></small>";
break;
default:
echo "";
break;
}
while ($row = mysql_fetch_array($res)){
?>
echo "<h2>Verander je profiel</h2>";
include('../databaseconnectie/database.php');
$sql = "SELECT userid,name,email,userpic,usergear,usermsg FROM users WHERE userid = " . session_is_registered(myusername);
$res = mysql_query($sql);
$msg = $_GET['msg'];
switch ($msg){
case "1":
echo "<font color='#ff0000'><small>You forgot something to fill in!</small></font>";
break;
case "2":
echo "<small><font color='#ff0000'>Updated!<BR><BR></font></small>";
break;
default:
echo "";
break;
}
while ($row = mysql_fetch_array($res)){
?>
Script 3: de editprofilecontrole.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
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
<?
include('../../databaseconnectie/database.php');
$id = $_GET['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$usergear = $_POST['usergear'];
$usermsg = $_POST['msg'];
if($id == null || $name == null || $email == null || $usergear == null || $usermsg == null) {
header("Location: ../index.php?show=3&profile=1&err=1");
} else {
$kwerie = "UPDATE users SET name = '". $name ."', email = '".$email."', usergear = '".$usergear."', usermsg = '".$usermsg."'
WHERE userid = '".$id."'";
mysql_query($kwerie);
header("Location: ../index.php?show=3&profile=1&err=2");
}
?>
include('../../databaseconnectie/database.php');
$id = $_GET['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$usergear = $_POST['usergear'];
$usermsg = $_POST['msg'];
if($id == null || $name == null || $email == null || $usergear == null || $usermsg == null) {
header("Location: ../index.php?show=3&profile=1&err=1");
} else {
$kwerie = "UPDATE users SET name = '". $name ."', email = '".$email."', usergear = '".$usergear."', usermsg = '".$usermsg."'
WHERE userid = '".$id."'";
mysql_query($kwerie);
header("Location: ../index.php?show=3&profile=1&err=2");
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Frank
session_register() is verleden tijd.
tegenwoordig woord daar voor gebruikt: $_SESSION
Code (php)
1
<?php $sql = "SELECT userid,name,email,userpic,usergear,usermsg FROM users WHERE userid = " . $_SESSION['username'] = $myusername; ?>
Maar hierbij krijg ik de volgende foutmelding:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mounted-storage/home66b/sub001/sc39728-XPIX/www/Vanadis/admin/profile/editprofileform.php on line 33
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Regel 33:
while ($row = mysql_fetch_array($res)){
Het probleem zit dus wel bij de SQL. Maar volgens mij heb ik het zo goed neergezet, of had ik nog aanhalingstekens moeten escapen?
en je moet niet alles in 1 keer willen doen:
dan kom ik uit op:
Code (php)
1
<?php $sql = "SELECT userid,name,email,userpic,usergear,usermsg FROM users WHERE name = '" . $myusername."'" ?>
maar het lijkt mij dan ook nog verstandig het wachtwoord in de where-clause te verwerken
aanvulling
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Noppes