Acceder à une liste dans un formulaire

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 : Acceder à une liste dans un formulaire

par céka » 24 oct. 2005, 14:42

Merci truc. J'ai corrigé mon script en javascript et ca fonctionne en concaténant tout dans un champ chaché.
J'avais peur, en mettant une liste à choix multiple, que ca complexifie ma gestion de remplissage/maj de la liste.

par Truc » 24 oct. 2005, 00:17

je revien a la charge :axe:
j'ai fait un test et, j'ai oublié qu'avec l'attribut "Disabled" les données ne sont pas envoyées.#-o

par contre du coup autre idée (vraiment de fainéant parque j'ai pas vraiment envi de mettre le nez dans le javascript :lol: )

ajouter ceci a la balise <select>
style="visibility : hidden;display : none "
ça aura pour effet de la rendre invisible mais les données seront envoyées, donc la récupération compte quand meme.

et pour afficher une liste pour l'utilisateur tu fait comme précédemment avec le "disabled".

en résumé:
<select name="Liste[]" multiple disabled>
//et
<select name="Liste[]" multiple style="visibility : hidden;display : none ">
encore une fois c'est system D :roll:

par Truc » 23 oct. 2005, 23:08

sinon tu peut ruser (enfin si ça marche :wink: )

tu fait une liste a choix multiple (de toute façon c'est ce qu'il fallais étant donné que tu veut toute la liste), sans oublier les [] au nom.
et la rendre inutilisable (pas de clics) avec "DISABLED"
=>
<select name="Liste[]" multiple DISABLED> 


ensuite dans toutes la balise <option> mettre selected
=>
<option selected>
ensuite tu récupère avec $_POST['Liste'], et pour finir mettre tout ca dans le message:
$liste=$_POST['Liste'];
$message=implode( " ",$liste);
de la doc pour implode()

et apres [-o< (j'ai pas testé tout ca )

par céka » 23 oct. 2005, 21:11

Mais non fallais pas tout retirer :D (On est pas si méchant que ça :wink: )
mais meme si c'est pas du PHP que tu poste la lecture devient plus agréable avec une coloration => code = bouton PHP .

tu peut donc le remettre

Sinon il n'est pas possible de récupèrer une liste sans que celle-ci ait un élément de séléctionné (fait un essai, séléctionne un élément tu valide et la tu récupère avec $_POST['Liste'].

Donc il y a 2 possibilités :
1. au lieu de remplir une liste remplir un champ texte (textarea).
2. me dire a quoi cela va te servir de remplir une liste par javascript sans paramètre ? j'ai pas eu le temps de voir ce qui variable dans le script :?
ok, j'ai compris le truc des couleurs. j'ai remis mes scripts.
j'ai fait l'essai avec un element selectionné. Ca me renvoie donc uniquement l'element selectionné.
pour tout récuperer, j'ai donc essayé de concaténer toutes mes infos dans une chaine que je mets dans un seul champ, mais ce qui suit ma boucle ne s'execute pas (fin de la fonction Valider_onclick)
(je suis aussi débutant en html et en javascript qu'en php)

par Truc » 23 oct. 2005, 20:55

Mais non fallais pas tout retirer :D (On est pas si méchant que ça :wink: )
mais meme si c'est pas du PHP que tu poste la lecture devient plus agréable avec une coloration => code = bouton PHP .

tu peut donc le remettre

Sinon il n'est pas possible de récupèrer une liste sans que celle-ci ait un élément de séléctionné (fait un essai, séléctionne un élément tu valide et la tu récupère avec $_POST['Liste'].

Donc il y a 2 possibilités :
1. au lieu de remplir une liste remplir un champ texte (textarea).
2. me dire a quoi cela va te servir de remplir une liste par javascript sans paramètre ? j'ai pas eu le temps de voir ce qui variable dans le script :?

par céka » 23 oct. 2005, 20:25

bon avant de continuer ... edite ton message stp et met les balise
 le bouton marqué PHP dessus juste au dessus de la zone de saisie.

donc tu dis que ta liste est remplie ? si tu affche le code source (HTML) elle est remplie ?[/quote]

Euh, j'ai rien compris  :( 
Les fonctions que je viens de t'envoyer sont écrites en javascript, pas en php


Voici par exemple le code source html au moment du submit :
		<FORM id="Form1" name="Form1" action="maj_categ.php" method="post">
			<SELECT id="Liste" onchange="return Liste_onChange()" size="27" name="Liste">
				<OPTION selected></OPTION>
				<OPTION value="0 A1">B1</OPTION>
				<OPTION value="0 A2">B2</OPTION>
			</SELECT>
			<INPUT id="Sauvegarder" type="submit" value="Sauvegarder" name="Sauvegarder"> <INPUT id="Valider" onclick="return Valider_onclick()" type="button" value="Valider" name="Valider">
			"Image :" <INPUT id="I_Image" size="65" name="I_Image"> "Nom :" <INPUT id="I_Nom" size="35" name="I_Nom">
		</FORM>

par Cyrano » 23 oct. 2005, 20:14

ceka, lis donc la première ligne de l'article 3 des règles du forum...!

par Truc » 23 oct. 2005, 20:06

bon avant de continuer ... edite ton message stp et met les balise
 le bouton marqué PHP dessus juste au dessus de la zone de saisie.

donc tu dis que ta liste est remplie ? si tu affche le code source (HTML) elle est remplie ?

par céka » 23 oct. 2005, 19:58

Non, je la remplis avant le Submit :wink:

C'est avec Valider_onclick que je la remplis.
Liste_onChange permet seulement d'afficher les valeurs a modifier dans les champs Nom et Image.

(function Valider_onclick() {

	var Nom;
	var Valeur;
	var Ligne;
	var Blanc;
	var Code;
	var Tout;
	var i;
	
	Ligne = Form1.Liste.options.selectedIndex;
	Nom = Form1.I_Nom.value;
//	alert(Nom);

	if (Ligne>0) {
		Valeur = Form1.Liste.options[Ligne].value;
		Blanc = Valeur.indexOf(" ",0);
		Code = Nom.substring(0,Blanc);
		Valeur = Code + " " + Form1.I_Image.value;
		Form1.Liste.options[Ligne].text = Nom;
		Form1.Liste.options[Ligne].value = Valeur;
	} else {
		Valeur = 0 + " " + Form1.I_Image.value;
		var o=new Option(Nom,Valeur);
		Form1.Liste.options[Form1.Liste.options.length]=o;
	}
	Tout = "";
	Ligne = Form1.Liste.length;
	alert(Ligne);
    for (i=1;i<=Ligne;i=i+1) {
		Nom = Form1.Liste.options[i].text;
		Valeur = Form1.Liste.options[i].value;
    	Tout=Tout + "|" + Nom + "|" + Valeur;
	    alert(Tout);
    }
    alert("passé");
    Form1.Donnees.value = Tout
}


function Liste_onChange() {
	var Nom;
	var Valeur;
	var Ligne;
	var Blanc;

//	Ligne = Form1.Liste.length;
//	alert(Ligne);
	
	Ligne = Form1.Liste.options.selectedIndex;

	if (Ligne>0) {
		Nom = Form1.Liste.options[Ligne].text;
		Valeur = Form1.Liste.options[Ligne].value;
		Blanc = Valeur.indexOf(" ",0);
		Form1.I_Nom.value = Nom;
		Form1.I_Image.value = Valeur.substring(Blanc+1,Valeur.length);
	} else {
		Form1.I_Nom.value = "";
		Form1.I_Image.value = "";
	}

}

par Truc » 23 oct. 2005, 19:53

normal que tu n'a rien dans la variable POST, la liste est vide la
:wink:
<OPTION></OPTION>
elle feit quoi cette fameuse fonction qui se cache :lol:
return Liste_onChange() ?

par céka » 23 oct. 2005, 19:46

<FORM name="Form1" action="maj_categ.php" method="post" ID="Form1">
			<SELECT id="Liste" onchange="return Liste_onChange()" size="27" name="Liste">
				<OPTION></OPTION>
			</SELECT>
			<INPUT id="Sauvegarder" type="submit" value="Sauvegarder" name="Sauvegarder"> <INPUT id="Valider" onclick="return Valider_onclick()" type="button" value="Valider" name="Valider">
			"Image :" <INPUT id="I_Image" type="text" size="65" name="I_Image"> "Nom :" <INPUT id="I_Nom" type="text" size="35" name="I_Nom">
		</FORM>
<html>
	<head>
		<title>Maj_categ</title>
	</head>
	<body>
		<a href="page3.htm">Retour</a>
		<center>
			Bonjour nous sommes le : <?php $date = date("d-m-Y"); echo "$date"; echo "xxx"; ?>
		</center>
		<?
		$TO = "[email protected]";
		$h  = "From: [email protected]";
		$subject = "test";
		$message = $_POST['Liste'];
		mail($TO, $subject, $message, $h);
		?>
	</body>
</html>

Voila, tu as tout (sauf mon adresse email, pour eviter le spam)
As-tu besoin aussi des fonctions Javascript avec lesquelles je remplis la liste ?

par Truc » 23 oct. 2005, 19:39

Hmm... si tu mettais le code ici je pourai voir ce qui ne va pas (tout le code si possible, <form> à </form> et traitement (récupèration, avec le mail) :D

par céka » 23 oct. 2005, 19:25

J'ai modifié comme ca : $message = $_POST['Liste'];
Ca ne donne rien de plus.

La liste, je la remplis dans la page précédente à l'aide de 2 fonctions : Une qui met un element de la liste dans des champs pour modification, et une autre qui ajoute ou met à jour, selon que j'ai sélectionné la première ligne, qui est vide, ou une autre ligne.

par Truc » 23 oct. 2005, 19:18

J'ai essayé comme ca, mais ca ne donne rien: $message = $_POST['liste'];
ton attribut name est "Liste" avec une majuscule !!
donc:
$message = $_POST['Liste'];
Ce que je veux, c'est récupérer toutes les valeurs de la liste avec leurs noms respectifs, pas spécialement le choix sélectionné.
Ben .. euh .. la faut m'expliquer a quoi la liste te sert alors :-k

Que veut tu faire ?
La liste tu la remlis comment ?

par céka » 23 oct. 2005, 19:05

J'ai essayé comme ca, mais ca ne donne rien: $message = $_POST['liste'];
C'est une liste à choix unique.
Ce que je veux, c'est récupérer toutes les valeurs de la liste avec leurs noms respectifs, pas spécialement le choix sélectionné.