Conjuger un formulaire et une liste d'items - PHP - Programmation
Marsh Posté le 09-02-2009 à 16:14:03
pourquoi tu fait pas  
| Code : 
 | 
Marsh Posté le 09-02-2009 à 16:18:40
Et bien je crois que je ne peux pas faire ca : 
: 
quand je liste mes objets avec  
 
   1. while ($donnees = mysql_fetch_array($resultat) ) 
   2. { 
   3. ..... 
   4  } 
tous est décoché par exemple 
 
et c'est ensuite que l'utilisateur peut cocher 
alors soit je trouve un moyen de le faire en AJAX (mais c'est chaud quand on ne connait pas) 
soit par exemple il existe un moyen de lister tout ce qui est passé en POST sans forcement en connaitre le nom et ensuite je boucle dessus pour mes maj de BD. 
 
car le probleme est bien la: j'ai une liste de $_POST['...'] qui arrive bien mais comme les noms sont générés, je ne sais pas comment les appeler!
Marsh Posté le 09-02-2009 à 16:21:38
mais je comprends pas, ta boucle while ou tu affiche les données de ta bd, tu peut refaire la meme apres la validation?
Marsh Posté le 09-02-2009 à 16:26:21
Salut, 
Essaye avec un truc du genre '<INPUT type="checkbox" value="15" nom="supprimer[]">' et ensuite en bouclant sur le tableau $POST['supprimer'] .
Marsh Posté le 09-02-2009 à 16:28:40
tu peux refaire la meme apres la validation? 
Et oui difficile d'expliquer sans montrer ;-) 
imagine une base vierge 
je rentre 3 courriers 
mes cases à cocher sont vierges : les 3 courriers sont ni envoyés ni radiés 
 
je liste mes courriers avec 
 1. while ($donnees = mysql_fetch_array($resultat) ) 
   2. { 
   3. ..... 
   4  }  
dans les 3 courriers affichés je propose la possibilité de cocher "radié" et "envoyé" 
imagine que je coche tout  
dans ma page qui reçoit les modifs, 
il y a donc 6 $_POST['...'] qui arrivent  
qui se nomment :  
1_radiation 
2_radiation 
3_radiation 
mais aussi  
1_envoye 
2_envoye 
3_envoye 
 
et si je fais : 
if (isset($_POST['1_radiation'])) 
 { 
 echo 'test'; 
 } 
 
cela fonctionne niquel 
 
mais comment récupérer tous les POST dans une feuille? 
 
Tu comprends?
Marsh Posté le 09-02-2009 à 16:31:02
omega2, tu touches du doigt mon probleme : 
ma liste affiche 50 courriers par page 
 
si je fais  
<INPUT type="checkbox" value="15" nom="supprimer[]">' et ensuite en bouclant sur le tableau $POST['supprimer'] 
comment savoir quelle courrier affecter? 
il faut bien que je mette un identificateur unique sur chaque checkbox 
et donc comment récupérer cet identifiant?
Marsh Posté le 09-02-2009 à 17:07:22
Le value contient l'identifiant. 
Quand tu reçois les données, t'auras un tableau qui correspondra en gros à ça : 
$POST = array( 
    'supprimer' => array( 
        8, 
        15, 
        43 
    ), 
    'poster' => array( 
        22, 
        31 
   ); 
); 
 
En bouclant sur $_POST['supprimer'], tu récupèreras successivement les valeurs 8, 15 et 43 et il te suffit de supprimer les éléments qui correspondent vu que le formulaire t'as indiqué clairement lesquels sont à supprimer.
Marsh Posté le 09-02-2009 à 17:16:44
Oula, tres intéressant comme idée ça : 
en fait il faut plutôt que je nomme mes checkbox  
comme ca 
$nom_envoye='envoye_'.$id_mc; 
$nom_radiation='radiation_'.$id_mc; 
au lieu de  
$nom_envoye=$id_mc.'_envoye'; 
$nom_radiation=$id_mc.'_radiation'; 
 
pour pouvoir suivre cette methode... 
Par contre comment boucler sur 
$_POST['envoye'] et $_POST['radiation'] sachant que dans le script je ne peux pas mettre des ID en dur bien sur ;-)? 
Marsh Posté le 09-02-2009 à 17:20:18
![[:roane] [:roane]](https://forum-images.hardware.fr/images/perso/roane.gif) 
  
Relis mieux mon exemple. 
L'id n'a aucune raison d'être dans le "name" du composant. 
L'id doit être dans le "value" du composant.
Marsh Posté le 10-02-2009 à 09:10:38
Oui effectivement je n'avais pas compris! 
je vais essayer ca!
Marsh Posté le 10-02-2009 à 10:30:54
 
  
 
 
OK alors je recapitule : 
 
$variable.="<p><input type=\"checkbox\" value=\"$id_mc\" name=\"envoyer[]\" /> Courrier Envoyé<br />"; 
$variable.="<input type=\"checkbox\" value=\"$id_mc\" name=\"radier[]\" /> Courrier Radié</p>"; 
 
 
 
et sur ma page de traitement, 
si je liste les éléments du tableau 
 
$test=$_POST['radier']; 
print_r($test); 
 
 
je vois bien les différents courriers que j'ai coché 
voici un copier coller : Array ( [0] => 6407 [1] => 6408 [2] => 6409 [3] => 6410 ) ou on voit bien les trois courrier que j'ai coché  
 
 
par contre je suis un bille en variable tableau... et je n'arrive pas à trouver un truc pour récupérer les différents numéros pour leur appliquer une mise à jour dans ma BD 
Marsh Posté le 10-02-2009 à 10:57:42
http://fr3.php.net/manual/fr/book.array.php 
et plus précisément http://fr3.php.net/manual/fr/contr [...] oreach.php (disons que c'est plus simple dans ce genre de cas)
Marsh Posté le 10-02-2009 à 11:36:56
ok niquel :j'ai fait ça : 
$tableau_envoie=$_POST['envoyer']; 
foreach($tableau_envoie as $courrier_a_envoyer) 
 { 
 echo $courrier_a_envoyer.'<br />'; 
 } 
 
$tableau_radiation=$_POST['radier']; 
foreach($tableau_radiation as $courrier_a_radier) 
 { 
 echo $courrier_a_radier.'<br />'; 
 } 
je n'ai plus qu'a faire une opération par numéro de courrier!
Marsh Posté le 09-02-2009 à 15:41:19
Hello eve riz beau di
J'ai une liste de mes courriers que je fais apparaitre de cette manière :
Chaque courrier étant dans un fieldset
je passe sur le code en détail bien sur
Ce que je fais d'habitude pour modifier un courrier (ou un item quelconque)
c'est ce genre de truc :
qui amène vers une page différente.
Mais ce que je cherche à faire cette fois c'est pour chaque courrier mettre une case à cocher ce qui donne ceci :
Une simple case à cocher pour mettre le courrier "à envoyer" et ou "radié"
le fait de mettre des cases à cocher me permettrai de cocher X courriers à la fois sans avoir à modifier les X courriers séparément dans une page de traitement différente pour chaque courrier.
le tout etant englobé dans un formulaire :
ce que je ne visualise pas c'est la récupération des variables :
cela devrait donner un truc du genre :
mais comme je génère le nom de la case à cocher avec l'id du courrier + une partie fixe (pour différencier envoyé et radié)
je ne vois pas trop comment récupérer mes données
quelqu'un a déja fait ce genre de truc?