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

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 : récupération de variables ds un tableau dynamique JS

par Ryle » 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
  ...
}
:)

par Ben-J » 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...

par Ryle » 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 :)

par Ben-J » 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!

par Ben-J » 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 ...

par jojolapine » 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";

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

par Ben-J » 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 ^^