Probleem met else-statement
Code (php)
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
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
<?php
if (isset($_POST['uname']) && isset($POST['password']))
//function validate($data)
//{
//$data = trim($data);
//$data = stripslashes($data);
//$data = htmlspecialchars($data);
//return $data;
//}
{
$uname = $_POST['uname'];
$pass = $_POST['password'];
if (empty($uname))
{
header("location: index.php?error=User Name is required");
exit();
}
else if (empty($pass))
{
header("location: index.php?error=Password is required");
exit();
}
else
{
echo "Valid input";
}
else
{
header("location: index.php");
exit();
}
}
?>
if (isset($_POST['uname']) && isset($POST['password']))
//function validate($data)
//{
//$data = trim($data);
//$data = stripslashes($data);
//$data = htmlspecialchars($data);
//return $data;
//}
{
$uname = $_POST['uname'];
$pass = $_POST['password'];
if (empty($uname))
{
header("location: index.php?error=User Name is required");
exit();
}
else if (empty($pass))
{
header("location: index.php?error=Password is required");
exit();
}
else
{
echo "Valid input";
}
else
{
header("location: index.php");
exit();
}
}
?>
Foutmelding
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\USB WebServer\root\Youtube3\login.php on line 30
IK zie hem niet. Wie Wel?
Edit:
Titel aangepast van 'foutje' naar 'Probleem met else-statement'
Gelieve in het vervolg duidelijke maar kort en bondige topictitels te gebruiken die de vraag of het probleem omschrijven.
Gelieve in het vervolg duidelijke maar kort en bondige topictitels te gebruiken die de vraag of het probleem omschrijven.
Gewijzigd op 06/12/2021 13:51:33 door - Ariën -
Je kan geen else na een else doen.
Foutmelding!
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\USB WebServer\root\Youtube3\login.php on line 30
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\USB WebServer\root\Youtube3\login.php on line 30
Dat zei je al.
Kijk eens naar lijn 25 t/m 30.
Kijk eens naar lijn 25 t/m 30.
Het zijn toch 2 if's. Dat kan je toch doen zoals bedoeld?
Code (php)
Twee elses werkt niet ;-)
Je mist ergens een accolade.
Mooi uitlijnen help.
Een goede editor, zelfs np++, ook.
Een goede editor, zelfs np++, ook.
Jan, ik vond het al mppi uitgelijnd. Ik gebruik sublieme. Werkt perfect
Toevoeging op 05/12/2021 23:19:22:
Maar lost mijn probleem niet op. En als je nu met een switch doet?
Toevoeging op 05/12/2021 23:19:22:
Maar lost mijn probleem niet op. En als je nu met een switch doet?
Je statements kloppen ergens niet. Met een degelijke editor zou je moeten zien welke statement waarbij hoort, door op de bracket te klikken.
Gemak dient de mens...
Gemak dient de mens...
Voor één keer zal ik je even helpen en heb ik het fatsoenlijk uitgelijnd.
Nu zie je ook meteen dat er 2 keer achter elkaar een 'else' staat, zoals Ariën al gelijk in het eerste antwoord aangaf.
En je kunt logischerwijs niet 2 keer een 'else' achter elkaar hebben staan.
Nu zie je ook meteen dat er 2 keer achter elkaar een 'else' staat, zoals Ariën al gelijk in het eerste antwoord aangaf.
En je kunt logischerwijs niet 2 keer een 'else' achter elkaar hebben staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if (isset($_POST['uname']) && isset($POST['password'])) {
$uname = $_POST['uname'];
$pass = $_POST['password'];
if (empty($uname)) {
header("location: index.php?error=User Name is required");
exit();
} else if (empty($pass)) {
header("location: index.php?error=Password is required");
exit();
} else {
echo "Valid input";
} else {
header("location: index.php");
exit();
}
}
?>
if (isset($_POST['uname']) && isset($POST['password'])) {
$uname = $_POST['uname'];
$pass = $_POST['password'];
if (empty($uname)) {
header("location: index.php?error=User Name is required");
exit();
} else if (empty($pass)) {
header("location: index.php?error=Password is required");
exit();
} else {
echo "Valid input";
} else {
header("location: index.php");
exit();
}
}
?>
Die laatste else-statement kan je weg halen.
Als de invoer overal geldig is dan toon je die tekst. Je kan vanzelfsprekend niet tegelijkertijd dan naar index.php doorsturen.
Sowieso houd ik wel van duidelijke communicatie richting de gebruiker. Dus vertel dan dat het inloggen gelukt is. Als de validatie ergens fout gaat, dan is het beter om alle fouten op te slaan in een array. Dan kan je bij een hoop foutieve invoerwaardes (passworden vergeten, username bestaat al etc..) na het versturen van het formulier aan de gebruiker vertellen wat er fout is ingevuld.
In dat geval moet je wel elke validatie apart doorlopen, dus enkel een if-statement per validatie:
Uiteindelijk tel je zodra je het formulier verstuurt met count($errors) of je 0 errors hebt. In dat geval is er aan aan alle validatieregels voldaan, en dan plaats je de gegevens in de database, en vertel je de gebruiker dat het gelukt is. Als het aantal errors hoger is dan 0, dan is er ergens iets niet goed ingevuld. In dat geval kan je met foreach() een mooi loopje laten tonen met alle errors.
Want waarom zou je de errors steeds via een location-header naar een aparte pagina doorsturen?
Ik zou zeggen, speel er eens mee! :-)
Leuke extra uitbreiding voor de finishing touch....
Je kan zelfs bijvoorbeeld ook als key van de array de naam van het formulierelement meegeven. Met array_key_exists kan je bij elk formulier element bekijken of de key bestaat. In dat geval kan je bijvoorbeeld met CSS het formulier rood stylen, zodat de gebruiker direct ziet dat er iets mis is.
En voor wie een eenvoudig en kant-en-klaar alternatief zoekt:
https://github.com/SandroMiguel/verum-php (met Nederlands taalpakket made by me ;-))
Als de invoer overal geldig is dan toon je die tekst. Je kan vanzelfsprekend niet tegelijkertijd dan naar index.php doorsturen.
Sowieso houd ik wel van duidelijke communicatie richting de gebruiker. Dus vertel dan dat het inloggen gelukt is. Als de validatie ergens fout gaat, dan is het beter om alle fouten op te slaan in een array. Dan kan je bij een hoop foutieve invoerwaardes (passworden vergeten, username bestaat al etc..) na het versturen van het formulier aan de gebruiker vertellen wat er fout is ingevuld.
In dat geval moet je wel elke validatie apart doorlopen, dus enkel een if-statement per validatie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$errors = []; // error array aanmaken.
if (empty($uname)) {
$errors[] = "De username is niet ingevuld.";
}
if (empty($pass)) {
$errors[] = "Het password is niet ingevuld.";
}
// Kijken of de validatie met succes doorlopen is
if(count($errors)==0) {
// alles is goed. Verstuur de gegevens, en zeg tegen de gebruiker dat alles klopt.
} else {
// doorloop $errors met foreach(), en zeg tegen de gebruiker welke velden er niet ingevuld zijn.
}
?>
$errors = []; // error array aanmaken.
if (empty($uname)) {
$errors[] = "De username is niet ingevuld.";
}
if (empty($pass)) {
$errors[] = "Het password is niet ingevuld.";
}
// Kijken of de validatie met succes doorlopen is
if(count($errors)==0) {
// alles is goed. Verstuur de gegevens, en zeg tegen de gebruiker dat alles klopt.
} else {
// doorloop $errors met foreach(), en zeg tegen de gebruiker welke velden er niet ingevuld zijn.
}
?>
Uiteindelijk tel je zodra je het formulier verstuurt met count($errors) of je 0 errors hebt. In dat geval is er aan aan alle validatieregels voldaan, en dan plaats je de gegevens in de database, en vertel je de gebruiker dat het gelukt is. Als het aantal errors hoger is dan 0, dan is er ergens iets niet goed ingevuld. In dat geval kan je met foreach() een mooi loopje laten tonen met alle errors.
Want waarom zou je de errors steeds via een location-header naar een aparte pagina doorsturen?
Ik zou zeggen, speel er eens mee! :-)
Leuke extra uitbreiding voor de finishing touch....
Je kan zelfs bijvoorbeeld ook als key van de array de naam van het formulierelement meegeven. Met array_key_exists kan je bij elk formulier element bekijken of de key bestaat. In dat geval kan je bijvoorbeeld met CSS het formulier rood stylen, zodat de gebruiker direct ziet dat er iets mis is.
En voor wie een eenvoudig en kant-en-klaar alternatief zoekt:
https://github.com/SandroMiguel/verum-php (met Nederlands taalpakket made by me ;-))
En nu denk ik zo maar dat op de index.php pagina staat
echo $_GET['error']
Dus als ik jou een mailtje stuur met de link
http://example.com/index.php?error=een hele lap tekst met ergens <a href="">link</a> er in
of
http://example.com/index.php?error=Alle gebruikers moeten hun account bevestigen <link naar evil site>
Dan kun jij zo maar een lek in je eigen site bouwen.
Áls je dat als doet: index.php?error=3
en dan zelf in een lijstje hebben wat foutmelding 3 is (ook in het Engels of Duits etc)
echo $_GET['error']
Dus als ik jou een mailtje stuur met de link
http://example.com/index.php?error=een hele lap tekst met ergens <a href="">link</a> er in
of
http://example.com/index.php?error=Alle gebruikers moeten hun account bevestigen <link naar evil site>
Dan kun jij zo maar een lek in je eigen site bouwen.
Áls je dat als doet: index.php?error=3
en dan zelf in een lijstje hebben wat foutmelding 3 is (ook in het Engels of Duits etc)
Ik zie vaker dat mensen een redirect doen na een bepaalde error. Maar ik zie het nut er niet van in.
Waarom zou je ze doorsturen? Je kan dit toch prima op dezelfde pagina afvangen?
Als gebruiker zou ik het hinderlijk vinden om steeds op back te moeten drukken als je fouten bij het invullen maakt. (Je weet immers nooit of een username al bestaat, ook al ben je scherp met het invullen van het formulier).
Waarom zou je ze doorsturen? Je kan dit toch prima op dezelfde pagina afvangen?
Als gebruiker zou ik het hinderlijk vinden om steeds op back te moeten drukken als je fouten bij het invullen maakt. (Je weet immers nooit of een username al bestaat, ook al ben je scherp met het invullen van het formulier).
Gewijzigd op 06/12/2021 13:54:15 door - Ariën -
Ik zou inderdaad de fouten verzamelen en boven het formulier opnieuw tonen.
En het formulier direct vullen met de ingevoerde (foute) data
Leuker nog: controleer vooraf de data met javascript zodat je nog voor het submitten al gefilterd hebt.
Maar dan nog steeds ook achteraf om te voorkomen dat iemand een route vindt om de data toch te submitten.
En het formulier direct vullen met de ingevoerde (foute) data
Leuker nog: controleer vooraf de data met javascript zodat je nog voor het submitten al gefilterd hebt.
Maar dan nog steeds ook achteraf om te voorkomen dat iemand een route vindt om de data toch te submitten.




