[RESOLU] Problème avec la boucle foreach

Petit nouveau ! | 4 Messages

27 juin 2014, 23:57

Bonsoir, je suis débutante en PHP et ça fait 4 jours que je galère avec un problème de boucle foreach
J'ai un formulaire dynamique de gestion de notes de stagiaires
Le gestionnaire peut ajouter et remplir des inputs pour autant de notes existantes
le nombre de stagiaires pour chaque évaluation peut changer selon la présence ou l'absence de celui-ci
mon problème est que j'ai un bouton submit qui insère toutes les données saisies dynamiquement dans ma table evaluation mais quand je clique dessus je ne trouve que le dernier enregistrement que j'ai saisis !!!

mon code est le suivant:
le formulaire simplifié:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>
	<meta http-equiv="Content-Type"	content="text/html; charset=ISO-8859-1" />
	<meta name="robots" content="noindex, follow" />
	
	<title>The ASW :: Tableaux dynamiques :: Exemple 4</title>
	
<style type="text/css">
table {
	border : 2px solid #666;
	border-collapse : collapse;
}
table thead th {
	background : #369;
	border-bottom : 2px solid #666;
	color : #fff;
}
table tbody td {
	border : 1px solid #ccc;
	padding : 5px 2px;
}
</style>

	<script type="text/javascript" src="../public/js/dtable.js"></script>
</head>

<body>
	<p><a href="http://www.the-asw.com/articles/2005/09/18/50-une-interface-de-formulaire-a-base-de-tableaux-dynamiques">Retour à l'article</a></p>
	
	<form action="index.php" method="post">
	
	<table class="dTable">
		<thead>
			<tr>
				<th>Approche technique</th>
				<th>Communication</th>
				<th>Colonne 3</th>
				
			</tr>
		</thead>
		
		<tfoot>
			<tr>
				<th colspan="5"><a href="#" onclick="addLigne(this); return false;">Ajouter une ligne</a></th>
			</tr>
		</tfoot>
		
		<tbody>
			
			<tr>
				<td><input type="text" name="champ1[]" /></td>
				<td><input type="text" name="champ2[]" /></td>
				
				<td><a href="#" onclick="delLigne(this); return false;">Supp</a></td>
			</tr>
			
		</tbody>
	</table>

	<p><input type="submit" value="ok" name="ok" /></p>
	
	</form>
</body>
</html>
le code javascript :
[javascript]// Tableau

/*
* Utilisation :
* 1. Créer un tableau avec la proprieté class="dTable" (Dynamic TABLE)
* 2. Le tableau doit être standard : il contenir un <thead>, un <tbody> et un <tfoot>
* et utiliser à bon escient les <td> et <th>.
* 3. La première ligne du tbody sera utilisée comme ligne de réference.
* Elle sera clonée pour en ajouter de nouvelle. Elle ne sera pas affichée.
*/

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.className = 'dTable' ) {
var tbody = table.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);
}
}
}

/* 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 ) // pour IE
newTr.style.display = "block";
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'));
}
[/javascript]

code PHP:
$L = new Evaluations();
 
foreach(($_POST['champ1'] as $id) 
 {
foreach(($_POST['champ2'] as $id2) 
   $L->insererEvaluation($id,$id1);
 
}
Pouvez-vous m'aider car je suis bloquée :( 8-|

Mammouth du PHP | 1339 Messages

28 juin 2014, 01:11

Il y a pas un ( a chaque fois ? ...
<?php

$L = new Evaluations();
 
foreach($_POST['champ1'] as $id) {
 foreach($_POST['champ2'] as $id2)
   $L->insererEvaluation($id,$id1);
 }
}
?>
Je ferais plus simple :
<?php

$L = new Evaluations();
 
foreach($_POST['champ1'] as $k => $val) {
   $L->insererEvaluation($_POST['champ1'][$k], $_POST['champ2'][$k]);
}
?>
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 4 Messages

28 juin 2014, 01:40

Elie Merci beaucouuuuuuuuuuuuup :) :)
ça marche très bien