Login met php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Izildo Pimentel

Izildo Pimentel

24/05/2018 08:50:08
Quote Anchor link
Kan iemand mij AUB helpen met het maken van een login in php dit is wat ik al heb.

Een form

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
<!-- 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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

    require('config.php')

    session_start();

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

    

?>
 
PHP hulp

PHP hulp

26/04/2024 20:53:00
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:08:09
Quote Anchor link
Is dit soms een huiswerkopdracht?

Ik zal de stappen van een inlog-actie in stappen uitleggen:

- Controleer eerst of er ge-POST is met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
?>


- controleer of de waardes zijn ingevuld
- Zorg dat je het wachtwoord hasht met password_hash, deze wil je NIET open en bloot opslaan!)
- controleer met password_verify of het wachtwoord klopt. Controleer tevens met mysqli_num_rows of de username klopt.
- Denk aan SQL-injection, en escape je username. Je wachtwoord is niet nodig, omdat die altijd gehashed zal zijn, en niet met een injection te forceren is.
- Profit: De ingevoerde gegevens komen overeen. Zorg ervoor dat je een sessie aanmaakt met bijvoorbeeld het ID-nummer van de gebruiker.

Verder is dit best een basaal voorbeeld, maar er zijn tal van andere dingen om het inloggen veiliger te maken, zoals session_regenerate_id om tussentijds je SessionID te veranderen om het kaper ervan onmogelijk te maken.
Gewijzigd op 24/05/2018 09:11:37 door - Ariën -
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 09:10:22
Quote Anchor link
heb dit van een tut, maar wanneer ik inlog gebeurd er niks zelfs met een extra line code voor extra check boven laat die niks zien, behalve in the url balk zegt die not secure.

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
<?php
    
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    // Vereist config
    require('config.php')

    // Start de sessie
    session_start();

    // Variablen voor error bericht
    $error=''; // Variable To Store Error Message
    if (isset($_POST['submit'])) {
    if (empty($_POST['username']) || empty($_POST['password']))
    {

        $error = "Username or Password is invalid";
    }

    else
    {

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

    // MySQl injectie beschermen
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);

    // Database selected
    $db = mysql_select_db("studenten", $connection);

    // Query van database uitlezing
    $query = mysql_query("select * from studenten where password='$password' AND naam='$username'", $connection);

    $rows = mysql_num_rows($query);

    if ($rows == 1)
    {

        $_SESSION['login_user']=$username; // Sessie intialiseren
        header("location: index.php"); // Redirecten naar andere pagina
        } else {
        $error = "Username or Password is invalid";
        }

        mysql_close($connection); // Connectie sluiten
        }
    }

?>
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:13:26
Quote Anchor link
Zal wel komen omdat het nog functies uit de verouderde mysql-driver gebruikt.
Gebruik liever MySQLi (makkelijker) of PDO (wat lastiger)

En lees ook mijn stappenplan, want dit inlogscript slaat wachtwoorden onbeveiligd op!!!!!!

Ik zou ook zeker een SSL-verbinding aanraden. Let's Encrypt is gratis, als je webhosting dat ondersteunt!
Gewijzigd op 24/05/2018 09:15:34 door - Ariën -
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 09:26:35
Quote Anchor link
Zal ik zeker doen maar nu is het een beetje met spoed, omdat ik bezig ben met examen opdracht en login is waar ik vast loop vandaar.
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:30:20
Quote Anchor link
Haastige spoed is zelden goed ;-)
Als het maar goed en veilig is gebouwd, dan komt alles goed!
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 09:35:44
Quote Anchor link
Nou ben wel aan het stressen want het werkt niet en zie ook geen errors...
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:38:11
Quote Anchor link
Welke code heb je nu precies? Wat werkt er niet aan?Ik heb toch echt een hoop tips gegeven om ervopr te zorgen dat je een veilig inlogsysteem hebt. Het spreekt voor sich dat ik uiteraard geen kant en klare code geef ;-)
Gewijzigd op 24/05/2018 09:39:29 door - Ariën -
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 09:40:26
Quote Anchor link
Je had het over verouderd msql heb ik nu verander naar msqli maar browser geeft nog steeds aan unsecure en kan maar niet inloggen ook geen errors

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
<?php
    
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    // Vereist config
    require('config.php')

    // Start de sessie
    session_start();

    // Variablen voor error bericht
    $error=''; // Variable To Store Error Message
    if (isset($_POST['submit'])) {
    if (empty($_POST['username']) || empty($_POST['password']))
    {

        $error = "Username or Password is invalid";
    }

    else
    {

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

    // MySQl injectie beschermen
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysqli_real_escape_string($username);
    $password = mysqli_real_escape_string($password);


     $query = "SELECT * FROM 'studenten' WHERE naam='$username'
    and password='$password'"
;

    $result = mysqli_query($con,$query) or die(mysqli_error());

    $rows = mysqli_num_rows($result);
        if($rows==1){
        $_SESSION['gebruikersnaam'] = $username;
            // Redirect user to index.php
        header("Location: index.php");
         }
    }
}

?>
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:43:32
Quote Anchor link
Je zult nu als het goed is een error zien, waarbij blijkt dat er op lijn 7 een ; mist.
Gewijzigd op 24/05/2018 09:44:55 door - Ariën -
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 09:56:55
Quote Anchor link
Is er misschien iets mis met mijn loginform, want hij zegt elke keer dat het niet secure in in de url.
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
<?php

session_start()

?>

<!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>
    
    
    
<!-- 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>    
      
<!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>

  </body>
</html>
Gewijzigd op 24/05/2018 09:59:07 door Izildo Pimentel
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 09:58:27
Quote Anchor link
Zegt je browser dat? Dan zal dat wel komen dat er geen SSL-certificaat aan je domein hangt.
Gewijzigd op 24/05/2018 09:59:35 door - Ariën -
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 10:01:21
Quote Anchor link
Is dat dan de reden dat ik niet kan inloggen?
 
Thomas van den Heuvel

Thomas van den Heuvel

24/05/2018 10:02:22
Quote Anchor link
Je zegt "kan maar niet inloggen". Waaruit blijkt dit? Krijg je een foutmelding? Is op andere pagina's $_SESSION['gebruikersnaam'] onbekend? Iets anders?

Geef de query eens weer op het scherm, en knip en plak deze in een tool waarmee met je met je database kunt praten (phpMyAdmin of rechtstreeks in de console) en kijk of je resultaat krijgt?

Bouw wat breekpunten in of geef wat tekst weer op het scherm als in code aan bepaalde condities is voldaan zodat je weet welk pad de code kiest om uitgevoerd te worden, dit stuurt je mogelijk richting enige fout die aanwezig kan zijn.

Wat opmerkingen:
- na een header('Location: ...'); hoort meestal een exit; te staan, omdat het zelden tot nooit de bedoeling is dat er daarna nog code wordt uitgevoerd, een header stuurt je niet meteen automagisch naar de nieuwe locatie
- elke pagina waar je een sessie wilt starten of voort wil zetten dient altijd te beginnen met session_start(), daarna kun je $_SESSION gebruiken
- password is een gereserveerd woord in MySQL, als je deze in een query wilt gebruiken doe je er verstandig aan om deze kolom te omvatten met `backticks`, of wellicht beter, om een andere naam voor deze kolom te kiezen
- SQL-injectie voorkom je niet door stripslashes(), de enige veilige combinatie in deze opzet is gebruikmaking van de real_escape_string() functie/methode in combinatie met 'quotes', het een is niet veilig zonder het ander
Gewijzigd op 24/05/2018 10:04:33 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 10:03:28
Quote Anchor link
Dat staat er los van.
Ik zou eerder kijken wat er precies gebeurd, en welke stappen er wel en niet worden doorlopen.
Met andere woorden... debug je script eens door na elke gebeurtenis een echo te plaatsen, en kijk eens wat er precies gebeurd.

Je script is verder gezien de syntax correct.
Errors zou je ook moeten zien.
Gewijzigd op 24/05/2018 10:07:14 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

24/05/2018 10:08:53
Quote Anchor link
Het zou zelfs zoiets kunnen zijn als een sessie-directory die niet schrijfbaar is ofzo, maar ja, eerst moet er een soort van stapsgewijze analyse plaatsvinden zodat het probleem vastgesteld kan worden, daarna kan je gaan kijken naar oplossingen.

EDIT: bijvoorbeeld, als je na het verzenden van het loginformulier niet wordt doorgestuurd naar index.php houdt dit simpelweg in dat niet voldaan is aan de conditie dat er één resultaatrij voor de query was. Dat kan weer inhouden dat er géén resultaten waren, of méér dan één (staan er toevallig records dubbel in de logintabel?). Het is vaak een kwestie van uitzoeken waar het schip precies strandt, en dan terugwandelen om te zien waar deze precies op de rotsen liep :p.
Gewijzigd op 24/05/2018 10:13:23 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 10:10:07
Quote Anchor link
De error wijst je daarom altijd de weg, zolang je die maar ergens ziet of logt. (laatste is beter in de praktijk).
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 10:10:26
Quote Anchor link
Is het goed dat ik name gebruik in mijn loginform? of moet dat een id zijn?
 
- Ariën  -
Beheerder

- Ariën -

24/05/2018 10:13:56
Quote Anchor link
Maar je zegt dat het niet werkt, maar waar blijkt dat nou uit?
name en ID zijn twee verschillende dingen. Met name identificeert je een formulierveld voor formulierafhandelingen.
Gewijzigd op 24/05/2018 10:15:23 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

24/05/2018 10:16:49
Quote Anchor link
Dat is allemaal prima, ook zou je de $_POST informatie kunnen inspecteren in login.php door deze naar het scherm te sturen met wat hulpfuncties:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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);
?>

EDIT: controleer even het gebruik van $_POST['username'] (regel 15) versus $_POST['gebruikersnaam'] (regel 23), dat klopt niet helemaal.
Gewijzigd op 24/05/2018 10:29:35 door Thomas van den Heuvel
 
Izildo Pimentel

Izildo Pimentel

24/05/2018 10:47:49
Quote Anchor link
if empty post gebruikersnaam is de naam van mijn textbox veld die hij moet uitlezen. en dan maak ik een variable aan waar ik de gebruikersnaam opsla in $username.

mijn code nu ik heb breaks gebruikt, boven aan een error check en jou functie erbij.

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php  
    // Start de sessie
    session_start();

    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    // Vereist config
    require('config.php');


    debugBreak(error);
    // Variablen voor error bericht
    $error=''; // Variable To Store Error Message
    if (isset($_POST['submit'])) {
        if (empty($_POST['gebruikersnaam']) || empty($_POST['password']))
        {

            $error = "Username or Password is invalid";
        }

        else
        {

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

        // MySQl injectie beschermen
        $username = stripslashes($username);
        $password = stripslashes($password);
        $username = mysqli_real_escape_string($username);
        $password = mysqli_real_escape_string($password);

        // Select de database
        $db = msqli_select_db($msqli, "studenten");

        debugBreak(error);
        // Query selecten
        $query = mysqli_query($mysqli, "SELECT * FROM 'studenten' WHERE naam='$username'
        AND password='$password'"
);
        
        debugBreak(error);
        $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);
?>
 

Pagina: 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.