Gegevens weergeven van ingelogde gebruiker
Ik ben op dit moment bezig met het maken van een registratie / login systeem. Dit werkt allemaal, de gebruikers kunnen zowel registeren als inloggen tevens onthoud de database de gebruiker die een account aanmaakt.
Echter zo het mooi zijn dat wanneer de gebruiker wil inloggen leek het mij leuk om zijn gegevens te weergeven. Nou heb ik het een en andere gevonden en het werkt ook maar toch weergeeft hij die gegevens niet.
Mijn vraag is wat gaat er mis en eventueel tips? Ik ben nog beginnend:)
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
include('../config.php');
$userdata = $_SESSION['name'];
$query = "SELECT id, email, name, password FROM accounts WHERE name = '$userdata'";
$result = mysql_query($query) or die (mysql_error());
$record = mysql_fetch_array($result);
$id = $record['id'];
$name = $record['name'];
echo "<b><br />Hello ".$name.", welcome to Web!<br /></b>";
echo "<br /><br ><a href=../login/logout.php><input type=button value= Logout></a>";
echo " ".$id." Hello ".$name." ";
?>
include('../config.php');
$userdata = $_SESSION['name'];
$query = "SELECT id, email, name, password FROM accounts WHERE name = '$userdata'";
$result = mysql_query($query) or die (mysql_error());
$record = mysql_fetch_array($result);
$id = $record['id'];
$name = $record['name'];
echo "<b><br />Hello ".$name.", welcome to Web!<br /></b>";
echo "<br /><br ><a href=../login/logout.php><input type=button value= Logout></a>";
echo " ".$id." Hello ".$name." ";
?>
Groet,
Simon
Gewijzigd op 03/04/2014 11:38:49 door Simon Brink
Je gebruikt een verouderde functie mysql_* die op termijn komt te vervallen.
Gebruik in deze plaats mysqli of PDO.
Je code is gevoelig voor SQL injection (Genoeg over te vinden) omdat je nu kwaadaardige code met je SESSION['name'] kan meesturen. Hiervoor heb je functies als mysql(i)_real_escape_string
Gebruik geen die() maar een foutafhandeling die jou zegt wat er fout is gegaan.
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
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
<?php
session_start();
include('../config.php');
$query = "
SELECT
id,
email,
name,
password
FROM
accounts
WHERE
name = '" . mysql_real_escape_string($_SESSION['name']) . "'
";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
$record = mysql_fetch_assoc($result);
echo '<b><br />Hello ' . $record['name'] . ', welcome to Web!<br /></b>';
echo '<br /><br ><a href="../login/logout.php"><input type="button" value="Logout"></a>';
echo $record['id'] . " Hello " . $record['name'];
} else {
echo 'Er is niemand gevonden met de naam ' . htmlentities($_SESSION['name']);
}
} else {
echo 'Er is een fout opgetreden';
echo '<br />' . mysql_error();
}
?>
session_start();
include('../config.php');
$query = "
SELECT
id,
email,
name,
password
FROM
accounts
WHERE
name = '" . mysql_real_escape_string($_SESSION['name']) . "'
";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
$record = mysql_fetch_assoc($result);
echo '<b><br />Hello ' . $record['name'] . ', welcome to Web!<br /></b>';
echo '<br /><br ><a href="../login/logout.php"><input type="button" value="Logout"></a>';
echo $record['id'] . " Hello " . $record['name'];
} else {
echo 'Er is niemand gevonden met de naam ' . htmlentities($_SESSION['name']);
}
} else {
echo 'Er is een fout opgetreden';
echo '<br />' . mysql_error();
}
?>
Hij weergeeft de echo 'Er is niemand gevonden met de naam name'. Betekent dit dat hij de kolom name niet herkent?
Groet,
Simon
Als je de volgende regel op regel 4 van bovenstaand script zet, wat krijg je dan terug?
Gewijzigd op 03/04/2014 12:11:24 door Michael -
Quote:
Dit is een deel van de login script wat uitgevoerd wordt wanneer een gebruiker succesvol is ingelogd. Hij include de pagina waar de persoonlijke gegevens worden weergeven althans dat is de bedoeling:).
Ik heb de code op regel 4 toegevoegd en kreeg het volgende resultaat:
Code (php)
Dit is een deel van de login script wat uitgevoerd wordt wanneer een gebruiker succesvol is ingelogd. Hij include de pagina waar de persoonlijke gegevens worden weergeven althans dat is de bedoeling:).
Ik heb de code op regel 4 toegevoegd en kreeg het volgende resultaat:
Quote:
Groet,
Simon
Toevoeging op 03/04/2014 13:10:43:
Dit is de check die me website uitvoert wanneer een gebruiker probeert in te loggen.
Groet,
Simon
Code (php)
1
2
3
2
3
<?php
array(3) { ["name"]=> string(4) "name" ["password"]=> string(8) "password" ["id"]=> NULL }
?>
array(3) { ["name"]=> string(4) "name" ["password"]=> string(8) "password" ["id"]=> NULL }
?>
Groet,
Simon
Toevoeging op 03/04/2014 13:10:43:
Dit is de check die me website uitvoert wanneer een gebruiker probeert in te loggen.
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
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
<?php
include('../config.php');
// Define $name and $mypassword
$name = $_POST['name'];
$mypassword = $_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$name = stripslashes($name);
$mypassword = stripslashes($mypassword);
$name = mysql_real_escape_string($name);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE name='$name' and password='$mypassword'";
$result = mysql_query($sql) or die(mysql_error());
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $name and $mypassword, table row must be 1 row
if($count==1){
// Register $name, $mypassword and redirect to file "login_success.php"
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
include ('../panel/index.php');
}
else {
echo "The username or password is incorrect.";
echo "<br><br><input Type=button value=Return onClick=history.go(-1);return true;>";
}
?>
include('../config.php');
// Define $name and $mypassword
$name = $_POST['name'];
$mypassword = $_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$name = stripslashes($name);
$mypassword = stripslashes($mypassword);
$name = mysql_real_escape_string($name);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE name='$name' and password='$mypassword'";
$result = mysql_query($sql) or die(mysql_error());
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $name and $mypassword, table row must be 1 row
if($count==1){
// Register $name, $mypassword and redirect to file "login_success.php"
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
include ('../panel/index.php');
}
else {
echo "The username or password is incorrect.";
echo "<br><br><input Type=button value=Return onClick=history.go(-1);return true;>";
}
?>
Groet,
Simon
Gewijzigd op 03/04/2014 13:05:03 door Simon Brink
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
?>
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
?>
Hier zet je dus de tekst "name" in $_SESSION['name'] en de tekst "password" in $_SESSION['password']
Als je hier het gebruikersnaam van de ingelogde user wilt hebben is het denk ik voldoende om het zo aan te passen
$_SESSION['name'] = $name;
Sla nooit een wachtwoord op in een session! Zo maak je het wel heel makkelijk voor onbevoegden.
Groet,
Simon
Quote:
Dit werkt allemaal, de gebruikers kunnen zowel registeren als inloggen tevens onthoud de database de gebruiker die een account aanmaakt.
Bedoel je daarmee dat men zich kan registreren en daarna direct kan inloggen, zonder enige form van acceptatie van de beheerder of webmaster?
Is dat wel veilig zo? Want dan kan iedereen erin goedschiks dan wel kwaadschiks