probleem met het onthouden van een UserID

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tijmen mulder

tijmen mulder

11/04/2012 14:01:08
Quote Anchor link
hallo allemaal,

ik ben bezig voor een schoolproject waarbij ik een weblog moet bouwen met daar achter een SQL database.

nu heb ik de inlog al werken alleen krijg ik het niet voor elkaar om het UserID te laten onthouden in een $_session.

ik stuur alle inlog gevens weg met een post naar het volgende script.


Quote:
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
<?php
session_start();
include("include.php");

$inlognaam=$_POST['username'];
$gebruikersnaam=$_POST['username'];
$wachtwoord=$_POST['password'];

$gebruikersnaam = stripslashes($gebruikersnaam);
$wachtwoord = stripslashes($wachtwoord);
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$wachtwoord = mysql_real_escape_string($wachtwoord);

$sql="SELECT * FROM users WHERE gebruikersnaam='$gebruikersnaam' and wachtwoord='$wachtwoord'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);


if($count==1)
{

    session_register("username");
    session_register("password");
    header("location:login_success.php");
    
    $uidquery="SELECT UID from users where gebruikersnaam = '$inlognaam'";
    while (list($UID)= mysql_fetch_row($uidquery))
        {

            $_SESSION['UID']=$UID;
        }
}


else
{
    echo "Wrong Username or Password";
}


?>


het stuk in de IF is waar ik de 'uid' (userid) wil laten opslaan in de session. maar op de pagina waar ik hem echo krijg ik met deze constructie een error met undefined index. een constructie zonder while list levert mij telkens een resultaat '0' op, terwijl ik helemaal geen users heb met ID 0...

kan iemand mij helpen of het uitleggen?

Bij voorbaat DANK!!!!

gr Tijmen
Gewijzigd op 11/04/2012 14:02:29 door Tijmen mulder
 
PHP hulp

PHP hulp

22/12/2024 20:16:45
 
PHP Scripter

PHP Scripter

11/04/2012 14:15:20
Quote Anchor link
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
<?php
session_start();
include("include.php");

$sql = 'SELECT
            gebruikersnaam, uid
        FROM
            users
        WHERE
            gebruikersnaam = '
. mysql_real_escape_string($_POST['username']) . '
        AND
            wachtwoord = '
. mysql_real_escape_string($_POST['password']) . ' LIMIT 0,1';
$result = mysql_query($sql);

if (mysql_num_rows($result) == 1) {
    
    if ($row = mysql_fetch_assoc($result)) {
        $_SESSION['userName'] = $row['gebruikersnaam']; // Ik weet niet hoe je tabellen heten
        $_SESSION['userId'] = $row['uid']; // Ik weet niet hoe je tabellen heten        
    
        header('Location: login_success.php');
    }
else {
        // Doe iets met fout afhandeling
        die('Probleem bij data verwerking');
    }
}
else {
    // Doe iets met fout afhandeling
    die('Onjuiste gegvevens');
}

?>


- Zorg voor goede foutafhandeling.
- Selecteer NOOIT alle gegevens uit de tabel (*) maar selecteer alleen wat je nodig hebt.
- Programmeer overzichtelijk.
- Probeer zo weinig mogelijk variabelen aan te maken, je kunt mysql_real_escape_string direct in de query stoppen.
- Bij een login systeem altijd LIMIT 0,1 gebruiken en met mysql_num_rows controleren of het resultaat ook zo is.
- Met mysql_fetch_assoc kun je het resultaat opsplitsen en hoef je niet 2x een query uit te voeren.
- Gooi noot het wachtwoord in een sessie en haal hem ook niet uit de database. Sla je het wachtwoord wel gehashed op met MD5 of SHA512?

Verder mag je het zelf doen, succes! ;-)
Gewijzigd op 11/04/2012 14:16:59 door PHP Scripter
 
Tijmen mulder

tijmen mulder

11/04/2012 14:43:54
Quote Anchor link
dit is pas de eerste keer dat ik echt functioneel bouw met PHP, dus ik ben een echte beginner.

ik heb jou script gebruikt (overigens nogmaals bedankt) maar ik blijf nu de volgende error krijgen. heb al een half uur zitten zoeken naar de mogelijke fout maar kwam er echt niet uit :(
Quote:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Weblog\inloggen.php on line 15
Onjuiste gegvevens


dit zijn de velden die ik heb ik de tabel 'users'
UID type voornaam tussenvoegsel achternaam gebruikersnaam wachtwoord
 
Jeroen VD

Jeroen VD

11/04/2012 14:46:58
Quote Anchor link
dat is een probleempje met de query. daarom moet je ook altijd foutafhandeling inbouwen: tutorial
 
Reshad F

Reshad F

11/04/2012 14:48:06
Quote Anchor link
PHP Scripter op 11/04/2012 14:15:20:
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
<?php
session_start();
include("include.php");

$sql = 'SELECT
            gebruikersnaam, uid
        FROM
            users
        WHERE
            gebruikersnaam = '
. mysql_real_escape_string($_POST['username']) . '
        AND
            wachtwoord = '
. mysql_real_escape_string($_POST['password']) . ' LIMIT 0,1';
$result = mysql_query($sql);

if (mysql_num_rows($result) == 1) {
    
    if ($row = mysql_fetch_assoc($result)) {
        $_SESSION['userName'] = $row['gebruikersnaam']; // Ik weet niet hoe je tabellen heten
        $_SESSION['userId'] = $row['uid']; // Ik weet niet hoe je tabellen heten        
    
        header('Location: login_success.php');
    }
else {
        // Doe iets met fout afhandeling
        die('Probleem bij data verwerking');
    }
}
else {
    // Doe iets met fout afhandeling
    die('Onjuiste gegvevens');
}

?>


- Zorg voor goede foutafhandeling.
- Selecteer NOOIT alle gegevens uit de tabel (*) maar selecteer alleen wat je nodig hebt.
- Programmeer overzichtelijk.
- Probeer zo weinig mogelijk variabelen aan te maken, je kunt mysql_real_escape_string direct in de query stoppen.
- Bij een login systeem altijd LIMIT 0,1 gebruiken en met mysql_num_rows controleren of het resultaat ook zo is.
- Met mysql_fetch_assoc kun je het resultaat opsplitsen en hoef je niet 2x een query uit te voeren.
- Gooi noot het wachtwoord in een sessie en haal hem ook niet uit de database. Sla je het wachtwoord wel gehashed op met MD5 of SHA512?

Verder mag je het zelf doen, succes! ;-)


goede foutafhandeling met die?
 
PHP Scripter

PHP Scripter

11/04/2012 14:49:10
Quote Anchor link
Probeer dit eens:

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
<?php
session_start();
include("include.php");

$sql = "SELECT
            gebruikersnaam, uid
        FROM
            users
        WHERE
            gebruikersnaam = '"
. mysql_real_escape_string($_POST['username']) . "'
        AND
            wachtwoord = '"
. mysql_real_escape_string($_POST['password']) . "' LIMIT 0,1";
$result = mysql_query($sql);

if (mysql_num_rows($result) == 1) {
    
    if ($row = mysql_fetch_assoc($result)) {
        $_SESSION['userName'] = $row['gebruikersnaam']; // Ik weet niet hoe je tabellen heten
        $_SESSION['userId'] = $row['uid']; // Ik weet niet hoe je tabellen heten        
    
        header('Location: login_success.php');
    }
else {
        // Doe iets met fout afhandeling
        die('Probleem bij data verwerking');
    }
}
else {
    // Doe iets met fout afhandeling
    die('Onjuiste gegvevens');
}

?>



Toevoeging op 11/04/2012 14:49:51:

Quote:
goede foutafhandeling met die?


Misschien even de opmerking lezen die erboven staat? Goedzo.
Gewijzigd op 11/04/2012 14:50:11 door PHP Scripter
 
Jeroen VD

Jeroen VD

11/04/2012 14:51:06
Quote Anchor link
ik mis btw nog steeds foutafhandeling.
 
PHP Scripter

PHP Scripter

11/04/2012 14:52:14
Quote Anchor link
Jeroen vd op 11/04/2012 14:51:06:
ik mis btw nog steeds foutafhandeling.


Mag die zelf gaan uitvogelen, we kunnen niet alles voorkauwen.
Gewijzigd op 11/04/2012 14:52:20 door PHP Scripter
 
Tijmen mulder

tijmen mulder

11/04/2012 14:56:24
Quote Anchor link
het laatste script van PHP scripter werk gelukkig. ik was al wat aan het inlezen over foutafhandeling, maar daar ga ik later mee aan de slag moet nu zorgen dat alles automatisch met het userid word afgehandeld :)
 
Reshad F

Reshad F

11/04/2012 15:01:22
Quote Anchor link
als je er later mee aan de slag gaat heb je er toch niks aan? als je het gewoon gelijk doet dan zie je zelf ook sneller wat je fout doet omdat je dan per stukje code dan een andere foutafhandeling hebt en dan ziet welk stukje fout is.
 
Mebus  Hackintosh

Mebus Hackintosh

11/04/2012 15:19:17
Quote Anchor link
Zet dit eens boven aan je script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ini_set('display_errors', 1); error_reporting(E_ALL);


Verder is een simpele foutafhandeling van je query's zo gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$aErrors = array();

mysql_query(...) or $aErrors['MySQL'][] = mysql_error();

var_dump($aErrors); //Kan natuurlijk het beste met een foreach loop doorgenomen worden. Maar dit mag je zelf maken.


En indien je iets toevoegd/update/verwijdert in je database kijk dan altijd even met mysql_affected_rows of er ook daadwerkelijk iets is toegevoegd/geupdate/verwijdert..


En kijk hier eens naar: http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/

Vooral mijn reactie is nog erg handig en nog een extra zekerheid met of je query ook echt goed is uitgevoerd (dmv mysql_affected_rows).
Gewijzigd op 11/04/2012 15:24:00 door Mebus Hackintosh
 



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.