Checkbox-uri cu nume necunoscut

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
aceveve
Mesaje:5

Checkbox-uri cu nume necunoscut

Salutare,

In primul rand felicitari pentru site-ul aceasta si in special pentru tutoriale & cursuri dar acum sa trec la subiect:

Vreau sa fac un "formular dinamic" asta insemnand ca vreau sa iau niste date dintr-o baza de date iar atributul name al fiecarui input sa fie preluat din baza de date. Pana acum am facut asta si functioneaza:

Cod: Selectaţi tot

<?php 
include ("db.php");
?>
<form name="form1" method="post" action="">
<?php
$query = "SELECT * FROM tabel1";
$result=mysql_query($query);    
while($row = mysql_fetch_array($result)){
    echo $row['approved']. " - ". $row['name'];
    echo "<input type='checkbox' name='".$row['name']."' value='Y'>";
    echo "<input type='checkbox' name='".$row['name']."' value='N'>";
    echo "<br />";
}
?>
<input type="submit" name="sub" value="trimite" />
</form>
Ideea e ca vreau sa pot modifica acel value prin checkbox-uri dar nu reusesc sa fac referire la fiecare input pentru ca este luat din mysql si teoretic nu stiu ce vine din baza de date ( userii pot adauga date in tabel ).

Imi cer scuze daca nu am fost foarte explicit dar este ora 3 noaptea si ma chinui de cateva ore bune.

MarPlo Mesaje:4343
Salut
Personal nu am inteles ce valoare vrei sa modifici, de unde sa fie data cu care vrei sa o modifici, si prin care checkbox-uri sa modifici.
Daca poti fi mai explicit despre actiunea care trebuie realizata, si poate un exemplu cu ceea ce vrei sa faci; poate are cineva vreo idee ajutatoare.

aceveve Mesaje:5
Da, acum am vazut si eu ce am scris pe acolo si nici eu nu as fi inteles. Cert e ca ideea care o aveam ieri nu cred ca e cea potrivita. O sa iti spun ce vreau sa fac.

Vreau ca un user sa trimita date printr-un formular si sa fie stocate in baza de date ( asta stiu ) apoi acele date sa fie afisate iar in dreptul fiecarei valori sa fie 2 checkboxuri care sa poata sa fie neselectate, selectata doar una sau ambele.

Un mic exemplu:

Userul X adauga in baza de date mar si portocala, acestea sunt afisate cu 2 checkboxuri langa ele pe care acelasi user X sa poata sa le bifeze cand este cazul.
Cam asa ar trebui sa arate :

Cod: Selectaţi tot

valoare      trimis1      trimis2
mar           bifat       nebifat
portocala     nebifat      nebifat
Bineinteles ca acesta este doar un exemplu cu 2 valori, in realitate pot sa fie si 100.

Cum pot sa fac chestia asta avand in vedere ca datele pe care le introduce nu le cunosc si nu pot folosi $_POST de ... pentru a bifa acele checkboxuri ?

Mersi anticipat.

MarPlo Mesaje:4343
Presupun ca intai sunt trimise datele din formular si inregistrate in baza de date, apoi sunt selectate si afisate ca checkbox-uri care pot fi selectate si trimise.
In cazul in care nu poti cunoaste initial atributul "name" al checkbox-urilor, poti folosi un singur nume de recunoastere, dar care sa retina toate valorile checkbox-urilor intr-un array, sa rezulte cam asa:

Cod: Selectaţi tot

<input type="checkbox" name="chbox[]" value="mar" />
<input type="checkbox" name="chbox[]" value="portocala" />
Iar in PHP vei avea checkbox-urile selectate si trimise intr-un array bidimensional, pe care le poti recunoaste dupa valoarea lor.

Cod: Selectaţi tot

$chbox = $_POST['chbox'];
// $chbox contine: array(0=>'mar', 1=>'portocala'); daca sunt ambele bifate
O alta solutie ar fi sa retii intr-un array in $_SESSION valoarea pe care o adaugi la "name" cand selectezi si creezi checkbox-urile. Cam asa, la Select:

Cod: Selectaţi tot

$_SESSION['chbox'][] = $row['name'];
echo '<input type="checkbox" name="'.$row['name'].'" value="'.$row['value'].'" />';
 
Apoi, cand checkbox-urile bifate sunt trimise, poti sa parcurgi sesiunea cu numele la toate checkbox-urile, si sa vezi /separi care au fost bifate si care nu.

Cod: Selectaţi tot

$nrchb = count($_SESSION['chbox']);
$selectate = array();
$neselectate = array();
for($i=0; $i<$nrchb; $i++) {
  // adauga separat in cele 2 array numele de la checkbox-urile bifate si nebifate
  if(isset($_POST[$_SESSION['chbox'][$i]])) $selectate[] = $_SESSION['chbox'][$i];
  else $neselectate[] = $_SESSION['chbox'][$i];
}
- Cand se lucreaza cu $_SESSION, trebuie la inceputul fisierului PHP sa fie: session_start(); .