Vraag bij php opdracht vwo 6

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pim Vreeswijk

Pim Vreeswijk

08/11/2018 16:59:11
Quote Anchor link
Hallo,

Ik heb een probleem. De bedoeling is dat je een melding krijgt op het inlogpagina als je iets verkeerd doet bij account aanmaken of bij het inloggen. Dit is gelukt door sessies te gebruiken. Maar het probleem is dat bij het herstarten/refreshen van de pagina de melding blijft staan, wat eigenlijk niet de bedoeling is.
Dit is de code voor de inlogpagina.
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
<?php
require("connection1.php");
session_start();
?>


<form action = "verwerking.php" method = "POST">
    Gebruikersnaam:
    <input type = "text" name = "gebruikersnaam"><br>
    Wachtwoord:        
    <input type = "password" name = "wachtwoord"><br>
    <input type = "submit" value = "Inloggen">
    
</form>
OF:
<form action = "accountaanmaken.php" method = "POST">
    Gebruikersnaam:
    <input type = "text" name = "gebruikersnaamnieuw"><br>
    Wachtwoord:        
    <input type = "password" name = "wachtwoordnieuw"><br>
    Wachtwoord controle:        
    <input type = "password" name = "wachtwoordcontrole"><br>    
    <input type = "submit" value = "Account Aanmaken">
</form>
<?php
$melding
= $_SESSION['melding'];
if ($melding == "GB") {
    echo "Deze gebruikersnaam bestaat al";
}

else if ($melding == "WNG") {
    echo "De opgegeven wachtwoorden zijn niet gelijk aan elkaar";
}

else if ($melding == "VL") {
    echo "Vul in elk veld iets in";
}

else if ($melding == "IN") {
    echo "De gebruikersnaam of wachtwoord klopt niet";
}

else if ($melding == "S") {
    echo "U heeft een account gemaakt. Log in om gebruik te maken<br> van onze services te maken";
}

?>


En dit is de code voor de verwerkingspagina van het inloggen:
<?php
session_start();
require("connection1.php");

 $gebruiker = $_POST['gebruikersnaam'];
 $wachtwoord = $_POST['wachtwoord'];


$adminquery = "SELECT *
                                    FROM gebruikers
                                    WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '1';"
;
$gebruikerquery = "SELECT *
                                    FROM gebruikers
                                    WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '0';"
;


$adminresultaat = mysqli_query($connectie1, $adminquery);
$gebruikerresultaat = mysqli_query($connectie1, $gebruikerquery);

if (mysqli_num_rows($adminresultaat)>0) {
    $_SESSION['id'] = "2";
    $_SESSION['username'] = $gebruiker;
    include('admin.php');
    $melding = "NULL";
    $_SESSION['melding'] = $melding;
}

else if (mysqli_num_rows($gebruikerresultaat)>0) {
    $_SESSION['id'] = "1";
    $_SESSION['username'] = $gebruiker;
    include('liedjeszoeken.php');
    $melding = "NULL";
    $_SESSION['melding'] = $melding;
}

else {
    $melding = "IN";
    $_SESSION['melding'] = $melding;
    header('Location: inloggen.php');
    exit;
}


?>


Vantevoren bedankt voor uw hulp. :)

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 08/11/2018 19:06:01 door - Ariën -
 
PHP hulp

PHP hulp

28/03/2024 15:26:56
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2018 17:23:52
Quote Anchor link
Elke keer als je een inlogpoging doet (dus als je de verwerkpagina aanroept) kun je meldingen over eerdere inlogpogingen verwijderen. Tenzij je natuurlijk inlogpogingen op een of andere manier wilt bijhouden.

Je zou dit dus aan het begin van het verwerkscript kunnen doen nadat je de sessie hebt gestart/hebt voortgezet, bijvoorbeeld met unset(). Het maakt hierbij niet uit of $_SESSION['melding'] bestaat of niet.

Je zou dit ook op kunnen lossen door het hele loginformulier (inclusief boodschappen over foutmeldingen) weg te laten op het moment dat je al ingelogd bent.
Gewijzigd op 08/11/2018 17:25:11 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

08/11/2018 19:17:09
Quote Anchor link
Opsich zijn sessies niet eens nodig om de fouten op te slaan. Je hoort ze toch maar eenmalig te zien, omdat je de invoer aan hoort te passen. Je kan deze prima als array genereren. Het mooiste is als de de fouten geeft op dezelfde pagina als het formulier. Je kan uit je $_POST de bestaande waarde van de username halen, zodat die al ingevuld is, als een veld niet klopt.

Om de fouten eruit te pikken kan je met count() kijken of de array errors groter is dan 0. In dat geval toon je een foreach, en lees je alles uit.

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
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") { // controleer of het formulier verstuurd is...
    $errors = array(); // array initialiseren
    // valideer de velden op simpele wijze, en als ze niet voldoen aan de invoer, stop de foutmeldingen in een array $errors[].
    // Haal eerst in de velden met trim() de voor en/of achterlopende spaties weg. Dit voorkomt de spatie-spammers. Dan vergelijken we met een lege string.

        if (trim($_POST['name']) == "") {
        $errors[] = "Naam is niet ingevuld";
    }
elseif (trim($_POST['password']) == "")) {
        $errors[] = "Het wachtwoord is vergeten";
    
    // valideer verder je username en password met een nieuwe elseif  
    } else {
    // hier je afhandeling. Plaats sessie omdat er ingelogd is.
}
?>

Hier je formulier plaatsen.


Ik weet niet welke cursus je volgt, maar onthoud wel dat je inlog-formulier gi-gan-tisch lek is, en dat je dit niet in de praktijk moet gebruiken zonder escaping met mysqli_real_escape_string()en een moderne vorm van password-hashing. Wat je dan moet doen is de wachtwoorden hashen met password_hash en controleren met password_verify.
Gewijzigd op 08/11/2018 19:20:32 door - Ariën -
 



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.