Déplacement un élément d'une liste vers une autre

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 : Déplacement un élément d'une liste vers une autre

par Truc » 28 déc. 2005, 00:05

de rien, de meme.... mais je vais veiller encore un peu :wink:

par cpnadal » 27 déc. 2005, 23:59

merci encore et bonne nuit.

par Truc » 27 déc. 2005, 23:56

n'hésite pas à revenir en cas de doute :wink:

par cpnadal » 27 déc. 2005, 23:49

je vais optimiser mon code plus tard, j'ai l'impression que j'ai pas mal de marge!!! merci encore... je vais maintenant bien analyser la partie de javascript pour tenter de la comprendre.

par cpnadal » 27 déc. 2005, 23:48

bon pas de panique, en fait ca met un message d'erreur que quand aucune valeur n'est selectionnée. j'ai donc rajouté une condition, bon ca fait un peu usine a gaz mais ca m'a permis de comprendre.

Merci encore mille fois...
if(isset($_POST['envoyer'])) {
	$nb_division=5;
	$i=2;
	while($i<$nb_division+2) {
	$liste="liste".$i;
			if(isset($_POST[$liste])) {
			foreach ($_POST[$liste] as $v) 
			{ 
			   echo "valeur liste ".$liste." = ".$v." <br />"; 
			} }
	$i++;
	}
}

par Truc » 27 déc. 2005, 23:47

j'ai modifié mon erreur mais ca me fait le meme retour d'erreur:
quel est ce retour ?

par cpnadal » 27 déc. 2005, 23:41

j'ai modifié mon erreur mais ca me fait le meme retour d'erreur:
if(isset($_POST['envoyer'])) {
	$nb_division=5;
	$i=2;
	while($i<$nb_division+2) {
	$liste="liste".$i;
			foreach ($_POST[$liste] as $v) 
			{ 
			   echo "valeur liste ".$liste." = ".$v." <br />"; 
			}
	$i++;
	}
}

par cpnadal » 27 déc. 2005, 23:39

avec:
if(isset($_POST['envoyer'])) {
	$nb_division=5;
	$i=2;
	while($i<$nb_division+2) {
	$liste="'liste%s'".$i;
			foreach ($_POST[$liste] as $v) 
			{ 
			   echo "valeur liste ".$liste." = ".$v." <br />"; 
			}
	$i++;
	}
}
ca me retourne:

Invalid argument supplied for foreach() pour la ligne:
			foreach ($_POST[$liste] as $v) 

par Truc » 27 déc. 2005, 23:37

une erreur ici:
$liste=sprintf("'liste%s'",$i); 
la variable $i est un entier donc:
$liste=sprintf("'liste%d'",$i); 
avec un "%d"

perso je préfère concaténer comme ça:
$liste="liste".$i; 

par cpnadal » 27 déc. 2005, 23:32

euh oui et en fait ca marche pas. Mais attends je crois que j'ai trouvé. Je suis en train de taper le code et je le met dès qu'il est fini.

par Truc » 27 déc. 2005, 23:31

ça me semble correct as tu testé le retour ?

par cpnadal » 27 déc. 2005, 23:24

tu me corrige stp: ca donne donc :
if(isset($_POST['envoyer'])) {
	$nb_division=5;
	$i=2;
	while($i<$nb_division+2) {
	$liste=sprintf("'liste%s'",$i);
			foreach ($_POST[$liste] as $v) 
			{ 
			   echo "valeur liste ".$liste." = ".$v." <br />"; 
			}
	$i++;
	}
}

par Truc » 27 déc. 2005, 23:18

Ce sont des listes multiple tu récupère donc un tableau.

la fonction count() retourne le nombre d'éléments du tableau POST

il est donc préférable d'utiliser une boucle foreach() par exemple:
foreach ($_POST[$liste] as $v) 
{
   echo "valeur liste ".$liste." = ".$v." <br />";
}

par cpnadal » 27 déc. 2005, 22:31

ok j'ai compris le principe de l'envoi mais quand je veux faire la récupération je fais
if(isset($_POST['envoyer'])) {
$nb_division=5;
$i=2;
	while($i<$nb_division+2) {
$liste=sprintf("'liste%s'",$i);
$valeur=$_POST[$liste];	
	$test=count($valeur);
	echo $test;
	$i++;
	}
}
j'ai faux? c'est comme ca que je fais passer les valeurs du $_POST...

par Truc » 27 déc. 2005, 01:07

Mais au submit, la boucle ne reconnait aucun des $_POST...
Certainement logique puisque la variable POST ne contient que les éléments séléctionnés !

Il faut donc séléctionner tous les éléments des différentes listes avant de valider le formulaire:

Pour cela une fonction Javscript peut faire l'affaire:
function select_all()
{
	for(j=2;j<=6;j++) // boucle permettant de parcourir les listes
	{
		var num_liste='liste'+j;		
	
		var lg = document.getElementById(num_liste).length;	//longueur de la liste traitée	
		for(i=0;i<lg;i++)
			document.getElementById(num_liste).options[i].selected= true;		//séléction des éléments de la liste
		
		document.getElementById(num_liste).name +="[]"; // ajout des [] pour permettre au php de récupérer la liste sous forme d'array
														 //ne pas mettre directement "liste2[]" sinon la 1ere fonction Deplacer() ne fonctionnera plus ainsi.
		
	}		
	
	formulaire.submit(); // validation du formulaire.
} 
1. permettre aux listes la multi-séléction avec l'attribut "multiple"

2.ajouter un id a chaque liste sous la forme: id="liste2", id="liste3", ...

3.attribut name sans crochets: name="liste2", name="liste3", ...

Ce qui donne pour la liste 2:
<SELECT id="liste2" name="liste2" multiple>
Ensuite tu récupère les listes avec $_POST['liste2'], $_POST['liste3'].[/quote]