Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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

Předmět Autor Datum
pokial mas konecny pocet checkboxov, tak v PHP lahko overis cez isset($_POST['nazov_checkboxu']) ak…
wam_Spider007 18.05.2014 17:51
wam_Spider007
a este jedna vec. PHP ma obycajne obmedzenie na 1000 odoslanych parametrov cez POST. Da sa to zmenit…
wam_Spider007 18.05.2014 17:57
wam_Spider007
Názvy checkboxov si nejako očísluj (c0, c1, c2, ...). Na strane servera prebehni pole $_POST a vytvo… poslední
los 18.05.2014 18:09
los

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:

				function yesno(q) {
					qc = document.getElementById(q).checked
						if(!qc) {document.getElementById(q).checked = 'true'; document.getElementById(q).value = "0"} else {document.getElementById(q).value = "1" }
				}
				
				function potvrdenie()
				{
					var elements = document.getElementsByTagName('input');
					for (var i=0; i<elements.length; i++) {
						if (elements[i].type=="checkbox") {
						yesno(elements[i].id);
						}
					}
				
					document.getElementById("submit_tlacidlo").submit();
				}

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:

$checked = array();
foreach ($_POST as $key => $value)
  if ($key[0] === 'c') {
    $part = substr($key, 1);
    if (is_numeric($part))
      $checked[(int)$part] = TRUE;
  }

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.).

Zpět do poradny Odpovědět na původní otázku Nahoru