Radiobuttons en checkboxes waarvan de input blijft staan
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)
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
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";
}
}
?>
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?
Gewijzigd op 12/11/2010 14:34:41 door Jel le
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 />';
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.
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
Ik kom er niet uit. Waar in de code zet je wat neer?