Skip to content

Mihai Baboi

Vorbim despre mașini, tehnologie și nu numai

Menu
  • Home
  • Despre mine
  • Despre blog
  • Contact
  • Privacy Policy
Menu

Cum adunam date de la un Checkbox nebifat

Posted on September 10, 2010

Zilele trecute m-am intalnit cu o situatie inedita. Se da problema: Un formular care printre altele avea cateva campuri de tip checkbox, care erau create dinamic (deci puteau sa varieze ca numar).

Fisierul PHP in care lucram cu datele trebuia sa se uite la fiecare din campurile completate si sa ia devizii in functie de ce a venit de la input. Aici am descoperit o problema pe care, desi are sens, nu am realizat-o pana acum. Checkbox-urile nebifate nu sunt adaugate deloc in $_POST.

De ce se intampla asta? Pai, dupa logica mea este un comportament normal. Avem checkbox-ul:

	<input type="checkbox" name="isActive" value="1" />

Respectivul cod, ii spune browser-ului sa randeze un Checkbox, care atunci cand este bifat, sa aiba valoarea “1”. Din pacate, nu exista si un atribut care sa ne spuna valoarea checkbox-ului in stadiul nebifat. Din acest motiv, acesta nu mai ajunge in $_POST.

In mod normal, acest comportament nu pune probleme foarte mari. In cel mai rau caz, ca sa evitam probleme acolo unde validam datele, putem sa folosim un cod de genul:

<?php
	if(isset($_POST["isActive"]))
	{
		// Code goes here
	}
?>

Dar, asa cum spuneam mai devreme, in acest caz avem de-a face cu checkbox-uri generate dinamic, iar ele trebuiesc verificate indiferent daca sunt bifate sau nu. Am cautat un pic pe internet si am gasit doua abordari la aceasta problema. Prima implica JavaScript si nu am de gand sa o detaliez. In mare, foloseste JavaScript pentru a seta o valoare pentru un checkbox cand e bifat si alta cand nu e.

Mi s-a parut o solutie inutil de laborioasa, asa ca nu am considerat-o viabila. Cea de-a doua, in schimb, mi-a placut. Se foloseste de un alt comportament al input-urilor pe care il banuiam, dar nu l-am cercetat niciodata. Anume, input-urile cu acelasi nume se suprascriu unul pe celalalt. Prin urmare, solutia arata asa:

	<input type="hidden" name="isActive" value="0" />
	<input type="checkbox" name="isActive" value="1" />

Ce face codul de mai sus? Seteaza un input ascuns care contine valoarea pentru checkbox-ul nebifat. Daca se face submit fara ca checkbox-ul sa fie bifat, in $_POST va ajunge valoarea input-ului de tip hidden. In schimb, daca checkbox-ul este bifat, acesta suprascrie valoarea input-ului ascuns, incarcand $_POST cu valoarea 1.

Tin sa mentionez ca nu sunt 100% multumit de aceasta solutie. Nu mi se pare elegant sa adaugi cate un input ascuns pentru fiecare checkbox, la care ai nevoie de o astfel de validare, dar in lipsa de altceva, este solutia pe care am adoptat-o. Daca mi-a scapat mie ceva si stiti vreo solutie mai buna la aceasta problema, va rog sa-mi dati de stire.

Share this:

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • Analiză Tehnică
  • Auto
  • Comunicate
  • Concurs
  • Diverse
  • Evenimente
  • Foto
  • Hardware
  • Întreabă-mă
  • Lansări
  • Mașini
  • Noutăți auto
  • Opinie
  • Programare
  • Review
  • Scurte
  • Șed și Cuget
  • Zvonuri

allview Android aspect autonomie browser bune practici camera CodeIgniter Code Igniter Cold Fusion concluzii concurs css3 display div dual core Evolio evoMAG evoMAG.ro hardware HTC html html5 instalare lansare laptop Library libris.ro marketonline Nikon nokia performanta pret programare review samsung Samsung Galaxy S II smartphone specificatii standarde Symbian tableta teste upgrade user experience

©2025 Mihai Baboi | Design: Newspaperly WordPress Theme