help blowfish
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
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['username'] == NULL) {
$login_error = "username is fout";
}
if ($_POST['password'] == NULL) {
$login_error = "password is fout";
}
$query = $mysqli->query("SELECT * FROM users WHERE username='".$mysqli->real_escape_string($_POST['username'])."' LIMIT 1");
if ($query->num_rows == 1) {
$row = $query->fetch_assoc();
if (!password_verify($_POST['password'],$row['password'])) {
header('Refresh: 5; url=index.php');
}
$_SESSION['loggedin'] = TRUE;
$_SESSION['username'] = $_POST['username'];
$_SESSION['uid'] = $row['id'];
Header("location: member.php");
} else {
echo "user bestaat niet";
}
}
?>
<html>
<head>
<title>Inloggen</title>
</head>
<body>
<form method="POST">
<?php if(isset($username) == TRUE){ echo $username; }else{echo "username";}?>: <input type="text" name="username"><br>
<?php if(isset($password) == TRUE){ echo $password; }else{echo "password";}?>: <input type="password" name="password"><br>
<input type="submit" value="<?php echo "login " ?>"><br>
</form>
</body>
</html>
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['username'] == NULL) {
$login_error = "username is fout";
}
if ($_POST['password'] == NULL) {
$login_error = "password is fout";
}
$query = $mysqli->query("SELECT * FROM users WHERE username='".$mysqli->real_escape_string($_POST['username'])."' LIMIT 1");
if ($query->num_rows == 1) {
$row = $query->fetch_assoc();
if (!password_verify($_POST['password'],$row['password'])) {
header('Refresh: 5; url=index.php');
}
$_SESSION['loggedin'] = TRUE;
$_SESSION['username'] = $_POST['username'];
$_SESSION['uid'] = $row['id'];
Header("location: member.php");
} else {
echo "user bestaat niet";
}
}
?>
<html>
<head>
<title>Inloggen</title>
</head>
<body>
<form method="POST">
<?php if(isset($username) == TRUE){ echo $username; }else{echo "username";}?>: <input type="text" name="username"><br>
<?php if(isset($password) == TRUE){ echo $password; }else{echo "password";}?>: <input type="password" name="password"><br>
<input type="submit" value="<?php echo "login " ?>"><br>
</form>
</body>
</html>
Hier is een nettere versie, geen zin om foutafhandeling nog netter te maken dan dit.
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
40
41
42
43
44
45
46
47
48
49
50
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
40
41
42
43
44
45
46
47
48
49
50
<?php
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['username'], $_POST['password'])) {
$stmt = $mysqli->prepare('SELECT password FROM users WHERE username=? LIMIT 1');
if ($stmt === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->bind_result($hash);
$fetched = $stmt->fetch();
if ($fetched === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
if ($fetched) {
if (password_verify($_POST['password'], $hash)) {
$_SESSION['loggedin'] = TRUE;
$_SESSION['username'] = $_POST['username'];
$_SESSION['uid'] = $row['id'];
header("location: member.php");
exit;
} else {
echo 'username/wachtwoord combinatie incorrect'; // liever opslaan en netjes in de html zetten?
}
} else {
echo "user bestaat niet"; // zie bovenstaand
}
}
?>
<html>
<head>
<title>Inloggen</title>
</head>
<body>
<form method="POST">
username: <input type="text" name="username" value="<?php if(isset($username)) { echo $username; } ?>" /><br />
password: <input type="password" name="password" /><br />
<input type="submit" value="login"><br />
</form>
</body>
</html>
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['username'], $_POST['password'])) {
$stmt = $mysqli->prepare('SELECT password FROM users WHERE username=? LIMIT 1');
if ($stmt === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->bind_result($hash);
$fetched = $stmt->fetch();
if ($fetched === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
if ($fetched) {
if (password_verify($_POST['password'], $hash)) {
$_SESSION['loggedin'] = TRUE;
$_SESSION['username'] = $_POST['username'];
$_SESSION['uid'] = $row['id'];
header("location: member.php");
exit;
} else {
echo 'username/wachtwoord combinatie incorrect'; // liever opslaan en netjes in de html zetten?
}
} else {
echo "user bestaat niet"; // zie bovenstaand
}
}
?>
<html>
<head>
<title>Inloggen</title>
</head>
<body>
<form method="POST">
username: <input type="text" name="username" value="<?php if(isset($username)) { echo $username; } ?>" /><br />
password: <input type="password" name="password" /><br />
<input type="submit" value="login"><br />
</form>
</body>
</html>
Toevoeging op 27/09/2014 21:26:43:
is dit $fetched ook gelijk als je om uit de db te halen?
De query selecteert alleen het password veld. $stmt->bind_result($hash) bind het veld wachtwoord aan de variabele $hash.
$stmt->fetch(); fetchet de volgende (de enige) rij waarna $hash bruikbaar is.
$hash wordt gebruikt op regel 24.
Voor de mogelijke return waarden van Mysqli::bind_result() zie http://php.net/manual/en/mysqli-stmt.fetch.php
Dos Moonen op 27/09/2014 22:10:02:
$stmt->bind_result(...) (even veel variabele als geselecteerde kolommen (PS. star select zuigt omdat je niet weet hoeveel dat er zijn)) zorgt er voor dat telkens wanneer je $stmt->fetch() aan roept de volgende rij in de opgegeven variabelen gezet wordt.
De query selecteert alleen het password veld. $stmt->bind_result($hash) bind het veld wachtwoord aan de variabele $hash.
$stmt->fetch(); fetchet de volgende (de enige) rij waarna $hash bruikbaar is.
$hash wordt gebruikt op regel 24.
Voor de mogelijke return waarden van Mysqli::bind_result() zie http://php.net/manual/en/mysqli-stmt.fetch.php
De query selecteert alleen het password veld. $stmt->bind_result($hash) bind het veld wachtwoord aan de variabele $hash.
$stmt->fetch(); fetchet de volgende (de enige) rij waarna $hash bruikbaar is.
$hash wordt gebruikt op regel 24.
Voor de mogelijke return waarden van Mysqli::bind_result() zie http://php.net/manual/en/mysqli-stmt.fetch.php
en die S?
Toevoeging op 27/09/2014 22:46:44:
en als ik daar wat anders uit db wil halen moet ik dan een nieuwe query maken?
https://www.youtube.com/watch?v=nLinqtCfhKY
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// nieuwe regel 5
$stmt = $mysqli->prepare('SELECT uid, password FROM users WHERE username=? LIMIT 1');
// nieuwe regel 15
$stmt->bind_result($uid, $hash);
//nieuwe regel 27
$_SESSION['uid'] = $uid;
?>
// nieuwe regel 5
$stmt = $mysqli->prepare('SELECT uid, password FROM users WHERE username=? LIMIT 1');
// nieuwe regel 15
$stmt->bind_result($uid, $hash);
//nieuwe regel 27
$_SESSION['uid'] = $uid;
?>
Gewijzigd op 27/09/2014 23:43:06 door Dos Moonen
Dos Moonen op 27/09/2014 23:42:12:
https://www.youtube.com/watch?v=nLinqtCfhKY
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
kan der ook gwn * staan?
Toevoeging op 27/09/2014 23:50:55:
Kenny iets op 27/09/2014 23:47:10:
kan der ook gwn * staan?
nee dus
Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in
Toevoeging op 27/09/2014 23:54:13:
heb nu dit
ik heb hem echt verkloot xd
Dos Moonen op 27/09/2014 23:42:12:
https://www.youtube.com/watch?v=nLinqtCfhKY
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
De s geeft aan dat de parameter die je bind een string is.
Als je meer velden wilt selecteren zoals uid, die ik blijkbaar over het hoofd heb gezien. Moet je inderdaad de query aanpassen.
kan der ook gwn * staan?
nee dus
Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in
Toevoeging op 27/09/2014 23:54:13:
heb nu dit
ik heb hem echt verkloot xd
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['username'], $_POST['password'])) {
$stmt = $mysqli->prepare('SELECT * FROM user WHERE username=? LIMIT 1');
if ($stmt === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->bind_result($username, $password, $id, $hash);
$fetched = $stmt->fetch();
if ($fetched === FALSE){
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
if ($fetched) {
if (password_verify($_POST['password'], $hash)) {
$_SESSION['loggedin'] = "pizza";
$_SESSION['username'] = $_POST['username'];
echo $id;
echo "hallo";
exit;
} else {
echo 'username/wachtwoord combinatie incorrect'; // liever opslaan en netjes in de html zetten?
}
} else {
echo "user bestaat niet"; // zie bovenstaand
}
}
?>
<html>
<head>
<title>titel?</title>
<link rel="stylesheet" type="text/css" href="index.css" />
</head>
<body>
<div id="header">
<div id="links">
<img src="http://www.catalogs.com/info/bestof/wp-content/uploads/2011/09/62.jpg" width="172" height="100" align="center" />
</div>
<div id="midden">
</div>
<div id="rechts">
<form action="index.php" method="POST">
<?php echo $langusername; ?>:<br />
<input type="text" placeholder="gebruikersnaam" name="username" /><br />
Wachtwoord:<br />
<input type="password" name="password" placeholder="wachtwoord" /><br />
<input type="submit"id="login" value="login">
<input type='hidden' name='hidden' value=1>
</form>
</div>
</div>
<div class="clear"></div><!-- clear -->
<div id="footer" >
pizza met pereroni
</div>
</body>
</html>
require "config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['username'], $_POST['password'])) {
$stmt = $mysqli->prepare('SELECT * FROM user WHERE username=? LIMIT 1');
if ($stmt === FALSE) {
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->bind_result($username, $password, $id, $hash);
$fetched = $stmt->fetch();
if ($fetched === FALSE){
exit('er is een interne fout opgetreden, probeer het later nog eens');
}
if ($fetched) {
if (password_verify($_POST['password'], $hash)) {
$_SESSION['loggedin'] = "pizza";
$_SESSION['username'] = $_POST['username'];
echo $id;
echo "hallo";
exit;
} else {
echo 'username/wachtwoord combinatie incorrect'; // liever opslaan en netjes in de html zetten?
}
} else {
echo "user bestaat niet"; // zie bovenstaand
}
}
?>
<html>
<head>
<title>titel?</title>
<link rel="stylesheet" type="text/css" href="index.css" />
</head>
<body>
<div id="header">
<div id="links">
<img src="http://www.catalogs.com/info/bestof/wp-content/uploads/2011/09/62.jpg" width="172" height="100" align="center" />
</div>
<div id="midden">
</div>
<div id="rechts">
<form action="index.php" method="POST">
<?php echo $langusername; ?>:<br />
<input type="text" placeholder="gebruikersnaam" name="username" /><br />
Wachtwoord:<br />
<input type="password" name="password" placeholder="wachtwoord" /><br />
<input type="submit"id="login" value="login">
<input type='hidden' name='hidden' value=1>
</form>
</div>
</div>
<div class="clear"></div><!-- clear -->
<div id="footer" >
pizza met pereroni
</div>
</body>
</html>
http://www.phphulp.nl/php/forum/topic/help-blowfish/95944/3/#689833:
star select zuigt omdat je niet weet hoeveel [velden] er zijn
Een sterretje selecteert alle velden uit de tabel.
Als dat 42 velden zijn moet je ook 42 variabele in bind_result() stoppen...
Wanneer je een veld toevoegt of weghaalt uit de tabel moet je ook de code weer aanpassen.
Een sterretje heeft de volgende 'voordelen':
- de query is iets kleiner
en de volgende nadelen
- je moet véél meer typen doordat elk veld door een variabele gerepresenteerd moet worden in bind_result()
- ook al voeg je een veld toe / verwijder/verplaats je een veld dat helemaal niets met je login script te maken heeft dan moet je nog steeds je login script aanpassen. (en mogelijk andere scripts waar je het zelfde doet
Alleen de juiste velden selecteren heeft de volgende voordelen:
- blijft werken als je velden toevoegt/verwijderd/verplaats die niets met inloggen te maken hebben
- je haal alleen op wat je nodig hebt
- minder typen
- je haalt meer informatie op uit de database dan nodig
en het volgende 'nadeel'
- de query is iets langer doordat deze specifieker is
Dus JA, het kan. Maar je bent dom bezig als je het doet.
Waarom wil je trouwens de username uit de database halen? Je hebt die al.
Het enige wat je nodig hebt in de bcrypt hash (ik ging er vanuit dat je deze opslaat in een veld genaamd 'password') en de primary key (waarschijnlijk een veld genaamd 'id') is ook wel fijn.
De select query en bind_result() moeten de zelfde volgorde gebruiken. Doe je dat niet dan komt de data niet in de juiste variabele te staan, PHP kan je gedachten namelijk niet lezen. Als het dat kon zouden we niet hoeven te programmeren, alleen denken aan wat we willen.