Kan iemand mij AUB helpen met het maken van een login in php dit is wat ik al heb.

Een form


<!-- De login form -->
<div class="container mt-5">
	<h3>Login</h3>
	<form method="post" action"login.php" name="login">
	  <div class="form-group">
		<label for="gebruikersnaam">Gebruikersnaam</label>
		<input type="text" name="gebruikersnaam" class="form-control" aria-describedby="emailHelp" placeholder="Voer uw gebruikersnaam in">
	  </div>
	  <div class="form-group">
		<label for="wachtwoord">Password</label>
		<input type="password" name="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
	  </div>
	  <button name="submit" type="submit" value="login" class="btn btn-primary">Submit</button>
	</form>	
</div>	


de sessie waar die naar toe gaat


<?php

    require('config.php')

    session_start();

    $username = trim($_POST['gebruikersnaam']);
    $password = trim($_POST['password']);

    

?>
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.
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?".
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.
@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.
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.
Kun je foutmeldingen plaatsen? Het is makkelijker om je op weg te helpen met foutmeldingen.

Of is het al opgelost?
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: ...');.
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);


// 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);
        }
    }
    ?>


[size=xsmall]Toevoeging op 25/05/2018 13:07:33:[/size]

Tja ik kreeg advies van vorige reactie dat ik eerst die benaming met dubbele quotes moest omzeilen en dan nog enkele quotes erin.
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.

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 ([color=#ff0000]expects parameter 1 to be mysqli, object given[/color]). Deze functie retourneert dus de laatste fout van een specifieke database-connectie.

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:
$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 ([color=#ff0000]expects parameter 2 to be string, object given[/color]).

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.

Reageren