Checkbox et modification de plusieurs id en meme temps

WRInaute passionné
Bonjour,

je cherche à faire :

Checkbox et modification de plusieurs id en meme temps pour une colonne.

En clair j'ai ceci dynamiquement :

[X] oui
[X] oui
[ ] non
[ ] non
[ ] non
[ ] non

Bouton modifier ici

J'aimerais que quand je clic sur le bouton, les enregistrements soit pris en compte.

J'ai essayé et chercher pendant environs 3h...
 
WRInaute passionné
J'ai plusieures checkbox, chacune appartient à un ID d'un enregistrement.
Un colonne nommé XXX avec dedans des oui et des non.
J'ai une donc une liste de checkbox générés à partir de la base sur ma page.
Il faut que si je check une box, la valeur soit OUI dans la colonne XXX, mais tout ceci quand je vais cliquer sur le bouton ENREGISTRER.
 
WRInaute passionné
Merci, mais encore un petit pb, si la valeur est nul, faut que ca set à NON et la ca ne met rien.
 
WRInaute occasionnel
Une autre solution :

Quand tu crées ton formulaire avec n checkbox, tu pourrais y ajouter n+1 champs hidden :
- n champs hidden associés aux n checkbox par un nommage approprié,
- un n+1ème champ hidden nommé count où tu mémorises que tu as n checkbox ds le form

:arrow: Quand tu cliques sur la checkbox Ci tu choppes l'évenement en javascript et tu testes si la case est cochée
Si oui tu mets la valeur du champ hidden Hi à 1 par exemple
Si non 0.

Quand tout ça est posté, une fois de l'autre côté, tu boucles sur les n (connu par count) valeurs des Hi pour écrire tes n updates
 
WRInaute passionné
J'ai trouvé un script javascript mais j'ai pas trop compris comment m'en servir...

Code:
String somepropValue = null;
if((somepropValue = request.getParameter("someprop"))!=null)
{ 
  // ckecked
  Sytem.out.println("The box is checked and its value is " + somepropValue);
}
else 
{
  // not ckecked
  Sytem.out.println("The box is not checked");
  // set the value
  someprop = "false";
}


Voici mon script sur ma page PHP :

Code:
<td width=\"15%\"><input type=\"checkbox\" name=\"xxx[$row[numtop]]\" value=\"xxx\"");if($row[typetop]=="xxx") {echo("checked"); }
else{ echo(""); }echo("> XXX</td>

Code:
if($mode=="enr"){
$xxx = $_POST["xxx"];
while(list($champ,$valeur) = each($xxx)) {
$sql = "UPDATE weebitop SET typetop=\"$valeur\" WHERE numtop=\"$champ\"";
$res = mysql_query($sql) or die($sql.'<br />'.mysql_error());
 }
}
 
WRInaute occasionnel
Si tu veux quelque chose de 100% fiable oublie le JS surtout qu'il n'est absolument pas indispensable dans ton cas.

Si tu as affiché X checkbox, c'est que tu connais cette liste. Ta méthode actuelle te permet de retrouver la liste des checkbox cochées. Voici quelques idées : tu peux par exemple profiter de ta boucle ou tu executes ta requete SQL pour supprimer les valeurs checkées de ta liste initiale. Ensuite il te restera a itérer dans la liste mise à jour (qui ne contiendra plus que les valeurs non cochées), et de réaliser les actions nécessaires.

Une autre possiblité serait de raisonner en itérant dans toute la liste de checkbox (plutot que dans la liste des valeurs cochées) et vérifier si c'est coché, puis d'agir en conséquence..

Fred
 
WRInaute passionné
Je suis vraiment pommé sérieux, j'ai pas arrêter de changer le code et maintenent je sais plus quoi faire... personne na un code tout fait à me passer ? :)
 
WRInaute discret
si tu affiche ta boucle en dynamique, tu peut aussi renseigné la clef du tableau checkbox:

foreach($mes_id as $key=> $value)
echo "<input type="checkbox" name=\"check[$key]\" value=\"1\">$value";

quand tu recupere le tableau, en post par ex:
function action($key)
{
$req="delete from foo where id='$key';
etc...
}
function rien() return0;

foreach ($_POST['check'] as $key=>$tmp) $tmp?action($key):rien();
 
WRInaute passionné
J'ai finalement reussi........................ j'ai commencé hier à la même heure, on peut dire que ce script est le plus long que j'ai jamais fait de ma vie. Malgré tout les conseils, j'ai trouvé un autre moyen perso de le faire, je le post ici au complet pour les gens qui auront envie de voir :

PAGE DU FORMULAIRE :
Code:
<input type="hidden" name="debut" value="$debut">
<input type="hidden" name="limite" value="$limite">
Code:
     <td width=\"15%\"><input type=\"checkbox\" name=\"xxx[$row[numtop]]\" value=\"xxx\"");if($row[typetop]=="xxx") {echo("checked"); }
else{ echo(""); }echo("> XXX</td>");

PAGE DE RECEPTION DU FORMULAIRE :

Code:
<?
//Début de modification des Topsites ---------------------------------------------------------------------------------
require_once("config.php");
//Début et limite des enregistrements pour la page courante
$i = $_POST[debut];
while ($i <= $_POST[limite]) {
$xxx = $_POST['xxx'];
if(! isset($xxx[$i])){
//Verification si l'id du Topsites existe
$query = "SELECT numtop FROM weebitop WHERE numtop='$i'";
$res = mysql_query($query) or die($query.'<br />'.mysql_error());
while($row = mysql_fetch_array($res)) {
//S'il n'existe pas on met une valeur nul pour éviter les erreurs sql
if(empty($row[numtop])) { $i=''; }
//On met à jour la base s'il ce n'est pas cochée avec la valeur par default "nor"
$sql = "UPDATE weebitop SET typetop='nor' WHERE numtop='$i'";
$res2 = mysql_query($sql) or die($sql.'<br />'.mysql_error()); }
}else{
//On met à jour la base si c'est cochée avec la valeur par default "xxx"
$sql2 = "UPDATE weebitop SET typetop='xxx' WHERE numtop='$i'";
$res3 = mysql_query($sql2) or die($sql2.'<br />'.mysql_error());
$i++; }
//Fin de modification des Topsites ---------------------------------------------------------------------------------
?>

Enfin j'ai terminé mon script... je vais sans doute m'en servir un peu partout, faut amortisser les 10h passé dessus.
 
WRInaute passionné
Finalement, j'ai encore un mini pb, vu que ce sont des ID uniques et que j'en éfface, les variables $debut et $limite ne fonctionne plus vu que ca affiche un nombre d'enregistrements...
Je crois qu'il me faut savoir quel est le plus gros ID et le plus petit ID de la page courante, si quelqu'un à une idée pour recuperer ces informations...

Ma requete sql :

Code:
$limite = 20;
if((!$id)||(!is_numeric($id))) {$id=0;}
$debut=$limite*$id;
$query1 = mysql_query("SELECT count(numtop) FROM weebitop"); 
$affichage=mysql_fetch_row($query1);
$result = $affichage[0];
$query = "SELECT numtop,nummembre,titretop,pub,typetop FROM weebitop ORDER BY numtop DESC LIMIT $debut,$limite";

Donc ma question, comment recuperer le plus gros ID et le plus petit ID de la page courante, pour pouvoir les mettre dans la boucle de départ et de fin de la page de reception du formulaire.

Merci de vos réponses!
 
Nouveau WRInaute
jeangab a parfaitement résumé le truc

sinon une autre technique :

Code:
<input type="radio" name="variable[]" value="145">
<input type="radio" name="variable[]" value="275">
<input type="radio" name="variable[]" value="2787">
<input type="radio" name="variable[]" value="74">
<input type="radio" name="variable[]" value="524">
<input type="radio" name="variable[]" value="52">

Code:
for ($i = 0; $i < count($variable); $i++)
{
REQUETESQL WHERE champ = $variable[$i]
}
 
WRInaute passionné
C'est des checkbox et pas des radios, puis le pb est que j'ai des ID uniques, donc forcement ca coince s'il en manque un, c'est pour ca que j'ai fait comme j'ai fait :)
 
Discussions similaires
Haut