Log in systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Pagina: 1 2 volgende »

Sem Bakker

Sem Bakker

30/03/2020 20:00:57
Quote Anchor link
Hallo,

Ik ben net begonnen met php (al wel bekend met andere talen) en wil een inlogsysteem maken met mySQL en met een aanmeld form en een log uit knop. Ik heb al wat geprobeerd maar ik krijg telkens een fout te zien. Dit inlog systeem komt in een webapp dus gebruik ik ook jquery. Het volgende is wat ik al heb:

aanmelden.php:
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
<html>
    <head>
        <title> Aanmelden </title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta charset="UTF-8">
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
        <style>
           .alaangemeld{
             text-align:center;
           }
           a{
                 text-decoration: none;
           }
           .hier{
                 color: #fbc406;
           }
          
        </style>
    </head>
    <body>
        <h1 style="text-align:center;"> Aanmelden </h1>
        <form action="aanmelden.inc.php" method="post" data-ajax="false">
            <input type="text" name="mail" value="" placeholder="E-mail">
            <input type="password" name="ww" placeholder="Wachtwoord">
            <input type="password" name="wwhh" placeholder="Herhaal wachtwoord">
            <button type="submit" name="signup-verzend">Aanmelden</button>
        </form>
        <br>
        <div class="alaangemeld">
           <p> Al aangemeld? Klik dan <a href="login.php"><span class="hier">hier</span></a></p>
        </div>
    </body>
</html


aanmelden.inc.php:
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
70
71
72
73
74
75
<?php
session_start();

require "../includes/connect.php"; //hier wordt verbinding gemaakt met de database phpmyAdmin
$errors = 0;
$mail = "";

if(isset($_POST['signup-verzend'])){
    $mail = $_POST['mail'];
    $ww = $_POST['ww'];
    $wwhh = $_POST['wwhh'];


    // checken voor fouten in invoer    
    if(empty($mail)) {
        $errors = $errors + 1;  
    }

    if(empty($ww)) {
        $errors = $errors + 1;
    }

    if(empty($wwhh)) {
        $errors = $errors + 1;
    }

    if($ww !== $wwhh) {
        $errors = $errors + 1;
    }


    if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
        $errors = $errors + 1;
    }

    
    //kijken of er al iemand is met dezelfde mail
    $mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
    $stmt = $conn->prepare($mailQuery);
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();
    $mailCount = $result->num_rows;
    $stmt->close();

    if($mailcount > 0){
        $errors = $errors + 1;
    }


    if(count($errors === 0)) {
        $wwSecure = password_hash($ww, PASSWORD_DEFAULT);
        $token = bin2hex(random_bytes(50));
        $verified = false;

        $sql ="INSERT INTO gb (mail, ww, verified, token, ww) VALUES (?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
        
        if($stmt->execute()){
            //log automatisch in
            $gb_id = $connect->insert_id;
            $_SESSION['id'] = $gb_id;
            $_SESSION['mail'] = $mail;
            $_SESSION['verified'] = $verified;

            //een bericht instellen
            header("Location:geslaagd.html");
            exit();

        }
else{
            $errors = $errors + 1;
        }
    }
else(count($errors > 0)){
        header("Location:signup.php/?error=ErIsIetsFoutIngevuld");
        exit();
    }
 }
else{
    header("Location:signup.php");
 }

?>


geslaagd.html:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p> U bent aangemeld!</p>
</body>
</html>


login.php:
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
<html>
    <head>
        <title> Inloggen </title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta charset="UTF-8">
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
        <style>
           .alaangemeld{
             text-align:center;
           }
           a{
                 text-decoration: none;
           }
           .hier{
                 color: #fbc406;
           }
          
        </style>
    </head>
    <body>
        <h1 style="text-align:center;"> Inloggen </h1>
        <form action="login.inc.php" method="post" data-ajax="false">
            <input type="text" name="mail" value="" placeholder="E-mail">
            <input type="password" name="ww" placeholder="Wachtwoord">
            <button type="submit" name="signup-verzend">Log in</button>
        </form>
        <br>
        <div class="alaangemeld">
           <p> Nog niet aangemeld? Klik dan <a href="aanmelden.php"><span class="hier">hier</span></a></p>
        </div>
    </body>
</html>


Voor login.inc.php heb ik nog niets en weet ook nog niet hoe dit moet. Ik wil eerst ervoor kunnen zorgen dat je kan aanmelden in de website. Ik heb een tutorial gevolgd op youtube dus het zou kunnen dat ik wat heb overgenomen heb en niet heb verklaard, zou u dit ook kunnen vertellen wat ik zou moeten toevoegen, aanpassen, etc.?

Ik hoop dat u mij snapt en mij kan helpen! Ik zie uw bericht graag!

PS: Ik gebruik PHP versie 7.3 op mijn server met de volgende extensies: bcmath, dom, fileinfo, gd, intl, ioncube_loader, json, mbstring,mcrypt, mysqlnd, nd_mysqli, pdo, pdo_mysql, pdo_sqlite, phar, posix, soap, sockets, xmlwriter, xmlreader, xsl, zip



,groetjes Sem
Gewijzigd op 30/03/2020 20:29:21 door - Ariën -
 
PHP hulp

PHP hulp

28/12/2024 08:56:03
 
- Ariën  -
Beheerder

- Ariën -

30/03/2020 20:03:07
Quote Anchor link
Kan je je code tussen code-tags plaatsen?
Dat leest wat makkelijker.
 
Sem Bakker

Sem Bakker

30/03/2020 20:07:48
Quote Anchor link
Hi, thx voor de snelle reactie. Ik heb het in de code-tags gezet!
Gewijzigd op 30/03/2020 20:10:23 door Sem Bakker
 
- Ariën  -
Beheerder

- Ariën -

30/03/2020 20:30:38
Quote Anchor link
Wat heb je al geprobeerd? En waar loop je op vast?

Heb je al gekeken naar password_verify ?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/03/2020 20:47:54
Quote Anchor link
Weet je zeker dat er op regel 68 een else moet staan?

Waarom maak je van $errors geen array?

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

if(strlen($mail) == 0) {
    $errors[] = 'U moet een email adres opgeven';
}


// controleren of er errors zijn..
if(count($errors)) {
   // er zijn fouten
}
?>


Pas op met de empty() functie die geeft TRUE als $email = '0'; gebruik liever strlen()

Toevoeging op 30/03/2020 20:49:28:

Gebruik ook een php editor, bijvoorbeeld Netbeans.
 
Ivo P

Ivo P

30/03/2020 21:28:50
Quote Anchor link
regel 50
$sql ="INSERT INTO gb (mail, ww, verified, token, ww) VALUES (?, ?, ?, ?)";

5 kolommen en daar ga je 4 waarden in stoppen?

En sowieso lijkt het 2x gebruiken van dezelfde kolomnaam me fout.

Toevoeging op 30/03/2020 21:49:49:

" Ik heb al wat geprobeerd maar ik krijg telkens een fout te zien. "

Afgezien van die ene melding in het hebreews zijn de meeste foutmeldingen wel vrij duidelijk.
Maar dan moet je hem lezen.
en eventueel ook hier delen.

PHP zegt eigenlijk nooit "error, zoek het maar uit"
 
- SanThe -

- SanThe -

31/03/2020 08:47:29
Quote Anchor link
if(count($errors === 0))

($errors === 0) geeft true of false.
En dat ga je tellen met count()?
 
Sem Bakker

Sem Bakker

31/03/2020 09:11:45
Quote Anchor link
Frank Nietbelangrijk op 30/03/2020 20:47:54:
Weet je zeker dat er op regel 68 een else moet staan?

Waarom maak je van $errors geen array?

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

if(strlen($mail) == 0) {
    $errors[] = 'U moet een ander email adres opgeven';
}


// controleren of er errors zijn..
if(count($errors)) {
   // er zijn fouten
}
?>


Pas op met de empty() functie die geeft TRUE als $email = '0'; gebruik liever strlen()

Toevoeging op 30/03/2020 20:49:28:

Gebruik ook een php editor, bijvoorbeeld Netbeans.


Hi, bedankt. Moet ik dus regel 68 veranderen naar een array. Ik zal het doen! Danku!
Als programma gebruik ik nu Visual Studio Code. Wat doet NetBeans dan beter?
Gewijzigd op 31/03/2020 09:12:42 door Sem Bakker
 
- Ariën  -
Beheerder

- Ariën -

31/03/2020 09:24:46
Quote Anchor link
Dat optellen is nu nergens voor nodig. Je geeft nu per gefaalde validatie een error mee aan je array.

Daar hebben mensen ook wat meer aan.
Ik zou zelf behoorlijk gefrustreerd raken als ik iets fout heb ingevuld, terwijl ik geen flauw idee heb wát ik fout heb ingevuld. ;-)

Geef bij foute inlogpogingen wel enkel weer de melding: "Inloggen mislukt", en niet apart of je username fout is, en of het password fout is. Je wilt niemand wat wijzer maken. ;-)
Gewijzigd op 31/03/2020 09:28:35 door - Ariën -
 
Sem Bakker

Sem Bakker

31/03/2020 09:43:34
Quote Anchor link
** knip **

Nee inderdaad je hebt gelijk, lijkt me best frustrerend. Ik heb het volgende gemaakt en weet niet zeker of dit voldoet aan alle regels en wellicht kan het wel makkelijker.

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
session_start();

require "../includes/connect.php";
$errors = array(); //errors tellen
$mail = "";

if(isset($_POST['signup-verzend'])){
    $mail = $_POST['mail'];
    $ww = $_POST['ww'];
    $wwhh = $_POST['wwhh'];


    // checken voor fouten in invoer  
    // kijken of e-mail niet leeg is  

    if(empty($mail)) {
        header("Location:../signup.php?error=eMailIsLeeg");
        exit();
    }

    //kijken of wachtwoord niet ingevuld is
    if(empty($ww)) {
        header("Location:../signup.php?error=WachtwoordIsLeeg");
        exit();
    }

    //kijken of wachtwoordherhaal niet ingevuld is
    if(empty($wwhh)) {
        header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
        exit();
    }

    //kijken of de twee ww hetzelfde zijn
    if($ww !== $wwhh) {
        header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
        exit();
    }

    //kijken of het een geldig e-mail adres is
    if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
        header("Location:../signup.php?error=eMailNietGeldig");
        exit();
    }

    
    //kijken of er al iemand is met dezelfde mail
    $mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
    $stmt = $conn->prepare($mailQuery);
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();
    $mailCount = $result->num_rows;
    $stmt->close();

    //als er meerdere accounts bestaan moet er een error komen
    if($mailcount > 0){
        $errors = $errors + 1;
        header("Location:../signup.php?error=EmailAlBekend");
        exit();
    }

    
    //als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
    if(strlen($errors) == 0)) {
        $wwSecure = password_hash($ww, PASSWORD_DEFAULT);
        $token = bin2hex(random_bytes(50));
        $verified = false;
    
        //persoon toevoegen aan database
        $sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
        
        if($stmt->execute()){
            //log automatisch in
            $gb_id = $connect->insert_id;
            $_SESSION['id'] = $gb_id;
            $_SESSION['mail'] = $mail;
            $_SESSION['verified'] = $verified;

            //een bericht instellen
            $_SESSION['message'] = "U bent ingelogd!";
            header("Location:../");
            exit();

          //een of andere manier niet gelukt om de gebruiker toe te voegen aan database
        } else{
            header("Location:../signup.php?error=ToevoegenAanDbMislukt");
            exit();
        }
    }
}

//als je op deze site komt niet via signup.php dan word je naar home gestuurd
else{
    header("Location:../");
}


?>


Edit:
Het integraal quoten van het eerste voorgaande bericht is niet nodig.
Gewijzigd op 31/03/2020 09:46:36 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

31/03/2020 09:48:06
Quote Anchor link
Ja, waarom geen array's en je foutmeldingen verzamelen?

Steeds maar weer los tonen is behoorlijk vervelend, waarbij de gebruiker steeds maar heen en weer moet klikken.
Gewijzigd op 31/03/2020 09:49:27 door - Ariën -
 
Sem Bakker

Sem Bakker

31/03/2020 09:49:23
Quote Anchor link
Wat bedoelt u?
Gewijzigd op 31/03/2020 09:49:51 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

31/03/2020 09:50:41
Quote Anchor link
Zie mijn rode modedit ^ en Frank zijn bericht van 20:47.
Gewijzigd op 31/03/2020 09:51:26 door - Ariën -
 
Sem Bakker

Sem Bakker

31/03/2020 10:00:47
Quote Anchor link
In principe hoef ik toch niet nog een count voor de errors en dan te zeggen er is een fout. Aangezien er bij elke error al "exit();" wordt gedaan.

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
session_start();

require "../includes/connect.php";
$errors = array[]; //errors tellen
$mail = "";

if(isset($_POST['signup-verzend'])){
    $mail = $_POST['mail'];
    $ww = $_POST['ww'];
    $wwhh = $_POST['wwhh'];


    // checken voor fouten in invoer  
    // kijken of e-mail niet leeg is  

    if(empty($mail)) {
        header("Location:../signup.php?error=eMailIsLeeg");
        exit();
    }

    //kijken of wachtwoord niet ingevuld is
    if(empty($ww)) {
        header("Location:../signup.php?error=WachtwoordIsLeeg");
        exit();
    }

    //kijken of wachtwoordherhaal niet ingevuld is
    if(empty($wwhh)) {
        header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
        exit();
    }

    //kijken of de twee ww hetzelfde zijn
    if($ww !== $wwhh) {
        header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
        exit();
    }

    //kijken of het een geldig e-mail adres is
    if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
        header("Location:../signup.php?error=eMailNietGeldig");
        exit();
    }

    
    //kijken of er al iemand is met dezelfde mail
    $mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
    $stmt = $conn->prepare($mailQuery);
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();
    $mailCount = $result->num_rows;
    $stmt->close();

    //als er meerdere accounts bestaan moet er een error komen
    if($mailcount > 0){
        $errors = $errors + 1;
        header("Location:../signup.php?error=EmailAlBekend");
        exit();
    }

    
    //als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
    if(count($errors) == 0)) {
        $wwSecure = password_hash($ww, PASSWORD_DEFAULT);
        $token = bin2hex(random_bytes(50));
        $verified = false;
    
        //persoon toevoegen aan database
        $sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
        
        if($stmt->execute()){
            //log automatisch in
            $gb_id = $connect->insert_id;
            $_SESSION['id'] = $gb_id;
            $_SESSION['mail'] = $mail;
            $_SESSION['verified'] = $verified;

            //een bericht instellen
            $_SESSION['message'] = "U bent ingelogd!";
            header("Location:../");
            exit();

          //een of andere manier niet gelukt om de gebruiker toe te voegen aan database
        } else{
            header("Location:../signup.php?error=ToevoegenAanDbMislukt");
            exit();
        }
    }

//als je op deze site komt niet via signup.php dan word je naar home gestuurd
}else{
    header("Location:../");
}


?>
Gewijzigd op 31/03/2020 10:07:31 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

31/03/2020 10:07:42
Quote Anchor link
Een exit; na een fout?

Stel: Jij bent op visite, en je gooit per ongeluk een vaas om. Loop je dan ook zomaar weg om het huis van je vriend te verlaten? :-D

Nee, exit; is hier NOOIT de oplossing. Je script moet juist NIET stoppen en gewoon netjes doorgaan.

Wel hoort er een exit; na een location-header. Maar location-headers zijn weer niet de oplossing om foutmeldingen te tonen.

- Je verzamelt eerst alle foutmeldingen in je array.
- Je telt deze
- Is het aantal hoger dan 0: "Er is iets niet ingevuld" en toon alle fouten.
Is het aantal 0: Hoera! Alles is goed ingevuld. Ga door met het proces en voeg de data toe.
Gewijzigd op 31/03/2020 10:11:13 door - Ariën -
 
Sem Bakker

Sem Bakker

31/03/2020 10:10:41
Quote Anchor link
Ik heb nog een vraag. Ik heb nu namelijk allemaal verwijzingen bij elke error. Dus dan zou de gebruiker moeten kijken in de URL bij een webapp al helemaal onwaarschijnlijk. Hoe kan ik een message laten zien in de signup.php die in de signup.inc.php wordt gevormd?

Als je het onderstaande doet creëer je volgens mij alleen een pop-up in de signup.php, maar deze moet alleen ontstaan als de message nodig is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
function function_alert($message) {
      
    // Display the alert box  
    echo "<script>alert('$message');</script>";
}


Toevoeging op 31/03/2020 10:12:21:

- Ariën - op 31/03/2020 10:07:42:
Een exit; na een fout?

Stel: Jij bent op visite, en je gooit per ongeluk een vaas om. Loop je dan ook zomaar weg om het huis van je vriend te verlaten? :-D

Nee, exit; is hier NOOIT de oplossing. Je script moet juist NIET stoppen en gewoon netjes doorgaan.

Wel hoort er een exit; na een location-header. Maar location-headers zijn weer niet de oplossing om foutmeldingen te tonen.

- Je verzamelt eerst alle foutmeldingen in je array.
- Je telt deze
- Is het aantal hoger dan 0: "Er is iets niet ingevuld" en toon alle fouten.
Is het aantal 0: Hoera! Alles is goed ingevuld. Ga door met het proces en voeg de data toe.


Ooooohhh ik snap hem! Ahh dankuwel. Het is natuurlijk handig om te weten welke fouten je allemaal hebt als je er meerdere hebt. De exit moet dus weg bij alle errors. Maar wat moet er voor in de plaats komen van de
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header("location:/signup.php?error=.....")
Gewijzigd op 31/03/2020 10:14:24 door Sem Bakker
 
- Ariën  -
Beheerder

- Ariën -

31/03/2020 10:15:23
Quote Anchor link
Maar waarom verwijs je dan bij elke error?
Wat is dat de reden van? Het is overigens ook een potentieel risico voor phishing.

Iemand kan een fake-site maken om je logins te onderscheppen, om vervolgens naar www.jouwsite.nl/?error=LogInFout te linken.

De gebruiker ziet dat het fout gaat, maar denkt gelukkig toch op jouw site ingelogd te zijn, wat niet zo is.

Dus geen location-headers, maar je array steeds verder opbouwen. Het stappenplan heb ik al geschreven net.
Gewijzigd op 31/03/2020 10:17:12 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

31/03/2020 16:37:56
Quote Anchor link
Het is wel een goede gewoonte om na de validatie en/of verwerking van een POST te redirecten.

Dat zou inhouden dat je de informatie, of in ieder geval zoveel mogelijk informatie, op een of andere manier zult moeten onthouden om deze weer terug in het formulier te plaatsen, dit is ook een stukje gebruiksvriendelijkheid, zodat iemand die een fout maakt niet elke keer alles opnieuw hoeft in te vullen. Dit (onthouden en terugplaatsen) zou je kunnen bewerkstelligen door gebruikmaking van een sessie.

Dit is dus ook een uitgelezen moment om na te gaan denken over de algemene structuur van je webpagina/-applicatie en hoe je hier doorheen navigeert. Vooral wanneer jouw applicatie veel formulieren bevat is het belangrijk -en het bespaart je later ook enorm veel tijd- om dit proces te stroomlijnen.

En als je een aanzienlijke hoeveelheid / heel veel formulieren hebt is het mogelijk zelfs interessant om een apart formuliersysteem te bouwen. Maar soms kan het ook handig zijn om hier geen gebruik van te maken, ingeval het zeer specialistische formulieren betreft, zoals bijvoorbeeld een login- of zoekformulier. Maar die gevallen vormen dan de uitzondering op de regel.

EDIT: ook is het verstandig om na te denken over hoe je informatie structureert in je sessie. Nu stop je "id", "mail" en "verified" los in je sessie, waarom?
"id" zal nodig zijn om een gebruiker te identificeren
"mail" is afleidbaar
"verified" is nogal zinloos (te meer deze waarde false blijft na registratie?), stop gewoon niets in je sessie als er niets "geverifieerd" is, jij hebt de controle over je sessie.

Maar dan wil je niet dat formulierdata "botst" met deze user data, of nog erger, dat je door een hack in je formulier het "id" veld zou kunnen overschrijven ofzo. Je zult dus verschillende segmenten in je sessie moeten creëren. Bijvoorbeeld $_SESSION['form'] als "root" (tis nog steeds geen boom :p) / uitgangspunt voor al jouw formulieren.
Gewijzigd op 31/03/2020 17:03:02 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/03/2020 18:40:01
Quote Anchor link
>> Als programma gebruik ik nu Visual Studio Code. Wat doet NetBeans dan beter?

Al denk ik misschien van wel, kan het niet hard maken omdat ik Visual Studio Code niet ken (of misschien van heel vroeger). Het punt waarom ik het zei is omdat Netbeans bij mij direct een rode markering liet zien op die else statement.

Met andere woorden zit een goede PHP editor vol vernuft om jou te helpen. En als er dit soort slordigheidjes blijken te zijn dan is het vaak zo dat er geen php editor gebruikt wordt.

Toevoeging op 31/03/2020 18:46:44:

Zoals Arien al verteld heeft moet je een gebruiker juist wijzen op een invoerfout en natuurlijk niet gelijk je programma afbreken. Het voordeel van de fouten toevoegen aan een array is dat je deze dan netjes kunt laten zien aan de gebruikers.

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
<?php
$errors
= [];

if(strlen($mail) == 0) {
    $errors[] = 'U moet een ander email adres opgeven';
}

?>


<!-- ERGENS TUSSEN DE HTML: -->

<!-- controleren of er errors zijn en dan netjes weergeven -->
<?php if(count($errors)): ?>
   <div class="alert alert-warning">
      <ul>
         <?php foreach($errors as $error): ?>
            <li><?php echo $error; ?></li>
         <?php endforeach; ?>
      </ul>
   </div>
<?php endif; ?>
Gewijzigd op 31/03/2020 18:49:48 door Frank Nietbelangrijk
 
Sem Bakker

Sem Bakker

31/03/2020 18:54:46
Quote Anchor link
Thomas van den Heuvel op 31/03/2020 16:37:56:
Het is wel een goede gewoonte om na de validatie en/of verwerking van een POST te redirecten.

Dat zou inhouden dat je de informatie, of in ieder geval zoveel mogelijk informatie, op een of andere manier zult moeten onthouden om deze weer terug in het formulier te plaatsen, dit is ook een stukje gebruiksvriendelijkheid, zodat iemand die een fout maakt niet elke keer alles opnieuw hoeft in te vullen. Dit (onthouden en terugplaatsen) zou je kunnen bewerkstelligen door gebruikmaking van een sessie.

Dit is dus ook een uitgelezen moment om na te gaan denken over de algemene structuur van je webpagina/-applicatie en hoe je hier doorheen navigeert. Vooral wanneer jouw applicatie veel formulieren bevat is het belangrijk -en het bespaart je later ook enorm veel tijd- om dit proces te stroomlijnen.

En als je een aanzienlijke hoeveelheid / heel veel formulieren hebt is het mogelijk zelfs interessant om een apart formuliersysteem te bouwen. Maar soms kan het ook handig zijn om hier geen gebruik van te maken, ingeval het zeer specialistische formulieren betreft, zoals bijvoorbeeld een login- of zoekformulier. Maar die gevallen vormen dan de uitzondering op de regel.

EDIT: ook is het verstandig om na te denken over hoe je informatie structureert in je sessie. Nu stop je "id", "mail" en "verified" los in je sessie, waarom?
"id" zal nodig zijn om een gebruiker te identificeren
"mail" is afleidbaar
"verified" is nogal zinloos (te meer deze waarde false blijft na registratie?), stop gewoon niets in je sessie als er niets "geverifieerd" is, jij hebt de controle over je sessie.

Maar dan wil je niet dat formulierdata "botst" met deze user data, of nog erger, dat je door een hack in je formulier het "id" veld zou kunnen overschrijven ofzo. Je zult dus verschillende segmenten in je sessie moeten creëren. Bijvoorbeeld $_SESSION['form'] als "root" (tis nog steeds geen boom :p) / uitgangspunt voor al jouw formulieren.


Heel veel informatie om zo in 1 keer te lezen, maar zeker goed te gebruiken dankjewel! Dit ga ik zeker te weten gebruiken ook in de documentatie die ik moet aanleggen bij dit project. Dankuwel!
 
Sem Bakker

Sem Bakker

01/04/2020 21:01:30
Quote Anchor link
Frank Nietbelangrijk op 31/03/2020 18:40:01:
>> Als programma gebruik ik nu Visual Studio Code. Wat doet NetBeans dan beter?

Al denk ik misschien van wel, kan het niet hard maken omdat ik Visual Studio Code niet ken (of misschien van heel vroeger). Het punt waarom ik het zei is omdat Netbeans bij mij direct een rode markering liet zien op die else statement.

Met andere woorden zit een goede PHP editor vol vernuft om jou te helpen. En als er dit soort slordigheidjes blijken te zijn dan is het vaak zo dat er geen php editor gebruikt wordt.


Oke ik ga het downloaden, bedankt voor de tip! Welke versie van NetBeans kan ik het beste downloaden op de NetBeans site (https://netbeans.apache.org/download/). De Apache NetBeans 11 feature update 3 (NB 11.3) versie?

,groetjes Sem
 

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