Form validatie
Ik verwijs naar het script "maak_account.php"
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<form action="scripts/maak_account.php" method="post">
<div class="form-group">
<label for="naam">* Naam:</label>
<input class="form-control" placeholder="Naam" name="naam" type="text" required>
<span class="error">* <?php echo $naamErr;?></span>
</div>
<div class="form-group">
<label for="naam">* Naam:</label>
<input class="form-control" placeholder="Naam" name="naam" type="text" required>
<span class="error">* <?php echo $naamErr;?></span>
</div>
Maar de variabele naamErr wordt niet herkend. Terwijl ik deze wel opvul in maakaccount.php
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
38
39
40
41
42
43
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
// Variabele gegevens bedrijf
$rechtsvorm = $naam = $straat = $huisnr = $busnr = $postcode = $plaats = $btwnr = $telnr = $email = "";
// Variabele gegevens gebruiker
$voornaam = $achternaam = $functie = $wachtwoord = "";
// Error variablele
$naamErr="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Gegevens bedrijf
$rechtsvorm = test_input($_POST["rechtsvorm"]);
if (empty($_POST["naam"])) {
$naamErr = "Naam invullen";
} else {
$naam = test_input($_POST["naam"]);
}
$straat = test_input($_POST["straat"]);
$huisnr = test_input($_POST["huisnr"]);
$busnr = test_input($_POST["busnr"]);
$postcode = test_input($_POST["postcode"]);
$plaats = test_input($_POST["plaats"]);
$btwnr = test_input($_POST["btwnr"]);
// $telnr = test_input($_POST["telnr"]);
// $email = test_input($_POST["email"]);
// Gegevens gebruiker
$voornaam = test_input($_POST["vnaam"]);
$achternaam = test_input($_POST["naam"]);
$functie = test_input($_POST["functie"]);
$wachtwoord = test_input($_POST["wachtwoord"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
// Variabele gegevens bedrijf
$rechtsvorm = $naam = $straat = $huisnr = $busnr = $postcode = $plaats = $btwnr = $telnr = $email = "";
// Variabele gegevens gebruiker
$voornaam = $achternaam = $functie = $wachtwoord = "";
// Error variablele
$naamErr="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Gegevens bedrijf
$rechtsvorm = test_input($_POST["rechtsvorm"]);
if (empty($_POST["naam"])) {
$naamErr = "Naam invullen";
} else {
$naam = test_input($_POST["naam"]);
}
$straat = test_input($_POST["straat"]);
$huisnr = test_input($_POST["huisnr"]);
$busnr = test_input($_POST["busnr"]);
$postcode = test_input($_POST["postcode"]);
$plaats = test_input($_POST["plaats"]);
$btwnr = test_input($_POST["btwnr"]);
// $telnr = test_input($_POST["telnr"]);
// $email = test_input($_POST["email"]);
// Gegevens gebruiker
$voornaam = test_input($_POST["vnaam"]);
$achternaam = test_input($_POST["naam"]);
$functie = test_input($_POST["functie"]);
$wachtwoord = test_input($_POST["wachtwoord"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Iemand die ziet wat ik verkeerd doe?
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 26/09/2017 16:03:04 door - Ariën -
Nu roep je een variabele aan, die niet nog bestaat. Je kan met isset() controleren of een variabele bestaat.
wordt het script maak_account.php aangeroepen. Kan ik variabele doorgeven of teruggeven vanwaar het script
werd aangeroepen?
Eerst de PHP-code, en dan de HTML-code.
- Je begint met PHP in plaats van met HTML
- Je initialiseert netjes je variabelen
- Je test op correcte wijze of Je pagina is opgevraagd in de POST methode
Een compliment is dus op zijn plaats. Wat Ariën zegt daar ben ik het wel mee eens en ook zou ik de adviezen van Thomas uit je vorige topic ter harte nemen. Je kunt je HTML zo onder je code plaatsen
Voor de opzet voor je formulier (en code) zou ik deze volgorde aanhouden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// includes en/of functies hier
// initialisatie van variabelen
// controleer of formulier verstuurd is
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// validatie
// Indien validatie geslaagd is
if(count($errors) == 0) {
// verwerk het formulier hier (gegevens opslaan of mail verzenden etc)
// redirect de gebruiker altijd o.a. om dubbele verwerking te voorkomen
header('Location: where-ever.php');
exit;
}
}
?>
<<< HTML HIER >>>
// includes en/of functies hier
// initialisatie van variabelen
// controleer of formulier verstuurd is
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// validatie
// Indien validatie geslaagd is
if(count($errors) == 0) {
// verwerk het formulier hier (gegevens opslaan of mail verzenden etc)
// redirect de gebruiker altijd o.a. om dubbele verwerking te voorkomen
header('Location: where-ever.php');
exit;
}
}
?>
<<< HTML HIER >>>
Voor een compleet voorbeeld zie mijn reactie hier
Gewijzigd op 26/09/2017 19:43:24 door Frank Nietbelangrijk
Ik had ergens gelezen dat het properder en overzichtelijker programmeren is als je html, css, JavaScript en php in aparte files plaatst. Maar dus jullie raden mij aan php en html in zelfde file te plaatsen? Is daar een reden voor?
Allereerst is er op die manier een goede logica. Je heb een mooi overzicht over wat er wanneer gebeurd. Ten tweede zijn er vaak ook momenten om ook na het versturen van het formulier je formulier te gebruiken. Denk bijvoorbeeld aan validatie waarbij je een veld bijv. rood wilt kleuren als deze niet goed is ingevuld.
Bij de recht-toe-recht-aan methode die je nu hanteert is wat - Ariën - zegt vrij gebruikelijk. Als je je eens in een framework verdiept zul je zien dat ze daar in de ene file alle logica hebben zitten, en informatie klaarzetten die op het scherm moet komen (maar dan nog zonder opmaak info, puur de data), en in een andere file (die view) de opmaak zelf. Dan heb je echter ook te maken met het 'keurslijf' van het framework om te zorgen dat alles ook op die manier gaat werken, ne ben je dus wel een paar avondjes 'studeren' verder.
Ok bedankt voor de info. Het is altijd wat zoeken in het begin met een nieuwe taal en nieuwe omgeving. Ik plaats voortaan mijn php code bovenen mijn html.
* = Headers worden altijd uitgevoerd vóórdat de output begint. Dat is nu eenmaal de afspraak binnen het ontworpen HTTP-protocol.
Gewijzigd op 27/09/2017 11:07:14 door - Ariën -
Hierboven werd ook al aangegeven dat je input zo min mogelijk moet bewerken, maar ik geloof dat je een wachtwoord (bijna) nooit zou moeten bewerken. Daar horen juist ook vreemde tekens in. Zorg voor een goede controle en sla een wachtwoord gecodeerd op.
Het probleem met automatisch aanpassen is dat je een machine informatie laat interpreteren. Machines zijn daar doorgaans niet zo sterk in. Daarnaast pas je mogelijk kloppende informatie aan in iets dat niet klopt, of in ieder geval iets dat afwijkt van wat een gebruiker heeft ingevoerd. Ik kan mij geen situatie voorstellen waarin dat wenselijk is.
Input mag wel geschikt gemaakt worden voor transport (naar een database) of weergave (in een webpagina). Maar daarbij wordt de oorspronkelijke input inhoudelijk niet gewijzigd.
Gewijzigd op 27/09/2017 17:15:58 door Thomas van den Heuvel
Jelle Breusegem op 27/09/2017 08:51:45:
Ik had ergens gelezen dat het properder en overzichtelijker programmeren is als je html, css, JavaScript en php in aparte files plaatst. Maar dus jullie raden mij aan php en html in zelfde file te plaatsen? Is daar een reden voor?
Je mag de HTML wel in een apart bestand zetten maar het belangrijkste is om de zaken gestructureerd te houden. En wat is het verschil tussen deze twee:
A:
en B:
html_template.php:
Het verschil is enkel dat het in twee fysiek verschillende bestanden staat. include() plempt echter de inhoud van html.template.php weer op de plek waar je die include functie aanroept. Netto resultaat is dat er qua werking geen verschil is.