Door
Simon Brink
op 03-04-2014 11:33
gewijzigd op 03-04-2014 11:38
2.596 views
Situatie
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:)
<?
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);
Als beginner is het goed om gelijk de goede manier van programmeren te leren.
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.
<?php
session_start();
include('../config.php');
$query = "
SELECT
id,
email,
name,
password
FROM
accounts
WHERE
name = '" . mysql_real_escape_string($_SESSION['name']) . "'
";
De kolom 'name' komt voor in tabel 'accounts'. Begrijp je tweede vraag niet helemaal maar wat ik denk dat je bedoelt is [quote]
<?php
if($count==1){
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
include ('../panel/index.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]<?php
array(3) { ["name"]=> string(4) "name" ["password"]=> string(8) "password" ["id"]=> NULL }
?>
Groet,
Simon
[size=xsmall]Toevoeging op 03/04/2014 13:10:43:[/size]
Dit is de check die me website uitvoert wanneer een gebruiker probeert in te loggen.
<?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;>";
}
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.
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