[Php/Sql] 'Insert into' avec un tablo dynamik

Résolu/Fermé
benoit63 Messages postés 52 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 10 décembre 2008 - 28 août 2008 à 19:38
benoit63 Messages postés 52 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 10 décembre 2008 - 29 août 2008 à 19:01
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 :
<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 :

/* 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);
			
		}
	}
}



"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)."


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`


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...) :

for($i=1;$i<sizeof($champ_third1);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...
{
       $ajout_third_party=mysql_query("INSERT INTO `third_party`
               ( `id_third` , `prenom_third` , `nom_third` , `phone_third` , `item_third` )
		VALUES ('',
		'".$champ_third1[$i]."',
		'".$champ_third2[$i]."',
		'".$champ_third3[$i]."',
		'".$champ_third4[$i]."')")	
		or die ("ERREUR".$ajout_third_party.''.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..
A voir également:

3 réponses

benoit63 Messages postés 52 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 10 décembre 2008 87
28 août 2008 à 20:05
manirac : "Le principe serait qu'à chaque ordre dans ton tableau, tu regénères la page en PHP. "

Je ne vois pas trop ce que tu veux dire par "chaque ordre". Puis le tableau n'est pas le seul element de la page, je doi avoir une vigntaine de textbox et de selectbox.
1
Tu as un problème de conception à la base.
Je ne pense pas que tu t'en sortiras en conservant la même structure de page.
Le principe serait qu'à chaque ordre dans ton tableau, tu regénères la page en PHP.
Ce faisant, tu pourrais en même temps gérer ta base de données.
Ainsi, ton tableau serait complètement la copie conforme de ce qu'il y a dans la base de données.

Je t'engage donc à revoir complètement le fonctionnement de cette page.
Bon courage !
0
benoit63 Messages postés 52 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 10 décembre 2008 87
29 août 2008 à 19:01
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());
0