[PHP] Array checkbox status

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Misschien een hele stomme vraag maar ik loop tegen allerlei problemen aan.

Ik wil van een form van een aantal checkboxes de status weten (aangevinkt of niet), die heten op mijn form:

HTML:
1
input name="persoon[]" class="checkbox" type="checkbox" />


'Normaal' als de checkboxen gewoon een naam per stuk hebben lees ik ze gewoon uit met:
PHP:
1
2
3
foreach($_POST['check'] as $value) { 
echo $value;
}


Nu wil ik ze graag uitlezen in een array maar dan hun status ongeacht of deze checked is of niet.

Nu heb ik op mijn form een hidden field gemaakt met daarin het userid van de persoon zodat ik een array heb die altijd iedereen bevat ongeacht de status van de checkbox

HTML:
1
2
<input type='hidden' name='id[]' value='$inlognaam'/>
<input type="checkbox" name="status[]" />


Alleen ik weet niet goed hoe ik dit nu moet uitlezen, met onderstaande krijg ik iig niet het gewenste resultaat en als ik google vindt ik ook niet echt een oplossing of uitleg die bij mijn situatie past.

Bij deze code is het probleem dat de status van de checkboxes door elkaar staan. Als ik 2 checkboxes heb en de onderste is aangevinkt dan geeft hij met deze code weer dat de bovenste is aangevinkt.. 8)7

PHP:
1
2
3
for ($i = 0; $i < sizeof($_POST['id']); $i++) {
echo $_POST['id'][$i]. " - " . $_POST['status'][$i];
}


Iemand die me kan helpen hiermee?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Checkboxes worden alleen meegegeven wanneer ze aangevinkt zijn. Door lege haken te gebruiken wordt er gewoon genummerd vanaf 0. Wil je exact weten welke chekcbox nu aangevinkt was dan moet je geen lege haken gebruiken, maar gewoon iets invullen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Dus bij:
HTML:
1
<input type="checkbox" name="status[]" />


Bij voorbeeld tussen status[] de username stoppen?

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je kunt checkboxes ook een unieke value aangeven. Dan wordt deze gebruikt als request parameter.

E.g.
HTML:
1
2
<input type="checkbox" name="status[]" value="status1" />
<input type="checkbox" name="status[]" value="status2" />
Dus bevat status[] in de server side de waarde "status1" in de array, dan was deze checkbox aangevinkt.

Da's in feite gewoon basic HTML knowledge en niet echt een PHP issue.

[ Voor 9% gewijzigd door BalusC op 21-10-2008 16:10 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Maar dat is het zelfde als dat je bij een checkbox geen value meegeeft. Als ik ze op deze manier doorloop dan weet ik ook welke WEL aangevinkt zijn, maar nog steeds niet welke NIET aangevinkt waren.

Als ik dat probeer met de volgende code, waarin username veld hidden is en is id[] en de checkbox status[] is:

PHP:
1
2
3
4
5
6
7
8
9
for ($i = 0; $i < sizeof($_POST['id']); $i++) {
    if (!$_POST['status'][$i]) {
    $status = 'uit';
    } else {
    $status = 'aan';
    }

    echo $_POST['id'][$i]. " - " . $status."<br/>";
}

Krijg ik ook verkeerde waardes terug...

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom probeer je dan ook indices te matchen terwijl je weet dat die niet gaan matchen? Als je nou de values gebruikt zoals BalusC al zei, dan kun je dus kijken welke elementen uit $_POST['status'] wél in $_POST['id'] voorkomen en welke niet.

Als je toch wel wilt dat je indices matchen dan moet je dus geen lege blokhaken gebruiken, maar blokhaken met een unieke index ertussen per checkbox, zoals Janoz al riep.

[ Voor 26% gewijzigd door .oisyn op 21-10-2008 16:25 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hmm dat snap ik dan nog even niet denk ik.. :?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik heb je vraag 3 keer gelezen en snap echt totaal niet wat je wilt bereiken... Kun je misschien aangeven waarom je wilt weten welke er niet aangevinkt zijn? En als je de lijst hebt van alle gegevens en je hebt de lijst van aangevinkte opties, dan weet je dus dat de overigen niet aangevinkt zijn.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je weet in de server side toch wel welke checkboxen er allemaal zijn? Hoe heb je ze anders allemaal naar de client verstuurd? Je hebt in de server side een lijstje met alle checkboxen en de request komt met een lijstje met checkboxen die aangevinkt zijn. Deze streep je van elkaar weg en wat overblijft zijn de niet-aangevinkte checkboxen. Simple as that.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Nou stel je hebt een form met account, met de checkbox geen je aan of ie disabled is of niet. Als hij nu aanvinkt is en je vinkt hem af dan wil je hem toch ook verwerken?
BalusC schreef op dinsdag 21 oktober 2008 @ 16:36:
Je weet in de server side toch wel welke checkboxen er allemaal zijn? Hoe heb je ze anders allemaal naar de client verstuurd? Je hebt in de server side een lijstje met alle checkboxen en de request komt met een lijstje met checkboxen die aangevinkt zijn. Deze streep je van elkaar weg en wat overblijft zijn de niet-aangevinkte checkboxen. Simple as that.
Hoe 'streep' ik dit tegen elkaar weg? Ook door er doorheen te loopen?

[ Voor 61% gewijzigd door ViNyL op 21-10-2008 16:37 ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je hebt in de server side toch al de initiele waarde? Deze vergelijk je dan met de binnenkomende request.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

ViNyL schreef op dinsdag 21 oktober 2008 @ 16:29:
Hmm dat snap ik dan nog even niet denk ik.. :?
Welk gedeelte, de eerste alinea of de tweede alinea?

Eerste alinea:
$items = array(aap, noot, mies, vis, vuur, kees, henk, piet)
$status = array(noot, kees, piet)
Goh, welke items zijn er nu niet gechecked? Nou, wat dacht je van alle elementen die wel in $items staan maar niet in $status. Hoe pak je dat aan? Simpel, loop door de elementen in $items, en kijk voor elk element waar je langs komt of hij toevallig in $status staat. Hoe controleer je of een element in een array voorkomt? Door er doorheen te lopen tot je 'm vind. Vind je 'm niet, dan staat ie er niet in.
Of, en hoewel bovenstaande een goede programmeerles is, kun je ook gewoon het wiel niet proberen uit te vinden en de documentatie over arrays te lezen. array_diff() comes to mind...

Tweede alinea:
Zie ook eerste alinea waarom de array indices niet overeen komen. $items is een array van 0 tot N met alle elementen, $status is een array van 0 tot M met alleen de aangevinkte elementen. Logisch dat element 4 in $status niet overeen komt met element 4 in $items. Dit kun je oplossen door geen lege blokhaken te gebruiken in de html:

HTML:
1
2
3
<input type="checkbox" name="status[0]"/>
<input type="checkbox" name="status[1]"/>
<input type="checkbox" name="status[2]"/>

Klik een paar checkboxes aan en submit dat, en kijk nu wat je output is.

Dit nog even naast het feit dat het idd raar is dat je alle data met de pagina mee gaat sturen. Dat zou je op een later punt ook gemakkelijk moeten kunnen achterhalen.

[ Voor 30% gewijzigd door .oisyn op 21-10-2008 16:42 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

ViNyL schreef op dinsdag 21 oktober 2008 @ 16:36:

Hoe 'streep' ik dit tegen elkaar weg? Ook door er doorheen te loopen?
Hier komt PHP bij kijken. Deze scripttaal kent een heleboel array functies. De array_diff() is hierboven al genoemd.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ok I think I get it now. Ga er eens even mee aan de slag.

@.oisyn: Krijg overigens wel door de antwoorden een beetje het idee dat vragen stellen niet gewaardeerd wordt, maar dat kan aan mij liggen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Vragen stellen zonder zelf een beetje na te denken en inzet te tonen wordt idd niet gewaardeerd, dat klopt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
.oisyn schreef op dinsdag 21 oktober 2008 @ 16:43:
Vragen stellen zonder zelf een beetje na te denken en inzet te tonen wordt idd niet gewaardeerd, dat klopt :)
Volgens mij valt het met die inzet behoorlijk mee, maar wat ik niet weet kan ik ook niet proberen right? Beetje makkelijk gedacht dat ik niet wil proberen..

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Lees de tweede reactie van je in dit topic eens. Je vraagt daar of je iets moet doen. Je zou dat natuurlijk ook gewoon eens kunnen proberen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja daar heb je ook wel gelijk in maar ik open dit topic natuurlijk niet als ik niet al een tijd bezig ben en op internet gezocht heb. Ik probeer de suggesties hier direct uit, maar ik weet niet hoe alles werkt..

Thanks voor alle input iig!
Pagina: 1