mettre à jour une table à partir d'un dragdrop YUI

mettre à jour une table à partir d'un dragdrop YUI - PHP - Programmation

Marsh Posté le 17-03-2008 à 09:52:32    

Bonjour,
 
j'ai réalisé un draganddrop avec YUI qui est très utile de div dans un formulaire.
 
Maintenant ce que je voudrais faire c'est faire une mise à jour de ma table.
Mais comme c'est quelque chose de visuel je ne vois pas trp comment faire. A part peut-être en retrouvant l'id de la div.
 
Voilà mon html avec les champs à mettre à jour.En fait comme c'est un drag and drop c'est l'ordre des enregistrements  que je dois mettre à jour.
 

Code :
  1. <div class=ddentry id="bb$i">
  2.             Type : <input type="text" name="type_$i" id="type_$i" value= "$R[struct_type_stream]" ><br />
  3.             Nom : <input type="text" name="nom_$i" id="nom_$i" value= "$R[struct_nom]"><br />
  4.             Libelle : <input type="text" name="libelle_$i" id="libelle_$i" value= "$R[struct_libelle]" ><br />
  5.             Type des données : <input type="text" name="datatype_$i" id="datatype_$i" value="$R[struct_datatype]" >
  6.             <input type=hidden name="sturct_id_$i" id="sturct_id_$i" value="$sturct_id">
  7.          </div>


 
 
et voilà le début de ma fonction php qui récupère cela et dois mettre à jour la table. Je sais même pas si mon update est juste. :
 

Code :
  1. function pimpValiderStructureDocument($html)
  2. {
  3.  $sturct_id = $_POST['sturct_id'];
  4.  $struct_type = $_POST['type'];
  5.  $struct_nom = $_POST['nom'];
  6.  $struct_libelle = $_POST['libelle'];
  7.  $struct_datatype = $_POST['datatype'];
  8.  foreach($_REQUEST as $k => $v)
  9.  {
  10.   $k = split ("_", $sturct_id, 7);
  11.   $sql = "update stream_structure_2
  12.     set struct_type_stream='" . $struct_type . "', struct_nom='" . $struct_nom . "', struct_libelle='" . $struct_libelle . "', struct_datatype='" . $struct_datatype . "'
  13.     where sturct_id='" . $sturct_id . "'" ;
  14.  }
  15. }


 
Avez-vous une idée de comment faire?  
Merci d'avance

Reply

Marsh Posté le 17-03-2008 à 09:52:32   

Reply

Marsh Posté le 19-03-2008 à 10:41:16    

bonjour à tous,
 
sa y es j'ai résolu mon problème. J'ai appris un truc très utile en php, c'est les regex. Et encore je trouve que celle que j'ai utilisé est pas compliqué. Je vous donne donc ma solution commentée, si quelqu'un à l'avenir à le même souci.
 
Le formulaire :
 

Code :
  1. <div class=ddentry id="bb$R[sturct_id]">
  2.             Type : <input type="text" name="type_$R[sturct_id]" id="type_$R[sturct_id]" value= "$R[struct_type_stream]" ><br />
  3.             Nom : <input type="text" name="nom_$R[sturct_id]" id="nom_$R[sturct_id]" value= "$R[struct_nom]"><br />
  4.             Libelle : <input type="text" name="libelle_$R[sturct_id]" id="libelle_$R[sturct_id]" value= "$R[struct_libelle]" ><br />
  5.             Type des données : <input type="text" name="datatype_$R[sturct_id]" id="datatype_$R[sturct_id]" value="$R[struct_datatype]" >
  6.             <input name="lst_sturct_id$R[sturct_id]" id="lst_sturct_id$R[sturct_id]" type="hidden" value="$R[sturct_id]"/>
  7.          </div>
  8.         $struct_type = $R['struct_type_stream'];
  9.         $struct_nom = $R['struct_nom'];
  10.         $struct_libelle = $R['struct_libelle'];
  11.         $struct_datatype = $R['struct_datatype'];
  12.         $sturct_id = $R['sturct_id'];
  13. }
  14.     <style type=text/css>
  15.     div.ddentry { border:1px solid #999; border-left:20px solid #999;margin-bottom:4px; padding:4px; }
  16.     </style>
  17.     <h1>Gestion des documents de type $type</h1>
  18.     <form name="form" id="form" method=post action='$_SERVER[PHP_SELF]'>
  19.     <input type=hidden name=Action value='$_REQUEST[Action]'>
  20.     <input type=hidden name=Etape value='valider'>
  21.     $html
  22.     <input type=submit  >
  23.     </form>


 
 
et le code permettant de valider avec la regex :  
 

Code :
  1. function pimpValiderStructureDocument($html)
  2. {
  3.    
  4.    
  5.     // Parcours des champs du formulaire pour enregister chaque ligne
  6.     $struct_ordre=1;
  7.     foreach ($_POST as $k => $v)
  8.     {
  9.         if (! ereg("^lst_sturct_id([0-9]+)$",$k,$o)) continue; // On ne recherche que les champs hidden embarquant l'id de la bdd
  10.        
  11.         $ligne = $o[1]; // numéro de la ligne en cours de traitement
  12.         $id = $v;       // L'id de l'enregistrement est la valeur de ce champs
  13.         $Data = array(); // Créer un tableau vide pour stoker les valeurs à enregistrer
  14.         $Data['struct_type_stream'] = $_POST['type_'.$ligne];
  15.         $Data['struct_nom'] = $_POST['nom_'.$ligne];
  16.         $Data['struct_libelle'] = $_POST['libelle_'.$ligne];
  17.         $Data['struct_datatype'] = $_POST['datatype_'.$ligne];
  18.         $Data['struct_ordre'] = $ordre;
  19.         if ($id){ // Si un id est dispo => enregistrement existant à modifier, sinon enregistrement à créer
  20.             dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id,  $Data);
  21.            $struct_ordre++;
  22.         }
  23.         else
  24.             dbiInsertBDArray('stream_structure_2', $Data);
  25.     }
  26.        
  27. }

Reply

Marsh Posté le 19-03-2008 à 21:13:07    

Bien, mais je te conseille plutot les fontions preg_* (preg_match, preg_replace...etc.), elles sont plus rapides et plus mieux  :o

Message cité 1 fois
Message édité par CyberDenix le 19-03-2008 à 21:13:23

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 21-03-2008 à 14:12:12    

CyberDenix a écrit :

Bien, mais je te conseille plutot les fontions preg_* (preg_match, preg_replace...etc.), elles sont plus rapides et plus mieux  :o


 
bonjour,
 
ok. Je tiendrai compte pour les preg_*. Bon pour le moment je suis toujours en ereg, mais j'ai un autre petit souci. Je récupère avec du javascript l'ordre de mes div. Je les mets dans un champs hidden appelé div_order que j'explode ensuite. Donc le code de ma validation de draganddrop donne ceci.

Code :
  1. function pimpValiderStructureDocument($html)
  2. {
  3. $ordre=1;
  4.     $div_ordre = $_POST['div_order'];
  5.    
  6.     $tab_structure = explode(',', $div_ordre, -1);
  7.    
  8.     foreach ($_POST as $k => $v)
  9.     {
  10.        
  11.        
  12.         if (!$v)
  13.             continue;
  14.         if (! ereg("^lst_sturct_id([0-9]+)$",$k,$o)) continue; // On ne recherche que les champs hidden embarquant l'id de la bdd
  15.             $ligne = $o[1];
  16.              // numéro de la ligne en cours de traitement
  17.         $id = $v;
  18.      
  19.                // L'id de l'enregistrement est la valeur de ce champs
  20.         $Data = array(); // Créer un tableau vide pour stoker les valeurs à enregistrer
  21.         $Data['struct_type_stream'] = $_POST['type_'.$ligne];
  22.         $Data['struct_nom'] = $_POST['nom_'.$ligne];
  23.         $Data['struct_libelle'] = $_POST['libelle_'.$ligne];
  24.         $Data['struct_datatype'] = $_POST['datatype_'.$ligne];
  25.         $Data['struct_ordre'] = $ordre;
  26.      
  27.         if ($id)
  28.         { // Si un id est dispo => enregistrement existant à modifier, sinon enregistrement à créer   
  29.             dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id, $Data);
  30.             $ordre++;   
  31.         }
  32.         else
  33.         {
  34.             dbiInsertBDArray('stream_structure_2', $Data);
  35.         }
  36.     }
  37.     print_r ($tab_structure);
  38. }


 
et le print_r me renvoie quelque chose du type : Array ( [0] => bb13 [1] => bb9 [2] => bb11 [3] => bb1 [4] => bb3 [5] => bb12 [6] => bb10 [7] => bb4 [8] => bb7 [9] => bb17 [10] => bb14 [11] => bb8 [12] => bb2 [13] => bb16 [14] => bb6 [15] => bb15 [16] => )
 
bb c'est l'id des div.
 
C'est bien joli. Mais le problème c'est que je ne sais pas comment exploiter ce résultat dans ce que j'ai fais. Pourriez-vous me donner un petit coup de pouce?
 
Merci d'avance.


Message édité par kifouillou le 21-03-2008 à 14:18:47
Reply

Sujets relatifs:

Leave a Replay

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