Session/SQL data probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank

Frank

18/05/2008 19:51:00
Quote Anchor link
Heey,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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");

        }    
    
}


?>


Script 2: de editprofileform.php (snippet; zonder html form)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)){
  ?>


Script 3: de editprofilecontrole.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?

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
 
PHP hulp

PHP hulp

27/04/2024 19:49:33
 
Noppes

Noppes

18/05/2008 19:56:00
Quote Anchor link
Je vergeet de sessiet te starten!?

session_register() is verleden tijd.

tegenwoordig woord daar voor gebruikt: $_SESSION
 
Frank

Frank

18/05/2008 20:14:00
Quote Anchor link
Ik heb het nu veranderd in het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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?
 
Noppes

Noppes

18/05/2008 20:44:00
Quote Anchor link
$myusername lijkt mij een string en denk ook niet dat je die bedoeld is om te vergelijken met userid

en je moet niet alles in 1 keer willen doen:

dan kom ik uit op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// niet helemaal
$myusername = $_POST['myusername'];
// maar zoiets
if ($_SERVER['REQUEST_METHOD']=='POST') {
   $myusername = isset($_POST['myusername']) && trim($_POST['myusername']) !='' ? $_POST['myusername'] : '' ;

?>
Gewijzigd op 01/01/1970 01:00:00 door Noppes
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.