récupération de variables ds un tableau dynamique JS

Eléphant du PHP | 95 Messages

23 juin 2006, 10:09

Bonjour!
j'ai un formulaire de saisie dans un tableau dynamique (pour ajouter et supprimer des lignes), avec des input et autre du style libmis[] où je voudrai que les réponses soient stockées dans la bdd avc un enregistrement pour chaque ligne, donc des id de champs incrementés pour chaque ligne:


<form id="saisieresa" name="saisieresa" method="post" action="scriptresavehic.php">
<script>
// Tableau
/*
 * Utilisation :  
 *  1. Créer un tableau avec la proprieté class="TABLE" (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> ou <tr>.
 *  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(\'dtable\');
	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);
		}
	}
}

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

</script>

<table class="dtable" border=1>
	<thead>
		<tr>
			<td>&nbsp;</td>
			<td><a href="#" onclick="addLigne(this); return false;">Ajouter une mission</a></td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<th width="50" scope="col"><div align="center">Mission</div></th>
    		<th width="125" scope="col"><div align="center">Libell&eacute;</div></th>
    		<th width="200" scope="col"><div align="center">V&eacute;hicule</div></th>
    		<th width="200" scope="col"><div align="center">Nom(s)</div></th>
    		<th width="125" scope="col"><p align="center">Jours</p>
      			<p align="center">L&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;&nbsp;&nbsp;M&nbsp;&nbsp;&nbsp;J&nbsp;&nbsp;&nbsp;V</p>
    		</th>
    		<th width="40" scope="col">&nbsp;</th>
		</tr>
	</thead>
	
	<tfoot>
		<tr>
		</tr>
	</tfoot>
	
	<tbody>
		<tr>
			<td>
				<div align="center">
					<select name="selectmission[]">
						<option value=0>-----</option>
						<option value=1>1</option>
						<option value=2>2</option>
						...
						<option value=9>9</option>
						<option value=10>P1</option>
						<option value=11>P2</option>
					</select>
				</div>
			</td>
			<td>
				<div align="center">
      				<input type="text" name="libmis[]">
    			</div>
			</td>
			<td>
				<div align="center">
      				<select name="vehicmis[]"> ';
	  			$requetev = "select * from vehicules order by codevehic";
				$resultat = mysql_query($requetev);
				$ligne = mysql_fetch_assoc($resultat);echo'
				<option value=0>--------------------------------</option>';
				while ($ligne)
					{
					echo '<option value="'.$ligne["nomvehic"].'">'.$ligne["nomvehic"].'</option>';
					$ligne = mysql_fetch_assoc($resultat);
					}
					echo '
					</select>
				</div>
			</td>
			<td>
				<div align="center">
					<p></p>
					<select name="nom1mis[]">
					';
		  	$requeten1 = "select * from users order by nomuser;";
			$resultatn1 = mysql_query($requeten1);
			$ligne = mysql_fetch_assoc($resultatn1);echo'
			<option value=0>--------------------------------</option>';
			while ($ligne)
				{
				echo '<option value="'.$ligne["login"].'">'.$ligne["prenomuser"].'  '.$ligne["nomuser"].'</option>';
				$ligne = mysql_fetch_assoc($resultatn1);
				}
			
			echo'
					</select>
					<p></p>
					<select name="nom2mis[]">';
		  	$requeten2 = "select * from users order by nomuser;";
			$resultatn2 = mysql_query($requeten2);
			$ligne = mysql_fetch_assoc($resultatn2); echo'
			<option value=0>--------------------------------</option>';
			while ($ligne)
				{
				echo '<option value="'.$ligne["login"].'">'.$ligne["prenomuser"].'  '.$ligne["nomuser"].'</option>';
				$ligne = mysql_fetch_assoc($resultatn2);
				}
			echo '					
					</select>
					<p></p>
				</div>
			</td>
			<td>
				<div align="center">
					<input type="checkbox" name="lunmis[]" value="checkbox">
					<input type="checkbox" name="marmis[]" value="checkbox">
					<input type="checkbox" name="mermis[]" value="checkbox">
					<input type="checkbox" name="jeumis[]" value="checkbox">
					<input type="checkbox" name="venmis[]" value="checkbox">
				</div>
			</td>
			<td><div align="center"><input type=submit value="Sauvegarder" name="saveresavehic"><br><a href="#" onclick="delLigne(this); return false;">Suppr</a></div></td>
		</tr>
	</tbody>
</table>
(dsl pour la longueur du code...) mon problème est donc d'incrémenter ces champs en fonction du numéro de mission (seclectmission[]) puis de récupérer le tout pour la requete dans scriptresavehic.php, que voici :
if ( $_POST["selectmission[]"] != 0 and $_POST["libmis[]"] != "" and $_POST["nom1mis[]"] != 0 and $_POST["vehicmis[]"] != 0)
					{
					$requeteirv1 = "INSERT INTO resavehic(numresav, nummissionrv, libmissionrv, nomrvun, nomrvdeu, vehicrv) VALUES ( DEFAULT, '".$_POST["selectmission[]"]."' , '".$_POST["libmis[]"]."', '".$_POST["nom1mis[]"]."', '".$_POST["nom2mis.[]."]."', '".$_POST["vehicmis.[]."]."');";
					mysql_query($requeteirv1);
					}
				else 
					{
					echo '<script>alert("Vous n\'avez pas rempli tous les champs.");</script>';
					};
voila, merci beaucoup de votre éclairage j'espère ^^

ViPHP
ViPHP | 3607 Messages

23 juin 2006, 10:29

j'ai beau chercher... je trouve pas de balise ouvrante <?php :roll:
  </td>
            <td>
                <div align="center">
                      <select name="vehicmis[]"> ';
                  $requetev = "select * from vehicules order by codevehic";

Eléphant du PHP | 95 Messages

23 juin 2006, 10:34

lol en effet, je n'ai pas mis le début du script, ni la fin, simplement le formulaire, surtout au vu de la longueur du reste, comprenant plusieurs scripts js; mais je me connecte correctement sur ma base et vérifie que les variables de session sont bien renseignés, et tout a la fin g un alert("reconnectez vous") avec la fermeture de la balise,et cette partie est commune a toutes mes pages et fonctionne très bien.

mon problème se situerai surtout au niveau de la méthode a utiliser et la syntaxe a appliquer pour réaliser ce que je veux, je ne sais pas si j'ai été suffisament clair la dessus ...

Eléphant du PHP | 95 Messages

23 juin 2006, 11:43

je pensai le faire avec les tableaux mais bon apparemment la variable n'est pas transmise ... sniff jsuis sur que sa doit etre tout simple en plus, quelqu'un aurait-il un regard neuf a apporter ? merci d'avance!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 juin 2006, 11:49

Juste une remarque (j'ai pas trop le courage de lire tout le code ;)) :

Si ton champ se nomme "selectmission[]" dans ton formulaire, alors côté php du dois récupérer $_POST["selectmission"] (sans les crochets), cette variable étant un tableau contenant toutes les valeurs sélectionnées :)

Eléphant du PHP | 95 Messages

23 juin 2006, 11:58

j'ai pas trop le courage de lire tout le code
lol je te comprend, j'ai déja pas mal galéré ^^

en gros je voudrai faire :
$requeteirv1 = "INSERT INTO resavehic(numresav, nummissionrv, libmissionrv, nomrvun, nomrvdeu, vehicrv) VALUES ( DEFAULT, '".$_POST["selectmission"]."' , '".$_POST["libmis[selectmission]"]."', '".$_POST["nom1mis[selectmission]"]."', '".$_POST["nom2mis.[selectmission]."]."', '".$_POST["vehicmis.[selectmission]."]."');"; 
c'est a dire concaténer la valeur de select mission au nom du champ, pour pouvoir les distinguer, mais je suppose que la syntaxe est pas terrible...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 juin 2006, 15:05

A priori, si tu as bien dans $_POST["selectmission"] toutes les valeurs que tu attends, il n'y a pas de contrainte particulière : tu boucle sur ce tableau pour avoir chaque valeur une par une et tu les utilises pour composer le nom de l'index que tu veux consulter :
foreach ($_POST["selectmission"] as $selectmission) {
  echo $_POST["libmis" . $selectmission]; // on construit la chaine qui sert d'index... faudrait un isSet() avant pour que ce soit plus propre
  ...
}
:)