waarde uit array verwijderen
Pagina: « vorige 1 2 3 4 volgende »
Het VELD (text) waar de checkbox naast staat is niet verplicht meer als de checkbox is uitgevinkt.
Gewijzigd op 19/12/2010 01:09:02 door Peter van den Dungen
plaats nou je code eens!
Maar de vraag is eigenlijk alleen:
Hoe haal ik een waarde uit vermelde array als ik de positie niet weet?
Ik begreep dat dat zonder key niet lukt, maar met die &key vermelding snap ik nog niet helemaal.
De rest is denk ik te groot om zo op tafel te gooien.
Het gaat om de relevante code... het formulier en de array... maja... never mind zo kan ik je ook niet helpen hoor.
Het formulier kan je toch wel plaatsen neem ik aan?
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
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
<div id="tabel_1g">
<?php
$opmaak_m = (isset($_POST['check_m']) & (in_array('prijs_m',$errors) || ($prijs_m_error == 1))) ? 'input_error_center':'input_center';
?>
<fieldset class="fs_nieuweaanvraag">
<legend class="legend_nieuweaanvraag"></legend>
<table class="tabel_nieuweaanvraag">
<tr class="tr_nieuweaanvraag">
<td class="td_nieuweaanvraag2">
<label class="label_nieuweaanvraag">Prijs m</label>
</td>
<td>
<label class="label_nieuweaanvraag2"><?php echo "€" ?></label>
</td>
<td>
<input
class="<?php echo $opmaak_m ?>"
type="text"
name="prijs_m"
size="15"
value="<?php if (isset($_POST['datum_aanvraag'])) {echo $_POST['prijs_m'];}?>"
/>
</td>
<td>
<?php
$mcheck = (!empty($_POST['check_m']) ? "checked": "");
$mcheck .= (!isset($_POST['datum_aanvraag']) ? "checked": "");
echo '
<input
class="checkbox_nieuweaanvraag"
type="checkbox"
name="check_m"
' . ($mcheck == 'checked' ? 'checked="checked"': "").'/>
</td></tr>
</table>
</fieldset>
</div>
';
?>
<?php
$opmaak_m = (isset($_POST['check_m']) & (in_array('prijs_m',$errors) || ($prijs_m_error == 1))) ? 'input_error_center':'input_center';
?>
<fieldset class="fs_nieuweaanvraag">
<legend class="legend_nieuweaanvraag"></legend>
<table class="tabel_nieuweaanvraag">
<tr class="tr_nieuweaanvraag">
<td class="td_nieuweaanvraag2">
<label class="label_nieuweaanvraag">Prijs m</label>
</td>
<td>
<label class="label_nieuweaanvraag2"><?php echo "€" ?></label>
</td>
<td>
<input
class="<?php echo $opmaak_m ?>"
type="text"
name="prijs_m"
size="15"
value="<?php if (isset($_POST['datum_aanvraag'])) {echo $_POST['prijs_m'];}?>"
/>
</td>
<td>
<?php
$mcheck = (!empty($_POST['check_m']) ? "checked": "");
$mcheck .= (!isset($_POST['datum_aanvraag']) ? "checked": "");
echo '
<input
class="checkbox_nieuweaanvraag"
type="checkbox"
name="check_m"
' . ($mcheck == 'checked' ? 'checked="checked"': "").'/>
</td></tr>
</table>
</fieldset>
</div>
';
?>
De 'input_error_center' in de class geeft een rode border.
Toevoeging op 19/12/2010 01:40:02:
De $prijs_m_error == 1 is een controle op geldige invoer, dus geen letters in een geb.datum etc (dit is een preg_match)
Ik kan hier niks mee. Onvoldoende informatie.
Wat wil je nog meer zien?
Je kunt, om jezelf te helpen ontwikkelen, op de plek waar je verwacht een waarde teveel te hebben, de hele array eens op het scherm dumpen
mijn lievelings-snippet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if (isset($_POST['datum_aanvraag'])) {
if (!isset($_POST['checkbox1'])) unset($verplichte_velden['veld_bij_checkbox1']);
if (!isset($_POST['checkbox2'])) unset($verplichte_velden['veld_bij_checkbox2']);
if (!isset($_POST['checkbox3'])) unset($verplichte_velden['veld_bij_checkbox3']);
$errors = array();
foreach($verplichte_velden as $veldnaam) {
if (!isset($_POST[$veldnaam])) $errors[]=$veldnaam;}
}
}
?>
if (isset($_POST['datum_aanvraag'])) {
if (!isset($_POST['checkbox1'])) unset($verplichte_velden['veld_bij_checkbox1']);
if (!isset($_POST['checkbox2'])) unset($verplichte_velden['veld_bij_checkbox2']);
if (!isset($_POST['checkbox3'])) unset($verplichte_velden['veld_bij_checkbox3']);
$errors = array();
foreach($verplichte_velden as $veldnaam) {
if (!isset($_POST[$veldnaam])) $errors[]=$veldnaam;}
}
}
?>
Checkbox1 t/m checkbox3 moet je vervangen door de juiste namen, net als veld_bij_checkbox1 t/m veld_bij_checkbox3.
Wat je nu dus doet is dat je eerst controleert of de checkbox aan- of uitstaat. Als de checkbox uitstaat dan haal je de veldnaam die bij die checkbox hoort uit de array met de verplichte velden. Dit doe je voor alle 3 de checkboxen. Nadat je dit hebt gedaan bevat de array met verplichte velden precies de juiste veldnamen waarop gecontroleerd moet worden en pas op dat moment ga je dus de foreach loop uitvoeren.
Waarschijnlijk omdat er geen array(errors) bestaat zolang het formulier niet verzonden is. Ga nog even verder puzzelen.
In het form zelf staat:
Code (php)
1
$opmaak_m = (isset($_POST['check_m']) & (in_array('prijs_m',$errors) || ($prijs_m_error == 1))) ? 'input_error_center':'input_center';
Toevoeging op 19/12/2010 18:32:53:
Bas Cost Budde op 19/12/2010 13:03:32:
Dit wordt inderdaad al gedaan.
heb een div aangemaakt waar de eventule errors in worden getoond en tevens de inhoud van de array.
Bas Cost Budde op 19/12/2010 18:37:10:
Doet dit wat anders dan if(isset($_POST['datum_aanvraag'])) dan?
datum_aanvraag is een hidden field die ik gebruik voor de controle of de form verzonden is.
Toevoeging op 19/12/2010 19:22:46:
Als ik maar 1 veld in de array heb staan, dus deze krijgt positie 0,
dan werkt alles als ik hem unset met:
if (!isset($_POST['veld1'])) {unset($errors[0]);}
Is er dan geen manier als ik de positie niet weet ?
dus zoiets als:
if (!isset($_POST['veld1'])) {unset($errors['veld1']);}
Gewijzigd op 19/12/2010 19:24:52 door Peter van den Dungen
Ik snap niet meer wat je aan het doen bent nu. Errors is toch een lege array? Daar komt alleen iets in te staan als een veld niet is ingevuld. Waarom zou je dan in die array iets gaan unsetten???
De array is dus inderdaad leeg, maar bij het versturen van het formulier is dus dat veld leeg. En omdat deze leeg is komt ie in de array te staan.
Nee, die komt niet in die array te staan, want je moet die velden unsetten uit de array met verplichte velden zoals ik eerder al heb laten zien. Die velden staan dan niet meer in de array met verplichte velden en kunnen dus ook niet in de array met errors terecht komen. Snap je?
Veld leeg na versturen => komt in array => unsetten als de checkbox niet in aangevinkt => doorgaan met controle op juiste gegevens => in tabel plaatsen
Formulier is verstuurd => 3x checken of checkbox is uitgevinkt, zo ja dan de velden verwijderen uit de verplichte velden array => foreach loop uitvoeren.
Snap je het nou?
Dus ook unset($verplichte_velden['veld_bij_checkbox1']); wat jij voorstelde kreeg ik niet aan de praat
if (!isset($_POST['naam_van_checkbox'])) unset($verplichte_velden['naam_van_veld']);
Je moet geen waardes in de $errors array unsetten!
Duidelijk?