Hallo,

Het is misschien stom, maar ik zoek een wat geavanceerdere (lees: betere) manier voor veld validatie.

Een klein gedeelte van hoe ik het nu doe:

<?php
if (empty($_POST['contactpersoon']))
{
echo "U heeft geen naam / contactpersoon ingevuld.";
echo '<p><A HREF="javascript:back()">Terug</A></p>';
}
elseif (empty($_POST['email']))
{
echo "U heeft geen e-mailadres ingevuld";
echo '<p><A HREF="javascript:back()">Terug</A></p>';
}
elseif (empty($_POST['bericht']))
{
echo "U heeft geen bericht ingevuld";
echo '<p><A HREF="javascript:back()">Terug</A></p>';
}
?>

Uiteraard werkt dit, maar niet als je bijvoorbeeld 2 velden niet invuld. Hij laat dan alleen zien in mijn geval: U heeft geen naam / contactpersoon ingevuld. Als ik bijvoorbeeld Contactpersoon en E-mailadres niet in heb gevuld. En om dan met een link terug te moeten is ook niet echt netjes.

Daarnaast, als alle velden goed ingevuld zijn, moet hij alles netjes in sessies gaan zetten. Dat komt na de if/else.

Wie kan mij een nettere / betere manier laten zien, waarop ik kan voortborduren voor veldvalidatie. Nog tips hoe met deze if/else om te gaan i.v.m. sessies?
Misschien na elke goed doorlopen post, de huidige waarde in een sessie zetten?
Het beste is om een array te maken met "required" fields, bijv zo:

<?php
    $required = array (
        'veld1' => ''
        'veld2' => ''
        );
?>

Daarna doe je:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        foreach ($required as $field) {
            if (empty ($_POST[$field])) {
                $required[$field] = 'Niets ingevuld bij' . $field;
            }
        }
    }
?>

Hierna heb je dan een array met alle eventuele foutmeldingen er in. In je formulier kun je nu dit doen:

    <input id="veld1" name="veld1" type="text" value="" />
    <?php if (!empty ($required['veld1'])) echo $required['veld1']; ?>

(Code niet gecheckt)
Op deze manier zou je het grofweg kunnen doen:

1. Voor ieder formulier veld (b.v. foreach loop)
2. Binnen de loop een switch met daarin veld namen (b.v. email of product_id)
3. Aan het einde v/d loop hou je een array bij met alle velden (de namen dus) die verkeerd zijn.

Dank je Jan,

Is dit dan handig om die check op dezelfde pagina te doen? Dus een form action naar de huidige pagina? Om zo ook de niet ingevulde velden aan te geven. Of kan dit net zo goed naar een nieuwe pagina en dan evt. met een javascript terug gaan?
@Martijn! : Die snap ik niet helemaal. Zal ongetwijfeld makkelijk zijn, maar begrijp niet hoe je het precies bedoeld.
@ Dominique: ik vind het handiger om op 1 pagina te blijven, in verband met de foutmeldingen als een veld niet klopt. De html van mijn form zet ik meestal in een var. Als alles correct is ingevuld doe ik zoiets:

<?php
    $form_html = '';
    $msg = 'Formulier is ingevuld';
?>

@Jan: Ik ben een heel eind met je code gekomen. Enigste probleem nu nog, hij laat wel als ik de array print de tekst zien, dat je een veld niet ingevuld hebt, maar hij echo't dat niet bij het betreffende veld. De velden die wel ingevuld zijn, laat hij ook wel netjes gevuld met de juiste waardes zien.
Dan zet je dit bij je veld:

<?php
if(isset($required['betreffende_veldnaam']){
    echo $required['betreffende_veldnaam'];
    }
?>



[edit]
Wat ik zelf wel een mooie optie vind om veldnamen die je moet invullen te controleren is het volgende:
- Verplichte velden beginnen met req_ in de naam.
- Op de controle pagina loop ik alle post_variabelen door
- begint de naam met req_ dan controleren of die leeg is
- verder sla ik dan de meldingen idd in een array, maar dan zonder req_ voor de bijbehorende veldnaam.

Voordelen
- Eenvoudiger velden toe te voegen
- Geen gedoe met de veldnamen in een array te zetten

Nadelen
- Script is iets minder snel

Reageren