[Php/Sql] 'Insert into' avec un tableau dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Php/Sql] 'Insert into' avec un tableau dynamique

[Php/Sql] 'Insert into' avec un tableau dynamique

par benoit63 » 29 août 2008, 17:51

Bonjour,

Le contexte :
Je suis en train de réaliser un Intranet pour un cabinet d'assurance, et avec cet Intranet les employés pourront également gérer la base de données. J'utilise EasyPhp 2.0 pour programmer et ma base de données utilise le moteur INNODB.

j'ai créer un tableau dynamique, l'utilisateur peut rajouter des lignes ou en supprimer grâce a du Java Script. Ce tableau concerne des tiers qui sont impliquer dans un accident. Ce tableau permet la saisie des tiers pour ensuite les stocker dans la base de données

Voici le code du tableau :


Code : HTML

Code : Tout sélectionner

<table class="dTable"> <thead> <tr> <th><div align="center">First name</div></th> <th><div align="center">Last name</div></th> <th><div align="center">Phone #</div></th> <th><div align="center">Item</div></th> <th></th> </tr> </thead> <tfoot> <tr> <th colspan="5"><a href="#" onclick="addLigne(this); return false;">Add a line</a></th> </tr> </tfoot> <tbody> <tr> <td><div align="center"><input type="text" name="champ_third1[]" /></div></td> <td><div align="center"><input type="text" name="champ_third2[]" /></div></td> <td><div align="center"><input type="text" name="champ_third3[]" /></div></td> <td><div align="center"><input type="text" name="champ_third4[]" /></div></td> <td><div align="center"><a href="#" onclick="delLigne(this); return false;">Delete</a></div></td> </tr> </tbody> </table>

Voila le Fichier Java script qui ajoute les lignes dans le tableau :

Code : JavaScript

Code : Tout sélectionner

/* trouve le tag "parentTagName" parent de "element" */ function getParent(element, parentTagName) { if ( ! element ) return null; else if ( element.nodeType == 1 && element.tagName.toLowerCase() == parentTagName.toLowerCase() ) return element; else return getParent(element.parentNode, parentTagName); } /* ajoute une ligne */ function addLigne(link) { // 1. récuperer le node "TABLE" à manipuler var td = link.parentNode; var table = getParent(td,'TABLE'); // 2. on va manipuler le TBODY var tbody = table.tBodies[0]; // 3. on clone la ligne de reference var newTr = tbody.rows[0].cloneNode(true); tbody.appendChild(newTr); if ( document.all ) newTr.style.display = "block"; // pour IE else newTr.style.display = "table-row"; // pour Gecko } /* supprimer une ligne */ function delLigne(link) { // 1. récuperer le node "TABLE" à manipuler var td = link.parentNode; var table = getParent(td, 'TABLE'); // 2. récuperer le TBODY var tbody = table.tBodies[0]; // 3. Supprimer le TR tbody.removeChild(getParent(td, 'TR')); } window.onload = dtableInit; /* initialise le script */ function dtableInit() { var table = document.getElementsByTagName('TABLE'); for ( var i = 0; i < table.length; i++ ) { // on récupère tous les tableaux dynamiques if ( table[i].className == 'dTable' ) { var tbody = table[i].tBodies[0]; var newTr = tbody.rows[0].cloneNode(true); // on masque la première ligne du tbody (la ligne de reference) tbody.rows[0].style.display = 'none'; // on en ajoute une tbody.appendChild(newTr); } } }


Citation : cgo2
Grace à leur nom finissant par [ ], les valeurs des champs input seront assemblées dans un tableau lors du post du formulaire. Résultat : on se retrouve avec 4 tableaux : champ_third1, champ_third2, champ_third3 et champ_third4 correspondants aux 4 colonnes du tableaux HTML. Les lignes de ces tableaux correspondent aux lignes du tableau html (en commençant par 0).
TUTORIEL POUR LE TABLEAU A CETTE ADRESSE : http://www.the-asw.com/post/2005/09/18/ ... dynamiques

Le problème :

Tout le code marche a la perfection, le seul problème est que je ne sais pas comment envoyer toute les informations du tableau dans ma base de données.

Nom de la base : intranet
Structure de la table `third_party`


Code : SQL

Code : Tout sélectionner

CREATE TABLE `third_party` ( `id_third` int(11) NOT NULL auto_increment, `prenom_third` text NOT NULL, `nom_third` text NOT NULL, `phone_third` text NOT NULL, `item_third` text NOT NULL, PRIMARY KEY (`id_third`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;



J'ai essayer plein de truc pour envoyer les données mais ça ne marche pas.. voila ma dernière tentative (infructueuse...) :

Code : PHP
$value = '';
for($i=1; $i <= count($champ_third1); $i++)
{
      $value .= " ('', '".$_POST['champ_third1'][$i]."', '".$_POST['champ_third2'][$i]."', '".$_POST['champ_third3'][$i]."', '".$_POST['champ_third4'][$i]."'),";
}
$value = substr($value, 0, -1); // Pour supprimer la dernière virgule

mysql_query("INSERT INTO third_party".$value) or die(mysql_error());


Je pense que j'ai donné toute les informations nécessaire mais si vous voulez plus de détail, demandez moi..

Aidez moi s'il vous plait.. je m'arrache les cheveux..



REPONSE :

$value = array();
$i = 0;
while(isset($_POST['champ_third1'][++$i])) {
 $value[] = "('', '".mysql_real_escape_string($_POST['champ_third1'][$i])."', '".mysql_real_escape_string($_POST['champ_third2'][$i])."', '".mysql_real_escape_string($_POST['champ_third3'][$i])."', '".mysql_real_escape_string($_POST['champ_third4'][$i])."')";
}

mysql_query("INSERT INTO third_party VALUES ".implode(', ', $value)) or die(mysql_error());