Versio

Efficiënte formverwerking

Overzicht Reageren

Herjan -

Herjan -

30/08/2007 11:31:00
Quote Anchor link
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:
  • 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)
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
<?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.';
        }
    }


?>


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.
 
PHP hulp

PHP hulp

24/05/2012 13:36:59
Gesponsorde koppelingen:
 
Gerard M

Gerard M

30/08/2007 13:06:00
Quote Anchor link
Er zijn 2 methodes waar op ik het doe, ten eerste een simpele if-else, welke ik het meest gebruikt:
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
<?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>';
}

?>



Maar als ik veel (POST/GET)input moet controleren gebruik ik liever:
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
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
 
Herjan -

Herjan -

30/08/2007 13:50:00
Quote Anchor link
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 ;)
 
Bart van der veen

bart van der veen

30/08/2007 14:59:00
Quote Anchor link
wat je misschien zou kunne doen is het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
<form>
<
input type="text" name="user_1">
<
input type="sumbit">
<
/form>
?>


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
 



Overzicht Reageren

Get Adobe Flash player