Conjuger un formulaire et une liste d'items

Conjuger un formulaire et une liste d'items - PHP - Programmation

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 :
 
 

Code :
  1. while ($donnees = mysql_fetch_array($resultat) )
  2. {
  3.         echo '<fieldset>';
  4.         ...
  5.         echo '</fieldset>';
  6.         }


 
 
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 :
 

Code :
  1. "<a href=\"modif.php?id_mc=$id_mc\" title=\"Modifier le courrier numéro $id_mc\"><img src=\"images/modif.png\" /></a> ";


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 :
 
 
 
 

Code :
  1. while ($donnees = mysql_fetch_array($resultat) )
  2. {
  3.         echo '<fieldset>';
  4.         ...
  5.         $nom_envoye=$id_mc.'_envoye';
  6. $nom_radiation=$id_mc.'_radiation';
  7. $variable.="<p><input type=\"checkbox\" name=\"$nom_envoye\" /> Courrier Envoyé<br />";
  8. $variable.="<input type=\"checkbox\" name=\"$nom_radiation\" /> Courrier Radié</p>";
  9.         ...
  10.         echo '</fieldset>';
  11.         }


 
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 :

Code :
  1. <form method="post" action="liste_arrivee_maj.php">

 
 
 
 
ce que je ne visualise pas c'est la récupération des variables :
cela devrait donner un truc du genre :
 

Code :
  1. if($_POST['la_bonne_variable']=='on'){je mets à jour ma BD}


 
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?

Reply

Marsh Posté le 09-02-2009 à 15:41:19   

Reply

Marsh Posté le 09-02-2009 à 16:14:03    

pourquoi tu fait pas  

Code :
  1. while ($donnees = mysql_fetch_array($resultat) )
  2. {
  3. .....
  4.         $nom_envoye=$id_mc.'_envoye';
  5. $nom_radiation=$id_mc.'_radiation';
  6.             if($_POST[$nom_envoye]){ maj BD} // tu recupere $nom_envoye de ta BD, comme tu as fait pour le formulaire
  7. }


Message édité par infoman64 le 09-02-2009 à 16:15:32
Reply

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!


Message édité par manuzed le 09-02-2009 à 16:22:35
Reply

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?

Reply

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'] .


Message édité par omega2 le 09-02-2009 à 16:26:33
Reply

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?

Reply

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?

Reply

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.

Reply

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 ;-)?

Reply

Marsh Posté le 09-02-2009 à 17:20:18    

[:roane]  
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.

Reply

Marsh Posté le 09-02-2009 à 17:20:18   

Reply

Marsh Posté le 10-02-2009 à 09:10:38    

Oui effectivement je n'avais pas compris!
je vais essayer ca!

Reply

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

Reply

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)

Reply

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!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed