Faire un choix multiple avec une bdd

Faire un choix multiple avec une bdd - PHP - Programmation

Marsh Posté le 20-03-2006 à 13:47:48    

Bonjour à tous,  
 
Je ne m'en sors pas. Je cherche à faire un formulaire de saisi avec un champ destinataires ou la réponse peut être unique ou multiple. Le hic est que dans ma bdd quand je valide il ne sélectionne que ma dernière checkbox sélectionner, il ne regarde pas s'il y en a d'autre.
 
Voici mon code de création d'un message avec la TR qui correspond au champ "destinataires". Pourriez-vous m'aider??
 

Code :
  1. $sql = "INSERT INTO messages (mess_titre, mess_date, mess_message, mess_emetteur, mess_dest) VALUES ( ";
  2.  $sql = $sql . " ' ".$_POST['mess_titre']." ', ' ".$_POST['mess_date']." ', ' ".$_POST['mess_message']." ', ' ".$_POST['mess_emetteur']." ', ' ".$_POST['mess_dest']." ') ";
  3.  $qry = pg_query ( $conn,$sql);


Code :
  1. <tr>
  2.  <td align="right" id="formulaire">Destinataire(s) du message</td>
  3.  <td align="left" id="formulaire">
  4.   <?
  5.   $sql = " SELECT grp_cle, grp_lib FROM grputi";
  6.   $qry = pg_query($conn, $sql);
  7.   while ($result = pg_fetch_object($qry))
  8.    {
  9.   ?>
  10.   <input type="checkbox" name="mess_dest<? for ($i=0; $i>5; $i++) { echo $i; }?>" value="<?=$result->grp_cle?>" <? if ($result->grp_cle == ''.$fetch->mess_dest.'') { echo 'checked'; } ?>><?=$result->grp_lib?>
  11.   <? } ?>
  12.  </td>
  13. </tr>

Reply

Marsh Posté le 20-03-2006 à 13:47:48   

Reply

Marsh Posté le 20-03-2006 à 14:31:55    

Tu n'aurais pas déjà posé cette question par hasard...?
 

Code :
  1. <input type="checkbox" name="mess_dest[<? for ($i=0; $i>5; $i++) { echo $i; }?>]"


 
En nommant dtes checkbox de cette façon tu récupèreras un tableau contenant les valeur de celles qui auront été cochées, après tu n'a plus qu'à faire une boucle pour parcourir ces valeurs.


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 20-03-2006 à 14:56:09    

j_lecruel > Ca sert à rien de mettre un indice pour un élément de formulaire. Tu fais simplement

Code :
  1. <input type="checkbox" name="mess_dest[]" value="labonnevaleur">letexte</input>

et php mettra les bons indice comme il faut. En plus, avec ton code, tu donais le même indice à tout le monde, ca aurait pas mieux marché que ce qu'il avait fait.
 
PS : A noter qu'il faut modifier "labonnevaleur" et "letexte".

Reply

Marsh Posté le 20-03-2006 à 15:02:39    

Exact, j'ai même pas percuté qu'elle faisait une boucle.


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 20-03-2006 à 15:12:14    

ok les garçons mais si je fais ça, cela ne fonctionne pas avec mon premier bout de code correspondant  ma requete...
 
Il faut que je change qqch ici, non?

Code :
  1. 1.
  2.       $sql = "INSERT INTO messages (mess_titre, mess_date, mess_message, mess_emetteur, mess_dest) VALUES ( ";
  3.    2.
  4.               $sql = $sql . " ' ".$_POST['mess_titre']." ', ' ".$_POST['mess_date']." ', ' ".$_POST['mess_message']." ', ' ".$_POST['mess_emetteur']." ', ' ".$_POST['mess_dest']." ') ";
  5.    3.
  6.               $qry = pg_query ( $conn,$sql);

Reply

Marsh Posté le 20-03-2006 à 16:32:02    


Code :
  1. $mess_dest= (isset($_POST['mess_dest'])&&!empty($_POST['mess_dest'])) ? $_POST['mess_dest'] : false;
  2. if(is_array($mess_dest)) {
  3.    foreach($mess_dest as $dest) {
  4.       $sql = "INSERT INTO messages (mess_titre, mess_date, mess_message, mess_emetteur, mess_dest)
  5.                 VALUES ('".$_POST['mess_titre']."', '".$_POST['mess_date']."',
  6.                             '".$_POST['mess_message']."', '".$_POST['mess_emetteur']."', '".$dest."')";
  7.       $qry = pg_query ( $conn,$sql);   
  8.    }
  9. }


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 20-03-2006 à 17:08:13    

OK c'est cool ça fonctionne, c'est exactement ce que je voulais... Tu es trop fort...  
Je vais me tester car j'ai une partie fonction modif...  
 

Code :
  1. global $conn,$mess,$titre;
  2.  $sql = " UPDATE messages SET mess_titre = ' ".$_POST['mess_titre']." ', ";
  3.  $sql .= " mess_date = ' ".$_POST['mess_date']." ', ";
  4.  $sql .= " mess_message = ' ".$_POST['mess_message']." ', ";
  5.  $sql .= " mess_emetteur = ' ".$_POST['mess_emetteur']." ', ";
  6.  $sql .= " mess_dest = ' ".$_POST['mess_dest']." ' ";
  7.  $sql .= " WHERE mess_cle = ".$_GET['cle']." ";
  8.  $qry = pg_query($conn,$sql);

Reply

Marsh Posté le 20-03-2006 à 17:12:52    

j'ai oublié de te demander...
 
En gros le code que tu m'as donné ça veut dire quoi en français pour être sur que je comprenne bien et surtout pouvoir aider les autres plus tard

Reply

Marsh Posté le 20-03-2006 à 17:33:13    

En gros dans la première ligne tu récupère les destinataires sélectionnés, ensuite dans le foreach tu balaye chacun de ces destinataires et tu insère le message dans la base de données.
 
 
Edit : par rapport à ton dernier post, le recours aux variables globales est à éviter autant que possible (dans ton cas il vaux mieux que tu passe les variables dont tu auras besoin en paramètre de ta fonction).


Message édité par j_lecruel le 20-03-2006 à 17:34:48

---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 21-03-2006 à 09:21:33    

depuis hier soir j'ai essayé plusieurs choses mais je n'arrive pas à changer mon dernier post pour que ça fonctionne correctement.
 
Pourriez-vous une nouvelle fois m'aider?? Non pas que je suis fainéante, mais je veux comprendre la logique sans trop m'embrouiller dans des essais et tout mélanger !!
 
Merci d'avance

Reply

Marsh Posté le 21-03-2006 à 09:21:33   

Reply

Marsh Posté le 21-03-2006 à 09:31:09    

Salut,
 
déjà il est plutôt déconseillé (niveau sécurité) d'utiliser directement les variables envoyées par le client ($_POST['var']) dans les requêtes SQL.
 
Ensuite pour faire ce que tu veux... tu fournis en paramètre de ta fonction les destinataires sous formes de tableau, et tu fais ta boucle dans ta fonction pour parcourir ces destinataires et insérer les messages dans ta base de données.
 
En fait je vois pas trop ce qui te pose problème...


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 21-03-2006 à 09:45:17    

Ben en fait c'est moi qui merdouille je ne t'ai pas dit que sur cette page en fait y'avais la fonction création que tu m'a gentilment modifier et la fonction modification que je te redonne. Peux-tu m'éclairer??

Code :
  1. function modif (){
  2.  global $conn,$mess,$titre;
  3.  $sql = " UPDATE messages SET mess_titre = ' ".$_POST['mess_titre']." ', ";
  4.  $sql .= " mess_date = ' ".$_POST['mess_date']." ', ";
  5.  $sql .= " mess_message = ' ".$_POST['mess_message']." ', ";
  6.  $sql .= " mess_emetteur = ' ".$_POST['mess_emetteur']." ', ";
  7.  $sql .= " mess_dest = ' ".$_POST['mess_dest']." ' ";
  8.  $sql .= " WHERE mess_cle = ".$_GET['cle']." ";
  9.  $qry = pg_query($conn,$sql);
  10.  header("Location:adm_listmess.php?mess=5" );
  11.  exit;
  12. }

Reply

Marsh Posté le 21-03-2006 à 09:54:14    

Euh... pas évident de répondre sans connaitre un peu la structure de ta base,  mais à priori tu procèdes de la même manière, tu boucle sur test destinataires en exécutant la requête de modification pour chacun d'eux :
 

Code :
  1. foreach($mess_dest as $dest) {
  2.    $sql = "UPDATE messages SET [...], mess_dest='".$dest."' [...] ";
  3. }


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 21-03-2006 à 10:21:45    

c'est ce que j'avais essayer mes ça ne fonctionne pas.
voici mon code

Code :
  1. function creat (){
  2.  global $conn,$mess,$titre;
  3.  $mess_dest= (isset($_POST['mess_dest'])&&!empty($_POST['mess_dest'])) ? $_POST['mess_dest'] : false;
  4.  if(is_array($mess_dest))
  5.   {
  6.   foreach($mess_dest as $dest)
  7.    {
  8.    $sql = "INSERT INTO messages (mess_titre, mess_date, mess_message, mess_emetteur, mess_dest) VALUES ('".$_POST['mess_titre']."', '".$_POST['mess_date']."', '".$_POST['mess_message']."', '".$_POST['mess_emetteur']."', '".$dest."')";
  9.    $qry = pg_query ( $conn,$sql);   
  10.    }
  11.   }
  12.  header("Location:adm_listmess.php?mess=4" );
  13.  exit;
  14. }
  15. function modif (){
  16.  global $conn,$mess,$titre;
  17.  $mess_dest= (isset($_POST['mess_dest'])&&!empty($_POST['mess_dest'])) ? $_POST['mess_dest'] : false;
  18.  if(is_array($mess_dest))
  19.   {
  20.   foreach($mess_dest as $dest)
  21.    {
  22.    $sql = " UPDATE messages SET mess_titre = ' ".$_POST['mess_titre']." ', ";
  23.    $sql .= " mess_date = ' ".$_POST['mess_date']." ', ";
  24.    $sql .= " mess_message = ' ".$_POST['mess_message']." ', ";
  25.    $sql .= " mess_emetteur = ' ".$_POST['mess_emetteur']." ', ";
  26.    $sql .= " mess_dest = ' ".$dest." ' ";
  27.    $sql .= " WHERE mess_cle = ".$_GET['cle']." ";
  28.    $qry = pg_query($conn,$sql);
  29.    }
  30.   }
  31.  header("Location:adm_listmess.php?mess=5" );
  32.  exit;
  33. }
  34. if (isset($_GET['cle'])){
  35. $sql = 'SELECT * FROM messages WHERE mess_cle = ' . $_GET['cle'] ;
  36. $qry = pg_query ($conn,$sql);
  37. $fetch = pg_fetch_object ($qry);
  38. }

Reply

Sujets relatifs:

Leave a Replay

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