Login met php
Pagina: « vorige 1 2 3 volgende »
Hopelijk lukt het nu.
Code (php)
1
2
3
4
2
3
4
<?php
$query = mysqli_query($mysqli, "SELECT * FROM 'studenten' WHERE naam='$username'
AND password='$password'");
?>
$query = mysqli_query($mysqli, "SELECT * FROM 'studenten' WHERE naam='$username'
AND password='$password'");
?>
moet worden:
Plain text is niet meer van deze tijd!
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in.
dat is de lijn met $rows = mysqli_num_rows($query);
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
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
<?php
// Start de sessie
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Vereist config
require('config.php');
// Variablen voor error bericht
$error=''; // Variable voor opslaan van errors
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password']))
{
$error = "Username or Password is invalid";
}
else
{
// Globale variablen
$username = trim($_POST['username']);
$password = trim($_POST['password']);
// MySQl injectie beschermen
$username = stripslashes($username);
$password = stripslashes($password);
// Query selecten
$query = mysqli_query($mysqli, "SELECT * FROM 'admins' WHERE naam = '".$username."' AND password = '".$password."'");
$rows = mysqli_num_rows($query);
if($rows == 1){
// Redirect user to index.php
header("Location: index.php");
exit();
}
else
{
$error = "credentials not good";
}
mysqli_close($mysqli);
}
}
?>
<?php
// declareren
function escape($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
function dump($array) {
?><pre><?php echo escape(print_r($array, true)); ?></pre><?php
}
// aanroepen
dump($_POST);
?>
// Start de sessie
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Vereist config
require('config.php');
// Variablen voor error bericht
$error=''; // Variable voor opslaan van errors
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password']))
{
$error = "Username or Password is invalid";
}
else
{
// Globale variablen
$username = trim($_POST['username']);
$password = trim($_POST['password']);
// MySQl injectie beschermen
$username = stripslashes($username);
$password = stripslashes($password);
// Query selecten
$query = mysqli_query($mysqli, "SELECT * FROM 'admins' WHERE naam = '".$username."' AND password = '".$password."'");
$rows = mysqli_num_rows($query);
if($rows == 1){
// Redirect user to index.php
header("Location: index.php");
exit();
}
else
{
$error = "credentials not good";
}
mysqli_close($mysqli);
}
}
?>
<?php
// declareren
function escape($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
function dump($array) {
?><pre><?php echo escape(print_r($array, true)); ?></pre><?php
}
// aanroepen
dump($_POST);
?>
Je query zal dus ergens stuk zijn, en een false teruggeven. Zorg voor goede foutafhandeling op je mysqli_query. Echo je query anders eens, en voer de data eens aan phpMyAdmin of welke mysql-client je maar gebruikt.
En dit is dus grote onzin:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// MySQl injectie beschermen
$username = stripslashes($username);
$password = stripslashes($password);
?>
// MySQl injectie beschermen
$username = stripslashes($username);
$password = stripslashes($password);
?>
Lees anders deze en je vorige topic eens terug.
Gewijzigd op 25/05/2018 01:17:07 door - Ariën -
Heb wel gechecked op query error met
Maar kreeg alleen : mysqli_error() expects parameter 1 to be mysqli, boolean given in.
mysqli_error
En dan bij de parameters:
Dus $query is sowieso fout.
Als je iets niet weet omdat PHP zegt dat hij wat anders verwacht, sla dan de manual open.
Kijk eens naar En dan bij de parameters:
Quote:
link
Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()
Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()
Dus $query is sowieso fout.
Als je iets niet weet omdat PHP zegt dat hij wat anders verwacht, sla dan de manual open.
Gewijzigd op 25/05/2018 02:01:13 door - Ariën -
- query aangepast
- errors zijn weg
- debug regels laten staan
- database klopt
kan alsnog niet inloggen, dit is mijn query nu.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
// Query selecten
$query = ("SELECT * FROM admins WHERE naam='".$username."' AND password='".$password."'");
mysqli_connect_error();
mysqli_error($query);
// Voer de query uit
$result = mysqli_query($mysqli, $query);
// Controleer of de login correct
$rows = mysqli_num_rows($result);
$query = ("SELECT * FROM admins WHERE naam='".$username."' AND password='".$password."'");
mysqli_connect_error();
mysqli_error($query);
// Voer de query uit
$result = mysqli_query($mysqli, $query);
// Controleer of de login correct
$rows = mysqli_num_rows($result);
misschien dat de begin stuk van mijn index pagina niet klopt?
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('config.php'); // De login script
if(isset($_SESSION['username'])){
header("location: index.php");
}
?>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
</head>
<body>
<?php
if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){
header("Location: loginform.php");
}
?>
<?php
[/code]
session_start();
include('config.php'); // De login script
if(isset($_SESSION['username'])){
header("location: index.php");
}
?>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
</head>
<body>
<?php
if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){
header("Location: loginform.php");
}
?>
<?php
[/code]
Ik zie dat je verkeerde aanhalingstekens gebruikt, en verschillend in een query. Niet slim. Dit bijvoorbeeld: '".$password."' En je sluit weer af met dubbele apostrofe.
Check je code eens op dit soort gekke fouten bij http://phpcodechecker.com
Aan de hand daarvan kan je op een schoon vel op de ontwerptafel het script opnieuw opbouwen. Met 'debugging' en 'trial and error' in achtneming.
Met roekeloos copy en paste bereik je niks.
Gewijzigd op 25/05/2018 10:17:15 door - Ariën -
Je kunt prima debuggen met var_dump of error_reporting. Dat soort website wat Jan plaatste is een soort van "Hoe houd ik mezelf dom?".
Ikzelf gebruik regelmatig wel eens 3v4l.org (eval, voor wie het nog niet zag) als ik een stukje code wil uittesten voor het 'even snel'.
Bij het echte werk heb ik mijn lokale webserver en NetBeans IDE.
Gewijzigd op 25/05/2018 11:00:41 door - Ariën -
In jouw geval kan ik dat wel begrijpen, maar voor beginners is het beter om zelf fouten te ontdekken en leren begrijpen.
PHPStorm is inderdaad een prima editor, al heb ik voorkeur aan Notepad++.
Netbeans IDE gebruik ik meestal voor Java.
Tja heb helaas gewoon geen tijd nu om documentatie te bekijken of weer opnieuw te beginnen. Dat doe ik als ik genoeg tijd.
Dan zou ik uitstel aanvragen, als ik jouw was. Een script opbouwen zonder dat je weet wat het doet, is vragen om problemen en mogelijk een lage beoordeling.
Of is het al opgelost?
En zoals eerder aangegeven, header('Location: ...'); stopt de verdere executie van code niet. Daarom is het eigenlijk altijd zaak dat er een exit;-statement volgt op een header('Location: ...');.
Warning: mysqli_query() expects parameter 2 to be string, object given in on line 29 --> $result = mysqli_query($mysqli, $query);
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in on line 32 --> $rows = mysqli_num_rows($result);
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
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
// Variablen voor error bericht
$error=''; // Variable voor opslaan van errors
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password']))
{
$error = "Username or Password is invalid";
}
else
{
// Globale variablen
$username = trim($_POST['username']);
$password = trim($_POST['password']);
// Query selecten
$query = mysqli_query($mysqli, "SELECT * FROM admins WHERE naam='$username' AND password='$password'");
mysqli_connect_error($query);
mysqli_error($query);
// Voer de query uit
$result = mysqli_query($mysqli, $query);
// Controleer of de login correct
$rows = mysqli_num_rows($result);
if($rows == 1){
// login correct, start de sessie
session_start();
// sla de username op in de sessie
$_SESSION['username'] = $username;
// Redirect user to index.php
header("Location: index.php");
}
else
{
$error = "credentials not good";
exit();
}
mysqli_close($mysqli);
}
}
?>
$error=''; // Variable voor opslaan van errors
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password']))
{
$error = "Username or Password is invalid";
}
else
{
// Globale variablen
$username = trim($_POST['username']);
$password = trim($_POST['password']);
// Query selecten
$query = mysqli_query($mysqli, "SELECT * FROM admins WHERE naam='$username' AND password='$password'");
mysqli_connect_error($query);
mysqli_error($query);
// Voer de query uit
$result = mysqli_query($mysqli, $query);
// Controleer of de login correct
$rows = mysqli_num_rows($result);
if($rows == 1){
// login correct, start de sessie
session_start();
// sla de username op in de sessie
$_SESSION['username'] = $username;
// Redirect user to index.php
header("Location: index.php");
}
else
{
$error = "credentials not good";
exit();
}
mysqli_close($mysqli);
}
}
?>
Toevoeging op 25/05/2018 13:07:33:
Tja ik kreeg advies van vorige reactie dat ik eerst die benaming met dubbele quotes moest omzeilen en dan nog enkele quotes erin.
Gewijzigd op 25/05/2018 13:10:03 door Izildo Pimentel
Quote:
Warning: mysqli_error() expects parameter 1 to be mysqli, object given in on line 26 --> mysqli_error($query);
Dit vindt op regel 18 plaats in het bovenstaande fragment, niet op regel 26. Het helpt als je volledige fragmenten plaatst met de bijbehorende foutmeldingen, anders wordt het nogal een puzzel...
mysqli_error() retourneert een tekstuele omschrijving van de laatste fout die optrad, of een lege string als er geen fout was.
Quote:
Warning: mysqli_query() expects parameter 2 to be string, object given in on line 29 --> $result = mysqli_query($mysqli, $query);
Op regel 15 voer je de query al uit, zou dat niet gewoon:
moeten zijn?
Vervolgens voer je -in je huidige opzet- het resultaat weer aan een query, dat gaat natuurlijk niet werken want mysqli_query() verwacht als tweede parameter de hierboven genoemde SQL-string en niet een resultaat-object. Dit is *precies* wat de foutmelding omschrijft (expects parameter 2 to be string, object given).
Quote:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in on line 32 --> $rows = mysqli_num_rows($result);
Dit is een gevolg van de vorige foutmelding. Als je die oplost, zal deze ook verdwijnen.
Gewijzigd op 25/05/2018 13:42:45 door Thomas van den Heuvel