Login check username!
Laatst was ik al bezig met een Login script maar dat ging gewoon niet en ben het nu weer opnieuw aan het proberen. Nu heb ik een tutorial gevonden op internet. Weten jullie misschien of dit een goeie tutorial is?
Login Script Tutorial
Ik zelf heb dit ervan gemaakt misschien zien jullie bij mij al een fout.
Hoop dat jullie me kunnen helpen:D
login.php
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
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
<?php
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
$user = trim(mysqli_real_escape_string($connection, $_POST['username']));
$password = crypt(trim(mysqli_real_escape_string($connection, $_POST['password'])));
if($user && $password){
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
$cehckuser = mysqli_num_rows($query);
if($checkuser == 1){
while($row = mysqli_fetch_array($user)){
$checkpass = $row['password'];
if($pass == $checkpass){
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location:".$_SERVER['PHP_SELF']);
exit();
}else{
echo '<div class="errorbox">This password doesn\'t match with this username!</div>';
}
}
}else{
echo '<div class="errorbox">Username does not exist!</div>';
}
}else{
echo '<div class="errorbox">Fill in all fields!</div>';
}
}
?>
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
$user = trim(mysqli_real_escape_string($connection, $_POST['username']));
$password = crypt(trim(mysqli_real_escape_string($connection, $_POST['password'])));
if($user && $password){
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
$cehckuser = mysqli_num_rows($query);
if($checkuser == 1){
while($row = mysqli_fetch_array($user)){
$checkpass = $row['password'];
if($pass == $checkpass){
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location:".$_SERVER['PHP_SELF']);
exit();
}else{
echo '<div class="errorbox">This password doesn\'t match with this username!</div>';
}
}
}else{
echo '<div class="errorbox">Username does not exist!</div>';
}
}else{
echo '<div class="errorbox">Fill in all fields!</div>';
}
}
?>
ipv Select * (alles) kun je beter gewoon de velden invullen die je wilt hebben.
Punten die eerder allemaal als verbetering zijn gegeven zie ik nou allemaal niet meer.
en bij SELECT deed ik ook eerst username, password maar dacht dat dat fout was.
Toevoeging op 11/03/2014 13:56:41:
En error reporting staat gewoon aan.
Toevoeging op 11/03/2014 13:57:35:
En misschien dat iemand me kan uitleggen wat dit is? met die cookies, Dit was ik nog vergeten erbij te ztten.
Code (php)
GEEN, ik herhaal misschien dat het dan een keer wordt opgepikt, GEEN mysql_real_escape_string over een password halen als je dat daarna gaat hashen/encrypten. Als je dat doet heb je echt geen enkel idee waar die functie voor dient en wat je aan het doen bent. En dat heb ik ook al een keer eerder opgemerkt.
P.S. in dit geval wordt het nog erger, omdat je $password niet eens gebruikt in je query!
Gewijzigd op 11/03/2014 13:58:37 door Erwin H
Dat stond zo in de tutorial dus ik dacht misschien moet het hier wel bij:S
Precies, je hebt dus geen idee wat je aan het doen bent.... Dat is nog wel je grootste probleem. Als je namelijk niet gaat leren waarom je iets doet zal het nooit iets worden. De grootste problemen, bugs en beveiligingslekken komen omdat mensen maar iets doen, maar niet weten waarom of hoe.
Ja en daarom leer ik nog. Ik ben niet zo heel lang bezig en ben dingen aan het proberen!
Bijna elke mysqli functie geeft een resource terug (als de select query in dit geval gelukt is), of een boolean (false) als dat niet het geval is. Check daarop, zodat je maatregelen kan treffen als er iets mis gaat, anders krijg je fatal errors op je scherm.
Mathieu, Wat Erwin wil zeggen is dat je nu allerlei dingen overal en nergens vandaan haalt, het aan elkaar plakt en je dan gaat afvragen waarom het niet werkt. Als je begrijpt waar je mee bezig bent kom je een stuk verder. Als je een functie ziet die je niet kent, zoek deze dan op op php.net.
En @Erwin Ik heb fout meldingen aangegeven.!
Zie onderaan met de else statementen
>>>> Zie onderaan met de else statementen
Dat is foutafhandeling op de query zoals Erwin bedoelt. Je hebt geen idee wat er fout gaat als je query het ineens niet meer doet.
Dat is de tutorial die ik je heb gegeven toch? Ik hoorde geloof ik toen al dat het toch niet zo'n goede was. Anders zou ik eerst wat maken dat werkt, en daarna gaan kijken naar veiligheid etc.
Mathieu Posthumus op 11/03/2014 14:06:27:
En @Erwin Ik heb fout meldingen aangegeven.!
Zie onderaan met de else statementen
Zie onderaan met de else statementen
NEE!
Code (php)
1
2
3
4
2
3
4
<?php
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
$cehckuser = mysqli_num_rows($query);
?>
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
$cehckuser = mysqli_num_rows($query);
?>
Als je query mislukt zal de waarde van $query false worden. De volgende regel waarin je het aantal rijen probeert uit te lezen zal dan mislukken. $query is dan namelijk geen resource en dus zal je een error krijgen dat 'mysqli_num_rows expects resource, boolean given'. Deze error vang je NIET op.
Gewijzigd op 11/03/2014 14:19:45 door Erwin H
Toevoeging op 11/03/2014 14:20:23:
Jaap je hebt idd gelijk ik heb eff gekeken pffffff
Toevoeging op 11/03/2014 14:26:22:
Nu heb ik dus (denk ik) het goed aangepast voor de fouten
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
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
<?php
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
$user = trim(mysqli_real_escape_string($connection, $_POST['username']));
$password = crypt(trim($_POST['password']));
if($user != "" || $password != ""){
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
if(!$query == false){
$cehckuser = mysqli_num_rows($query);
if($checkuser != 1){
while($row = mysqli_fetch_array($user)){
$checkpass = $row['password'];
if($pass == $checkpass){
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location: index.php");
exit();
}else{
echo '<div class="errorbox">This password doesn\'t match with this username!</div>';
}
}
}else{
echo '<div class="errorbox">Username does not exist!</div>';
}
}else{
echo '<div class="errorbox">Query doesn\'t work anymore!</div>';
}
}else{
echo '<div class="errorbox">Fill in all fields!</div>';
}
}
?>
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
$user = trim(mysqli_real_escape_string($connection, $_POST['username']));
$password = crypt(trim($_POST['password']));
if($user != "" || $password != ""){
$query = mysqli_query($connection, "SELECT * FROM accounts WHERE username = '".$user."'");
if(!$query == false){
$cehckuser = mysqli_num_rows($query);
if($checkuser != 1){
while($row = mysqli_fetch_array($user)){
$checkpass = $row['password'];
if($pass == $checkpass){
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location: index.php");
exit();
}else{
echo '<div class="errorbox">This password doesn\'t match with this username!</div>';
}
}
}else{
echo '<div class="errorbox">Username does not exist!</div>';
}
}else{
echo '<div class="errorbox">Query doesn\'t work anymore!</div>';
}
}else{
echo '<div class="errorbox">Fill in all fields!</div>';
}
}
?>
Je hebt nog een slash verkeerd in je echo bij doesn\'t
Jaap welke echo dan? want ik heb maar 2x die slash gebruikt en dat gaat goed
Hoezo zet je daar een slash dan? Je kan toch gewoon don't schrijven.
Nee want dan sluit ie de echo string
Aangezien $query alleen maar een boolean is als het mislukt, zal $query nooit true worden (in dat geval is het een resource). !$query is dus eigenlijk incorrect, omdat je er dan vanuit gaat dat het true of false is. Logischer is om te controleren of het niet gelijk aan false is op deze manier:
Weet ook het verschil tussen != en !== overigens.
Maar Dit is niet hetgene wat er effect op zal hebben
Mathieu Posthumus op 11/03/2014 14:32:43:
Nee want dan sluit ie de echo string
Das een goeie.