Radiobuttons en checkboxes waarvan de input blijft staan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pim B

Pim B

12/11/2010 14:22:13
Quote Anchor link
Hoi,

ik heb een formulier gemaakt met 2 verplichte text-velden (voornaam, achternaam). Als de gebruiker 1 van de 2 velden niet invult, krijgt hij het formulier terug met de melding wat hij vergeten is en in het formulier staat de reeds ingevulde waarde nog steeds in het text-veld. Dat is gelukt met deze code:
<code>
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
50
51
52
53
<?php
if(!isset($_POST['submit'])) //NOG NIET OP SUBMIT GEDUKT =>LAAT FORMULIER ZIEN
{
    showForm();
}

else //NA SUMBIT => FORMULIER WEG EN OUTPUT OP HET SCHERM
{
    handleForm($_POST['voornaam'], $_POST['achternaam']);  
}

function
showForm($voornaam="", $achternaam="") //FUNCTIE OM HET FORMULIER OP HET SCHERM TE ZETTEN
{
    echo "<form action='".$_SERVER['PHP_SELF']."' method='POST'>
      <table>
        <tr><td>Voornaam: </td><td><input type='text' name='voornaam' value='"
.$voornaam."' /></td></tr>
        <tr><td>Achternaam: </td><td><input type='text' name='achternaam' value='"
.$achternaam."' /></td></tr>
        <tr><td><input type='submit' value='Laat Zien' name='submit' /></td></tr>
        <tr><td><input type='reset' value='Reset' /></td></tr>
        
      </table>
      </form>"
;
}
function
handleForm($voornaam, $achternaam) //FUNCTIE OM DE OUTPUT TE LATEN ZIEN
{
        $fout        = false; //INITIALISEER FOUTWAARDEN
    $voornaam_fout  = false;
    $achternaam_fout = false;
    
    if($_POST['voornaam'] == "") //CONTROLEREN OP FOUTEN
    {
        $fout          = true;
        $voornaam_fout = true;
    }

    if($_POST['achternaam'] == "")
    {

        $fout            = true;
        $achternaam_fout = true;
    }

    if($fout) //ALS ER WEL FOUTEN ZIJN => LAAT FOUTEN ZIEN
    {
        echo ($voornaam_fout?"<b>Voornaam niet ingevuld</b><br />\n":"\n");
        echo ($achternaam_fout?"<b>Achternaam niet ingevuld</b><br />\n":"\n");
        showForm($_POST['voornaam'], $_POST['achternaam']);
    }

    else  //ALS ER GEEN FOUTEN ZIJN => LAAT OUTPUT ZIEN
    {
        echo "<table>";
            echo "<tr><td>Voornaam: </td><td>".$_POST['voornaam']."</td></tr>";
        echo "<tr><td>Achternaam: </td><td>".$_POST['achternaam']."</td></tr>";
                echo "</table><a href='form.php'>Ga terug</a>\n";
    }        
}

?>

</code>
Dat gaat dus goed. Maar nu wil ik hetzelfde doen met radiobuttons en checkboxes. Dus: als bijvoorbeeld achternaam is vergeten, moeten de reeds aangeklikte radiobuttons en checkboxes wel blijven staan.
Wie kan me daarbij helpen?
 
PHP hulp

PHP hulp

05/11/2024 15:52:39
 
Jel le

Jel le

12/11/2010 14:30:58
Quote Anchor link
edit: M'n html klopte niet helemaal, ik maak hem ff overnieuw voor je
Gewijzigd op 12/11/2010 14:34:41 door Jel le
 
- Mark -

- Mark -

12/11/2010 14:38:51
Quote Anchor link
Dat kun je toch gewoon met checked="checked" doen of niet?

Je script zit wel vol fouten.

- Controleren of een formulier is verzonden doen we met $_SERVER['REQUEST_METHOD'] == 'POST'

- $_POST is een super global dus die hoef je niet aan je functie te voeren, Je hebt ze zelf niet eens gebruikt dus dat had je zelf ook kunnen zien.

- $_SERVER['PHP_SELF'] is onveilig "XSS", gewoon uit typen.

- Ik zou van fout gewoon een array maken. Dat scheelt je weer een aantal regels.

- Je controleerd niet of $_POST voornaam en achternaam wel betaan.

- Gebruik enkele quotes als je html gebruikt, Dan hoef je ook niet alle dubbele quotes in je html te veranderen naar enkele quotes, Dat hoort ook niet zo als ik me niet vergis.

- Er is niet echt veel fout afhandeling op de voornaam en achternaam maar dat zal nog wel komen gok ik.
 
Jel le

Jel le

12/11/2010 14:42:13
Quote Anchor link
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
echo '<input type="radio" name="naam" value="nummer1" ';
if($_POST['naam'] == 'nummer1') echo 'checked="checked" ';
echo '> Nummer1<br />';


echo '<input type="radio" name="naam" value="nummer2" ';
if($_POST['naam'] == 'nummer2') echo 'checked="checked" ';
echo '> Nummer2<br />';


echo '<input type="radio" name="naam" value="nummer3" ';
if($_POST['naam'] == 'nummer3') echo 'checked="checked" ';
echo '> Nummer3<br />';


echo '<input type="radio" name="naam" value="nummer4" ';
if($_POST['naam'] == 'nummer4') echo 'checked="checked" ';
echo '> Nummer4<br />';


Hier heb je vast wel wat aan.
 
Pim B

Pim B

12/11/2010 15:39:53
Quote Anchor link
Een paar radiobuttons in het formulier erbij zetten lukt wel.
Een melding als er geen is gekozen lukt ook.
Maar als er wel 1 gekozen is, maar bijv. achternaam niet, lukt het niet om dat opnieuw in het formulier te laten zien. Ik moet 'm dan meegeven aan de functie showForm(). Met textvelden lukt dat wel, maar met radiobuttons dus niet.

@Mark:
- checked='checked': nee zo simpel is het niet. Het probleem is om de waardes te laten staan na submit, maar als er door de gebruiker iets vergeten is in te vullen (zie de code).

- controleren of het formulier is verzonden: ik heb geleerd om de submitbutton een 'name' te geven en die te controleren. Werkt ook goed.
- superglobal in de functie: klopt, dat was een beetje overbodig :)
- $_SERVER['PHP_SELF']: is dat onveilig? Op deze manier dan kan je wel hetzelfde formulier in meerdere pagina's gebruiken zonder steeds opnieuw de 'action' te hoeven veranderen.
- foutafhandelingen: inderdaad niet echt veel, maar het gaat nu alleen om te kijken of het veld gevuld is
 
Jel le

Jel le

12/11/2010 15:47:14
Quote Anchor link
dat checked="checked" kan je dus hier mee oplossen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
echo '<input type="radio" name="naam" value="nummer2" ';
if($_POST['naam'] == 'nummer2') echo 'checked="checked" ';
echo '> Nummer2<br />';
 
Pim B

Pim B

12/11/2010 16:24:28
Quote Anchor link
Ik kom er niet uit. Waar in de code zet je wat neer?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.