probleem met het onthouden van een UserID
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)
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();
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";
}
?>
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
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
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');
}
?>
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
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
Onjuiste gegvevens
dit zijn de velden die ik heb ik de tabel 'users'
UID type voornaam tussenvoegsel achternaam gebruikersnaam wachtwoord
PHP Scripter op 11/04/2012 14:15:20:
- 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! ;-)
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
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');
}
?>
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?
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
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');
}
?>
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
ik mis btw nog steeds foutafhandeling.
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
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 :)
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.
Verder is een simpele foutafhandeling van je query's zo gemaakt.
Code (php)
1
2
3
4
5
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.
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