Login met php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

- Ariën  -
Beheerder

- Ariën -

24/05/2018 10:49:41
Quote Anchor link
Hopelijk lukt het nu.
 
PHP hulp

PHP hulp

07/05/2024 15:22:05
 
Bart V B

Bart V B

24/05/2018 17:30:19
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query
= mysqli_query($mysqli, "SELECT * FROM 'studenten' WHERE naam='$username'
        AND password='$password'"
);
?>


moet worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query
= mysqli_query($mysqli, "SELECT * FROM studenten WHERE naam='".$username."'
        AND password='"
.$password."'");
?>
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 17:31:18
Quote Anchor link
En dan zou ik het wachtwoord ook nog zeker hashen!!!
Plain text is niet meer van deze tijd!
 
Izildo Pimentel

Izildo Pimentel

25/05/2018 01:01:13
Quote Anchor link
Kreeg deze error, en spuugt ook een array uit, zag de verandering van de query, dacht dat het daar aan lag maar de error blijft staan, iets over mij row variablen.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 01:15:58
Quote Anchor link
mysqli_num_rows() verwacht een result te krijgen van een mysqli_query(), echter krijgt deze een boolean door.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
        // 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 -
 
Izildo Pimentel

Izildo Pimentel

25/05/2018 01:56:03
Quote Anchor link
Snap je punt, zie nu 1 2 3 niet de oplossing, ben er al hele dag mee bezig, kijk er morgen weer naar.
Heb wel gechecked op query error met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_error($query);

Maar kreeg alleen : mysqli_error() expects parameter 1 to be mysqli, boolean given in.
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 01:59:50
Quote Anchor link
Kijk eens naar mysqli_error
En dan bij de parameters:
Quote:
link
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 -
 
Izildo Pimentel

Izildo Pimentel

25/05/2018 09:11:21
Quote Anchor link
Weet er geen raad meer mee.

- query aangepast
- errors zijn weg
- debug regels laten staan
- database klopt
kan alsnog niet inloggen, dit is mijn query nu.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);


misschien dat de begin stuk van mijn index pagina niet klopt?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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]
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 09:12:55
Quote Anchor link
Lees per functie nou maar eens de manual door over hoe je het gebruikt. En ook de reacties die we hiervoor gaven.

Je lijkt steeds in dezelfde gaten te vallen.
Gewijzigd op 25/05/2018 09:17:09 door - Ariën -
 
Jan te Pas

Jan te Pas

25/05/2018 09:50:33
Quote Anchor link
Hint:
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
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 10:15:56
Quote Anchor link
Ik raad Izildo aan om eens eerst de eisen netjes te documenteren, die wij in zijn topics hebben gegeven.

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 -
 
Davier doe

Davier doe

25/05/2018 10:53:24
Quote Anchor link
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?".
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 11:00:20
Quote Anchor link
Met zulke dus als PHPcodechecker is niks mis, maar als je een goede editor gebruikt, zoals PHPstorm of NetBeans IDE (gebruik ik), dan zie je ook de fouten en aanbevelingen.

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 -
 
Davier doe

Davier doe

25/05/2018 11:04:49
Quote Anchor link
@Arien,

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.
 
Izildo Pimentel

Izildo Pimentel

25/05/2018 11:39:26
Quote Anchor link
Tja heb helaas gewoon geen tijd nu om documentatie te bekijken of weer opnieuw te beginnen. Dat doe ik als ik genoeg tijd.
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 11:43:44
Quote Anchor link
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.
 
Davier doe

Davier doe

25/05/2018 12:40:36
Quote Anchor link
Kun je foutmeldingen plaatsen? Het is makkelijker om je op weg te helpen met foutmeldingen.

Of is het al opgelost?
 
Thomas van den Heuvel

Thomas van den Heuvel

25/05/2018 12:54:39
Quote Anchor link
Het probleem is waarschijnlijk (nog steeds) dat @Izildo tabel- en kolomnamen voorziet van 'normale quotes'. Dit levert een foutmelding op. Gebruik voor tabel- en kolomnamen `backticks` of gewoon geen aanhalingstekens en gebruik 'enkele quotes' om waarden te omvatten. In combinatie hiermee zou je real_escape_string() moeten gebruiken.

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: ...');.
 
Izildo Pimentel

Izildo Pimentel

25/05/2018 13:05:41
Quote Anchor link
Warning: mysqli_error() expects parameter 1 to be mysqli, object given in on line 26 --> mysqli_error($query);

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)
PHP script in nieuw venster Selecteer het PHP script
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
// 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);
        }
    }
    ?>



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
 
Thomas van den Heuvel

Thomas van den Heuvel

25/05/2018 13:31:02
Quote Anchor link
Ik zou je aanraden de foutmeldingen te "leren lezen". De documentatiesite van PHP kan hier ook bij helpen. Je kunt een functiedefinitie rechtstreeks opsnorren door php.net/<functienaam> in je browser te gooien.

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. Maar het moment dat je die functie daar aanroept snijdt geen hout omdat je daar nog niets gedaan hebt, en dus ook nog geen fout gemaakt kan hebben. Het argument dat deze functie verwacht is het connectie-object, niet het resultaat-object van een query. Dit is *precies* wat de foutmelding verkondigt (expects parameter 1 to be mysqli, object given). Deze functie retourneert dus de laatste fout van een specifieke database-connectie.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "SELECT * FROM admins WHERE naam='$username' AND password='$password'";

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
 

Pagina: « vorige 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.