Efficiënte formverwerking
Ik programmeer nu al bijna twee jaar PHP. Wat ik in die tijd erg veel gebruikt heb, zoals velen van jullie waarschijnlijk, zijn forms. En toch heb ik ergens de gedachte: "Dit moet makkelijker kunnen."
Wat ik wil is:
Dit alles moet een voor de gebruiker en programmeur zo efficiënt mogelijke manier gebeuren uiteraard.
Op het moment doe ik forms meestal zo:
Dit is een erg simpele manier, maar het programmeert niet handig. Als ik bijvoorbeeld iets wil aanpassen, moet ik twee keer het form veranderen. Ook neemt het redelijk veel ruimte in beslag. Voordeel is dat ik makkelijk een controle van de input erbij kan zetten.
Mijn vraag is dus eigenlijk of iemand een makkelijke(re) manier weet voor het maken en tonen van forms in PHP.
Wat ik wil is:
- Een formulier tonen en eventueel automatisch vullen (als het om een wijziging van een MySQL-result gaat bijvoorbeeld)
- De waarden controleren op bijv. lege velden
- Als er iets niet goed is, het formulier opnieuw tonen met de ingevulde waarden erin, en de errors overzichtelijk weergeven.
Dit alles moet een voor de gebruiker en programmeur zo efficiënt mogelijke manier gebeuren uiteraard.
Op het moment doe ik forms meestal zo:
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
44
45
46
47
48
49
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
<?php
if($_SERVER['REQUEST_METHOD'] != "POST")
{
echo '
Vul hier je gebruikersnaam en wachtwoord in om in te loggen.<br /><br />
<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
Gebruikersnaam: <input type="text" name="username" /><br />
Wachtwoord: <input type="password" name="password" /><br />
<input type="submit" value="Login">
</form>';
}
else
{
$username = 'Herjan';
$password = 'wachtwoord';
if(empty($username))
{
$error = 'Je moet een gebruikersnaam invullen.';
}
elseif(empty($password))
{
$error = 'Je moet een wachtwoord invullen.';
}
elseif($_POST['username'] != $username || $_POST['password'] != $password)
{
$error = 'De combinatie van gebruikersnaam en wachtwoord is onjuist.';
}
if(isset($error))
{
echo '
<span class="error">'.$error.'</span><br /><br />
<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
Gebruikersnaam: <input type="text" name="username" value="'.$_POST['username'].'" /><br />
Wachtwoord: <input type="password" name="password" value="'.$_POST['password'].'" /><br />
<input type="submit" value="Login">
</form>';
}
else
{
echo 'Je bent ingelogd.';
}
}
?>
if($_SERVER['REQUEST_METHOD'] != "POST")
{
echo '
Vul hier je gebruikersnaam en wachtwoord in om in te loggen.<br /><br />
<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
Gebruikersnaam: <input type="text" name="username" /><br />
Wachtwoord: <input type="password" name="password" /><br />
<input type="submit" value="Login">
</form>';
}
else
{
$username = 'Herjan';
$password = 'wachtwoord';
if(empty($username))
{
$error = 'Je moet een gebruikersnaam invullen.';
}
elseif(empty($password))
{
$error = 'Je moet een wachtwoord invullen.';
}
elseif($_POST['username'] != $username || $_POST['password'] != $password)
{
$error = 'De combinatie van gebruikersnaam en wachtwoord is onjuist.';
}
if(isset($error))
{
echo '
<span class="error">'.$error.'</span><br /><br />
<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
Gebruikersnaam: <input type="text" name="username" value="'.$_POST['username'].'" /><br />
Wachtwoord: <input type="password" name="password" value="'.$_POST['password'].'" /><br />
<input type="submit" value="Login">
</form>';
}
else
{
echo 'Je bent ingelogd.';
}
}
?>
Dit is een erg simpele manier, maar het programmeert niet handig. Als ik bijvoorbeeld iets wil aanpassen, moet ik twee keer het form veranderen. Ook neemt het redelijk veel ruimte in beslag. Voordeel is dat ik makkelijk een controle van de input erbij kan zetten.
Mijn vraag is dus eigenlijk of iemand een makkelijke(re) manier weet voor het maken en tonen van forms in PHP.
Gesponsorde koppelingen:
Er zijn 2 methodes waar op ik het doe, ten eerste een simpele if-else, welke ik het meest gebruikt:
Maar als ik veel (POST/GET)input moet controleren gebruik ik liever:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$error = true;
if(isset($_POST['submit'])) {
if($foo == 'bar') {
if($bar == 'foo') {
$error = false;
// Alle data is gevalideert dus doe wat leuks.
print 'Alle waardes zijn correct.';
} else {
print '$bar moet foo zijn';
}
} else {
print '$foo moet bar zijn';
}
}
if($error) {
print '<form><input name="submit" />et cetra</form>';
}
?>
$error = true;
if(isset($_POST['submit'])) {
if($foo == 'bar') {
if($bar == 'foo') {
$error = false;
// Alle data is gevalideert dus doe wat leuks.
print 'Alle waardes zijn correct.';
} else {
print '$bar moet foo zijn';
}
} else {
print '$foo moet bar zijn';
}
}
if($error) {
print '<form><input name="submit" />et cetra</form>';
}
?>
Maar als ik veel (POST/GET)input moet controleren gebruik ik liever:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(isset($_POST['submit'])) {
$keys = array('foo' => 'Username', 'bar' => 'Password', 'foobar' => 'Email');
$err = array();
foreach($keys as $k => $v) {
if(empty($_POST[$k])) {
$err[] = $v;
}
}
if(count($err) > 0) {
print 'De volgende velden zijn leeg:<br />';
for($i=0; $i <= (count($err)-1); $i++) {
print "-{$err[$i]} <br />";
}
} else {
print 'Geen lege waardes gevonden.';
}
}
?>
if(isset($_POST['submit'])) {
$keys = array('foo' => 'Username', 'bar' => 'Password', 'foobar' => 'Email');
$err = array();
foreach($keys as $k => $v) {
if(empty($_POST[$k])) {
$err[] = $v;
}
}
if(count($err) > 0) {
print 'De volgende velden zijn leeg:<br />';
for($i=0; $i <= (count($err)-1); $i++) {
print "-{$err[$i]} <br />";
}
} else {
print 'Geen lege waardes gevonden.';
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Gerard M
Maar zo kan ik bijvoorbeeld niet controleren of het veld 'username' uit minstens 6 en maximaal 15 karakters bestaat.
Op IRC wees iemand met op FormHandler, daar moet ik maar eens naar gaan kijken. Meer suggesties zijn welkom uiteraard ;)
Op IRC wees iemand met op FormHandler, daar moet ik maar eens naar gaan kijken. Meer suggesties zijn welkom uiteraard ;)
wat je misschien zou kunne doen is het volgende:
dan de de post array doorlopen en 2 dingen doen, controloren of hij leeg is en zo niet dan de key exploden op de _ en een functie schrijven die user() heet en daar je waardes laat controleren
dan de de post array doorlopen en 2 dingen doen, controloren of hij leeg is en zo niet dan de key exploden op de _ en een functie schrijven die user() heet en daar je waardes laat controleren



