Ik heb een fout in mijn script en weet na lang zoeken nog altijd niet wat de fout is. Ik zal het even bespreken:

Ik heb een formulier met checkbox:
=======================

for($i = 0 ; $i < 5 ; $i++)
{
     <input type="checkbox" name="afgelast[]" value="ja"/>Afgelast
     // En nog andere dingen natuurlijk ook
}


Als het formulier verzonden is, heb ik volgende code:
==================================

for($i= 0 ; $i < 5 ; $i++)
{
    $afgelast = $_POST["afgelast"][$i];
				
    if($afgelast == 'ja')
	 $afgelast = '1';
    else
	$afgelast = '0';
}


Notice: Undefined index: afgelast in c:\program files\easyphp1-8\www\website\admin\wijzigspeeldag.php on line 47

Hij geeft deze fout enkel als ik de checkbox NIET heb aangevinkt. Dus als ik 3x aanvink en 2x niet, krijg ik bovenstaande foutmelding 2x. Vink ik de checkbox overal aan, dan krijg ik ze niet.

Regel 47 is volgende regel:
$afgelast = $_POST["afgelast"][$i];

Dus het zit hem duidelijk fout bij die checkbox..
Maar zou echt niet weten wat er nou verkeerd is :\
Niemand die kan helpen?
Doe eens een print_r($_POST); Daar zie je alles wat je verstuurd hebt, misschien zie je dan wat er fout gaat.
Een checkbox zit alleen in de $_POST als ie is aangevinkt.

Edit: En 5 checkboxen die allen dezelfde naam hebben en ook nog dezelfde waarde zijn niet uit elkaar te houden.
Geef je hier geen getal aan mee (aan de checkbox?):


for($i = 0 ; $i < 5 ; $i++)
{
     <input type="checkbox" name="afgelast[]" value="ja"/>Afgelast
     // En nog andere dingen natuurlijk ook
}


Name is overal afgelast[] of worden deze automatisch gevuld met een nummering vanwege de []?
@Kitty: $_POST['afgelast'] is na het posten een array() met alléén de values van de aangeklikte checkboxen. Daarom zal de TS de values een unieke waarde mee moeten geven zodat ze te herkennen zijn. Het doorlopen doe je met een foreach() en niet met een teller of een for().
SanThe schreef op 13.03.2009 16:39
@Kitty: $_POST['afgelast'] is na het posten een array() met alléén de values van de aangeklikte checkboxen. Daarom zal de TS de values een unieke waarde mee moeten geven zodat ze te herkennen zijn. Het doorlopen doe je met een foreach() en niet met een teller of een for().


Bedankt voor de uitleg SanThe.
Alvast bedankt voor de hulp! Dus ik moet alle checkboxen een andere naam geven? En/of een andere waarde?
Nee hoor, je kan gewoon de checkboxen ophalen met foreach(), maar je moet dan wel een manier vinden om ze uit elkaar te houden. Dit kan door een ID eraan mee te geven.


<?php
    for($i=0;$i<5;$i++) {
      echo '<input type="checkbox" name="afgelast[]" value="'.$id.'" />';
    }
?>


Nu kan je ze ophalen met:

<?php
    if(isset($_POST['afgelast']) && is_array($_POST['afgelast'])) {
        foreach($_POST['afgelast'] as $id) {
           // Doe wat je wil met de afgelaste items.
        }
    }
?>


Waar je $id vandaan haalt mag je zelf uitvogelen, maar vermoed dat het uit een database komt?

edit: de $id, kan natuurlijk ook gewoon $i zijn. Maar op dit moment weet ik niet hoe je het gebruikt, want sowieso handmatig een lijstje van 5 items maken klinkt niet echt logiscj?
Gevonden! Bedankt!

IN FORMULIER:
==========

<input type="checkbox" name="afgelast<?php echo $i; ?>" value="ja"/>Afgelast



NA VERZENDEN:
===========


$afg = 'afgelast' . ($i);
			
if(isset($_POST[$afg]))
	$afgelast = '1';
else
	$afgelast = '0';

Reageren