HTML form to PHP field
Mám v HTML FORM 5 checkboxov, ktoré cez POST posielam do PHP.
Ako viem vytvoriť z "checkboxov checked" pole v PHP?
Dá sa spraviť cyklus, ktorý by zaplnil pole, údajmi, ktoré pošle POST alebo treba scriptom overiť všetky checkboxy a vybrať tie, ktoré sú zaškrtnuté a nejako ich dať do pola?
P.S. chcem napísať script, ktorý bude fungovať aj na 100, 200, 500...... checkboxov
pokial mas konecny pocet checkboxov, tak v PHP lahko overis cez isset($_POST['nazov_checkboxu'])
ak to chces ako pole, tak v html staci dat nazov inputu: name="nazov[]". Potom sa ti to posle ako pole.
Problem je, ze HTML neposiela nezaskrtnute checkboxy.
Ja to riesim tak, ze cez javascript urobim post ale predtym nastavim value na 1 vsetky zaskrtnutym checkboxom a 0 nezaskrtnutym. zaroven nezaskrtnute nastavim na checked.
Tuto je kod javascriptu:
dolezite je, aby vo forme si mal namiesto tlacidla typu submit obycajny button s id="submit_tlacidlo" (na ktory sa potom JS odkazuje. napriklad takto:
<input class="submit_tlacidlo" type="button" value="Odoslat" onclick="potvrdenie()">
samozrejme nesmies zabudnut ani na to, aby kazdy input typu checkbox mal jednoznacne ID.
a este jedna vec. PHP ma obycajne obmedzenie na 1000 odoslanych parametrov cez POST. Da sa to zmenit samozrejme v php.ini subore. PHP berie kazdy parameter aj ked je to ako pole zvlast. Cize 1000 checkboxov s nazvom nejakynazov[] bude stale 1000 parametrov, aj ked budes moct interne k tomu pristupovat ako k polu.
Názvy checkboxov si nejako očísluj (c0, c1, c2, ...). Na strane servera prebehni pole $_POST a vytvor si pole s výsledkami:
Ak chceš pracovať s poľom s pevným počtom prvkov, použi SplFixedArray (ak máš k dispozícii verziu 5.3.0 a vyššiu). Ak počet checbkoxov nepoznáš implicitne, pošli si ho v input type=hidden. Je rozumné ohraničiť počet nejakým limitom zhora, nech ti tam nepošle nejaký záškodník niečo zbytočne veľké.
Ako bolo spomenuté, pri veľkých počtoch vstupných prvkov si treba dať pozor na limity, ako je max_input_vars od PHP 5.3.9 (prípadne parsovať POST ručne z file_get_contents("php://input")) a ďalšie (maximálna veľkosť POSTu a pod.).