2010-03-24 3 views
0

J'ai un tableau de cases à cocher que je modifie à la fois pour mettre en place un champ 'tinyint'. le problème vient quand je décoche la case à cocher et affiche les vales à mysql. comme il affiche un tableau de cases à cocher et un autre tableau parallèle de valeurs à éditer, décocher une case à cocher dans la valeur 0 a été ignoré par PHP_POST et donc le tableau de cases à cocher sera inférieur au nombre de valeurs non cochées dans le formulaire alors que le tableau sera édité aura tous les enregistrements dans le formulaire.cases à cocher php mysql parallel array

ici est le soumettre le code

while($row=mysql_fetch_array($result)) 
{ 

$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[]' value='$row[active]''$checked' >"; 
... 

et le script de traitement php

$userid = ($_POST['TrID']); 
$checked= ($_POST['active']); 

$i=0; 

foreach ($userid as $usid) 
{ 

if ($checked[$i]==1){ 
$check = 1; 
} 
else{ 
$check = 0; 
} 

$qry1 ="UPDATE `epapers`.`clientelle` SET `active` = '$check' WHERE `clientelle`.`user_id` = '$usid' "; 
$result = mysql_query($qry1); 
$i++; 

} 
+0

Le problème est qu'il n'y a rien POSTed pour une case à cocher non cochée ... – Franz

Répondre

0

Vous pouvez essayer quelque chose comme:

$i = 0; 
while($row=mysql_fetch_array($result)) 
{ 

$i++; 
$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[{$i}]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[{$i}]' value='$row[active]''$checked' >"; 
... 

Les cases doivent alors au moins être au bon endroit dans le tableau ...

+0

Cela ne devrait pas fonctionner. Vous auriez encore moins d'éléments dans le second tableau que dans le premier. – Franz

+0

cela fonctionne depuis 'if ($ checked [$ i] == 1) {' incrémente de 0 alors que POST publie $ checked comme '$ checked [$ i]', quand '$ checked [$ i]' n'est pas affiché quand il est 0, '$ check' devient 0 donc le code fonctionne !! –

+0

Cela ne signifie-t-il pas que vous pouvez obtenir une erreur "index indéfini" en fonction du paramètre 'error_reporting'? – Franz

0

Vous pouvez utiliser la clé du premier réseau pour aller chercher l'élément correct du deuxième ...

$userid = ($_POST['TrID']); 
$checked= ($_POST['active']); 

foreach ($userid as $key => $usid) 
{ 

if ($checked[$key]==1){ 
$check = 1; 
} 
else{ 
$check = 0; 
} 

$qry1 ="UPDATE `epapers`.`clientelle` SET `active` = '$check' WHERE `clientelle`.`user_id` = '$usid' "; 
$result = mysql_query($qry1); 

} 

EDIT Si cela ne fonctionne pas, essayez d'ajouter des index numériques aux noms d'éléments dans le code HTML. Comme ceci:

echo "<input type='hidden' name='TrID[".$i."]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[".$i++."]' value='$row[active]''$checked' >"; 

Vous auriez évidemment de mettre $i à zéro avant que la boucle.

0

cases à cocher ne doit pas avoir le même nom, mais chacun devrait être nommé différemment. Vous pouvez résoudre votre problème en modifiant la première page comme ceci:

$i = 0; 
while($row=mysql_fetch_array($result)) 
{ 

$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[$i]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[$i]' value='$row[active]''$checked' >"; 
$i++; 
... 

et ajuster en conséquence le second script ...

+0

Affecter les éléments à un tableau leur donne des noms différents. – Franz

+0

En PHP mais pas en HTML – Kjir

0

J'ai mon propre script que j'utilise pour ce faire ... voir si vous pouvez adaptez-le ou si je suis sur la bonne voie avec ce que vous essayez de faire. Schéma: Lignes de produits avec une case à cocher que l'utilisateur peut vérifier pour indiquer que ce produit doit être ajouté au panier afin de voir le prix.

code:
<td><input type="checkbox" name="addforprice[<?php echo $record['id']; ?>]" /></td>

Ensuite, lorsque le formulaire est soumis:

if ($ _ POST [ 'addforprice']) {
foreach (array_keys ($ _ POST [ 'addforprice']) comme $ var) {
$ data ['add_for_price'] = 1;
$ update = $ db-> query_update (TABLE_PRODUCTS, $ data, "id =". $ Var);
echo "addforprice:". $ Var. ' '. $ data [' add_for_price '].«
»;
unset ($ data ['addforprice']);

} }

$record['id'] est l'ID de base de données générée lors de l'impression sur les lignes.