Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2012 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  tableau éditable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableau éditable

n°2226763
LolitaLoul​ou
Posté le 30-04-2014 à 14:57:58  profilanswer
 

Bonjour,
 
J'ai une problématique qui est la suivante: je veux avoir un tableau des champ et lorsqu'on s'appuie sur un bouton en ajoute une ligne autre ligne vide semblable à la ligne précédente et puis avoir un bouton submit qui fait l'insertion des tous les données saisies dans la base de données. C'est pour mon application web dynamique svp aidez moi
 
Voici le code du mon tableau

Code :
  1. <table class="dTable">
  2. <thead> <tr> <th> <div align="center"> Code Article </div> </th>
  3.               <th> <div align="center"> Article </div> </th>
  4.     <th> <div align="center"> D&eacutesignation </div> </th>
  5.     <th> <div align="center"> Num&eacutero de S&eacuterie </div> </th>
  6.     <th> <div align="center"> Version </div> </th>
  7.               <th> <div align="center"> Famille </div> </th>
  8.               <th> <div align="center"> Emplacement </div> </th>
  9.     <th></th>
  10. </tr> </thead>
  11. <tfoot> <tr>
  12.  <th colspan="8"><a href="#" onclick="addLigne(this); return false;">Add a line</a></th>
  13. </tr> </tfoot>
  14. <tbody><tr> <td> <div align="center"> <input type="text" name="Code_Article[0]"/> </div> </td>
  15.              <td> <div align="center"> <input type="text" name="Article[0]"/> </div></td>
  16.              <td> <div align="center"> <input type="text" name="Designation[0]"/> </div> </td>
  17.    <td> <div align="center"> <input type="text" name="Numero_Serie[0]"/> </div> </td>
  18.    <td> <div align="center"> <input type="text" name="Version[0]"/> </div> </td>
  19.    <td> <div align="center"> <select name="Famille[0]"> </select> </div> </td>
  20.    <td> <div align="center"> <input type="text" name="Emplacement[0]"/> </div> </td>
  21.    <td><div align="center"><a href="#" onclick="delLigne(this); return false;">Delete</a></div></td>
  22. </tr>
  23. </tbody> </table>

 
 
et ça c'est le code javascript pour l'ajout d'une ligne et ça fonctionne bien :  

Code :
  1. <script>
  2. function getParent(element, parentTagName) {
  3. if ( ! element )
  4.  return null;
  5. else if ( element.nodeType == 1 && element.tagName.toLowerCase() == parentTagName.toLowerCase() )
  6.  return element;
  7. else
  8.  return getParent(element.parentNode, parentTagName);
  9. }
  10. /* ajoute une ligne */
  11. function addLigne(link) {
  12. // 1. récuperer le node "TABLE" à manipuler
  13. var td = link.parentNode;
  14. var table = getParent(td,'TABLE');
  15. // 2. on va manipuler le TBODY
  16. var tbody = table.tBodies[0];
  17. // 3. on clone la ligne de reference
  18. var newTr = tbody.rows[0].cloneNode(true);
  19. tbody.appendChild(newTr);
  20. if ( document.all )
  21.  newTr.style.display = "block"; // pour IE
  22. else
  23.  newTr.style.display = "table-row"; // pour Gecko
  24. }
  25. /* supprimer une ligne */
  26. function delLigne(link) {
  27. // 1. récuperer le node "TABLE" à manipuler
  28. var td = link.parentNode;
  29. var table = getParent(td, 'TABLE');
  30. // 2. récuperer le TBODY
  31. var tbody = table.tBodies[0];
  32. // 3. Supprimer le TR
  33. tbody.removeChild(getParent(td, 'TR'));
  34. }
  35. window.onload = dtableInit;
  36. /* initialise le script */
  37. function dtableInit() {
  38. var table = document.getElementsByTagName('TABLE');
  39. for ( var i = 0; i < table.length; i++ ) {
  40.  // on récupère tous les tableaux dynamiques
  41.  if ( table[i].className == 'dTable' ) {
  42.   var tbody = table[i].tBodies[0];
  43.   var newTr = tbody.rows[0].cloneNode(true);
  44.   // on masque la première ligne du tbody (la ligne de reference)
  45.   tbody.rows[0].style.display = 'none';
  46.   // on en ajoute une
  47.   tbody.appendChild(newTr);
  48.  }
  49. }
  50. }
  51. </script>


 
 
 
 
Mon problème est l'ajout de de tous les données saisies dans ce tableau dans la base de données  
voici mon code php mais ça ne fonctionne pas et ça m'affiche l'erreur suivante: Column count doesn't match value count at row 1
 

Code :
  1. <?php
  2. session_start();
  3. include("conf_site.php" );
  4. include("fonctions.php" );
  5. $bdd = new PDO('mysql:host='.$bdd_hote.';dbname='.$bdd_nmDB, $bdd_user, $bdd_pass);
  6. $Numero_Bon_Entree=$_SESSION['Bon_Entree_N'];
  7. $value=array();
  8. $i=0;
  9. while(isset($_POST['Numero_Serie'][++$i]))
  10. { $value[]="('',
  11. '".mysql_real_escape_string($_POST['Numero_Serie'][$i])."','".mysql_real_escape_string($_POST['Code_Article'][$i])."','".mysql_real_escape_string($_POST['Article'][$i])."','".mysql_real_escape_string($_POST['Famille'][$i])."','".mysql_real_escape_string($_POST['Version'][$i])."','".mysql_real_escape_string($_POST['Emplacement'][$i])."','".mysql_real_escape_string($_POST['Designation'][$i])."')";}
  12. mysql_query("INSERT INTO `articles` (`Numero_Serie`, `Code_Article`,`Carte`,`Famille`,`Version`, `Emplacement`, `Designation`,`Numero_Bon_Entree`) VALUES ('".implode(',',$value)."','".$Numero_Bon_Entree."')" ) or die (mysql_error());
  13. ?>

mood
Publicité
Posté le 30-04-2014 à 14:57:58  profilanswer
 

n°2226779
rufo
Pas me confondre avec Lycos!
Posté le 30-04-2014 à 15:36:30  profilanswer
 

L'ajout de ce qui sera saisit dans la nouvelle ligne doit être enregistré dans la BD sur une requête Ajax : sur le clic du bouton submit, ça envoie la requête ajax avec le contenu de la nouvelle ligne à enregistrer (en XML ou en JSON, par ex) à un script php qui se chargera de traiter la requête ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2226792
LolitaLoul​ou
Posté le 30-04-2014 à 16:01:26  profilanswer
 

Svp est ce que vous pouvez m'aider puisque j'ai aucune idée sur les principes et l'utilisation d'Ajax. Svp c'est urgent

n°2226802
deejay59
Posté le 30-04-2014 à 16:26:06  profilanswer
 

Comme rufo le souligne c'est plus pratique de faire appel a une requete ajax avec du json (regarde avec jquery).
Mais si c'est urgent et que tu n'a pas le temps de tout refaire, commence par faire un  print_r($_POST); dans ton code php juste avant la boucle pour voir deja si tu recuperes toutes tes données.

n°2226803
LolitaLoul​ou
Posté le 30-04-2014 à 16:29:38  profilanswer
 

j'ai essayé avec print_r($_POST) mais ça n'affiche rien !!! :??:

n°2226805
deejay59
Posté le 30-04-2014 à 16:31:14  profilanswer
 

donc tu récupères aucune données, tu as un bien une balise form avant ton tableau?

n°2226808
LolitaLoul​ou
Posté le 30-04-2014 à 16:37:20  profilanswer
 

oui, j'ai une balise form qui a comme action l'appel du fichier add.php qui contient le code d'ajout inséré ci dessus.

n°2226814
rufo
Pas me confondre avec Lycos!
Posté le 30-04-2014 à 16:45:28  profilanswer
 

Un Mok sur ajax : http://fr.openclassrooms.com/infor [...] javascript


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2226815
deejay59
Posté le 30-04-2014 à 16:46:43  profilanswer
 

bizarre...
et ca

Code :
  1. print_r($_POST['Numero_Serie'])

n°2226833
LolitaLoul​ou
Posté le 30-04-2014 à 17:28:46  profilanswer
 

j'ai remplacé Numero_Serie[0] par Numero_Serie[] et c'est bon pour la récupération des données mais maintenant il y a l'erreur svte: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

mood
Publicité
Posté le 30-04-2014 à 17:28:46  profilanswer
 

n°2226837
rufo
Pas me confondre avec Lycos!
Posté le 30-04-2014 à 17:39:43  profilanswer
 

$i=0;
while(isset($_POST['Numero_Serie'][++$i]))
 
=> j'ai un doute sur le fait que tu génères bien la requête pour la valeur 0 de l'indice $i :/
 
$_POST['Article'][$i] et $_POST['Designation'][$i] m'intriguent aussi. Dans ton code html, je vois pas comment les indices évoluaient ?
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2226838
rufo
Pas me confondre avec Lycos!
Posté le 30-04-2014 à 17:41:21  profilanswer
 

Au passage, ce genre de HTML <th> <div align="center"> Emplacement </div> </th> est vraiment très laid :fou:  
Mettre un div dans un th alors que pour ce que tu fais, un simple style css sur le th suffit :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2226839
LolitaLoul​ou
Posté le 30-04-2014 à 17:46:16  profilanswer
 

ok @rufo pour les div c'est simplement une solution instantanée pour l'affichage :/  
Mais ce que j'ai compris que l'erreur provient de la requête sql non plus la récupération des données

n°2226845
deejay59
Posté le 30-04-2014 à 19:02:19  profilanswer
 

fais
 

Code :
  1. echo "INSERT INTO `articles` (`Numero_Serie`, `Code_Article`,`Carte`,`Famille`,`Version`, `Emplacement`, `Designation`,`Numero_Bon_Entree`) VALUES ('".implode(',',$value)."','".$Numero_Bon_Entree."')";


 
compare ton nombre d'arguments par rapport a values et si tu trouves pas d'erreur executes la sur mysql directement il te sortiras l'erreur exacte.

n°2226980
LolitaLoul​ou
Posté le 02-05-2014 à 11:26:58  profilanswer
 

Je pense que le problème est en fait au niveau du parcours des tableaux;, il ya toujours une erreur au niveau de l'indice 0

n°2226981
LolitaLoul​ou
Posté le 02-05-2014 à 11:45:25  profilanswer
 

svp aidez moi c'est urgent :/

n°2226986
deejay59
Posté le 02-05-2014 à 13:33:08  profilanswer
 

LolitaLoulou a écrit :

j'ai remplacé Numero_Serie[0] par Numero_Serie[] et c'est bon pour la récupération des données mais maintenant il y a l'erreur svte: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use


 
Si c'est toujours la même erreur affiche ta requete executée et regarde si tu n'as pas une erreur de syntaxe.

n°2226987
deejay59
Posté le 02-05-2014 à 13:36:31  profilanswer
 

Et si c'est une erreur de boucle comme tu dis utilises plutot foreach que while, c'est le plus adapté pour parcourir un array  

n°2226993
LolitaLoul​ou
Posté le 02-05-2014 à 14:54:29  profilanswer
 

lorsque j'ai fait un echo pour la requete seulement la dernière ligne remplie est affichée, et je sais pas comment remplacer la boucle qui j'ai utilisé par la boucle foreach  

n°2226994
deejay59
Posté le 02-05-2014 à 15:09:18  profilanswer
 

Comme ton code n'était pas très lisible .... j'avais pas remarquer que ton mysql_query était en dehors de la boucle donc il ne te fais qu'un insert...
je te poste le code plus tard
 
edit:
c'est bon j'ai compris ce que tu voulais faire, je te poste le code dans une dizaine de minutes.


Message édité par deejay59 le 02-05-2014 à 15:15:19
n°2226995
LolitaLoul​ou
Posté le 02-05-2014 à 15:20:08  profilanswer
 

Ah oui c'était ça le problème maintenant lorsque j'ai inclus la requete dans la boucle , le code marche et l'ajout se fait avec succès.  
Merci infiniment pour votre aide Deejay59 :)
J'aime bien voir ton code, merci de le poster jtt


Message édité par LolitaLoulou le 02-05-2014 à 15:20:58
n°2226996
deejay59
Posté le 02-05-2014 à 15:22:08  profilanswer
 

tiens un code plus propre:
 

Code :
  1. foreach($_POST['Numero_Serie'] AS $key => $valeur){
  2. $value[]="('',
  3. '".mysql_real_escape_string($valeur)."','".mysql_real_escape_string($_POST['Code_Article'][$key])."','".mysql_real_escape_string($_POST['Article'][$key])."','".mysql_real_escape_string($_POST['Famille'][$key])."','".mysql_real_escape_string($_POST['Version'][$key])."','".mysql_real_escape_string($_POST['Emplacement'][$key])."','".mysql_real_escape_string($_POST['Designation'][$key])."','".$Numero_Bon_Entree."')";
  4. }
  5. mysql_query("INSERT INTO `articles` (`Numero_Serie`, `Code_Article`,`Carte`,`Famille`,`Version`, `Emplacement`, `Designation`,`Numero_Bon_Entree`) VALUES ".implode(',',$value).";" ) or die (mysql_error());


 
ce code est plus rapide car une seule requete d'insertion.


Message édité par deejay59 le 02-05-2014 à 15:23:51
n°2226999
LolitaLoul​ou
Posté le 02-05-2014 à 15:35:40  profilanswer
 

oui ça marche aussi, merci pour l'aide . C'est résolu :)

n°2227000
deejay59
Posté le 02-05-2014 à 15:39:59  profilanswer
 

je viens de remarquer une erreur en plus dans ta requetes, tu veux inserer 8 champs tu indiques en values 9 valeurs... je presume que c'est le '' du début qui est inutile
 
 

Code :
  1. foreach($_POST['Numero_Serie'] AS $key => $valeur){
  2.     $value[]="('".mysql_real_escape_string($valeur)."','".mysql_real_escape_string($_POST['Code_Article'][$key])."','".mysql_real_escape_string($_POST['Article'][$key])."','".mysql_real_escape_string($_POST['Famille'][$key])."','".mysql_real_escape_string($_POST['Version'][$key])."','".mysql_real_escape_string($_POST['Emplacement'][$key])."','".mysql_real_escape_string($_POST['Designation'][$key])."','".$Numero_Bon_Entree."')";
  3.     }
  4.     mysql_query("INSERT INTO `articles` (`Numero_Serie`, `Code_Article`,`Carte`,`Famille`,`Version`, `Emplacement`, `Designation`,`Numero_Bon_Entree`) VALUES ".implode(',',$value).";" ) or die (mysql_error());

n°2227012
LolitaLoul​ou
Posté le 02-05-2014 à 17:16:32  profilanswer
 

Bon j'ai tapé ce code et ça marche bien:

Code :
  1. while(isset($_POST['Numero_Serie'][++$i]))
  2. {
  3. $value ="".mysql_real_escape_string($_POST['Numero_Serie'][$i])."','".mysql_real_escape_string($_POST['Code_Article'][$i])."','".mysql_real_escape_string($_POST['Article'][$i])."','".mysql_real_escape_string($_POST['Famille'][$i])."','".mysql_real_escape_string($_POST['Version'][$i])."','".mysql_real_escape_string($_POST['Emplacement'][$i])."','".mysql_real_escape_string($_POST['Designation'][$i]).""; 
  4. $value=substr($value,0,-1);
  5. mysql_query( "INSERT INTO `articles`(`Numero_Serie`, `Code_Article`,`Carte`,`Famille`,`Version`, `Emplacement`, `Designation`,`Numero_Bon_Entree`) VALUES ('".$value."','".$Numero_Bon_Entree."')" ) ; }


Message édité par LolitaLoulou le 02-05-2014 à 17:17:47
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  tableau éditable

 

Sujets relatifs
créer un tableau clé valeur (int) trier par valeur descTableau 2 dimension 1 dimension connue et l'autre inconnue
Aide button de recherche sur un tableauRegroupage tableau par mois et par année en SQL
Récupérer variable colonne tableau BatchTableau Statique en C++
affichage du texte dans un tableau latexLire données pas à pas dans un fichier et stocker dans variables
Tableau php mysql editable et modifiable par sélections et filtres 
Plus de sujets relatifs à : tableau éditable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR