affichage balise select

Eléphant du PHP | 97 Messages

20 mars 2012, 18:03

Bonjour,

j'ai encore quelques difficultés à réaliser ce que je souhaite.
A partir d'une première balise select, je souhaiterai qu'en fonction de ce que l'on sélectionne dans ce select, on affiche ou non une autre balise select complémentaire de la première.
Pour ce faire, lors de la création de la première balise select, je fais un appel à une fonction javascript qui va dire d'afficher ou non la seconde balise select.
J'ai fait quelque chose d'un peu tordu alors suivez bien :)

Voici la fonction qui crée ma première balise :
function addOffresCommerciales($id,$selected){
	$req = "SELECT id_offre_commerciale, intitule_offre, active, visite FROM offre_commerciale";
	$result = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
	echo "<select id='".$id."' name='".$id."'>";
	while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
		if($row['active'] == 1){
			if(isset($selected) && $selected == $row['id_offre_commerciale']) $sel = "selected='selected'"; else $sel = "";
			echo "<option ".$sel." value='".$row['id_offre_commerciale']."' onClick=chmpOffre(this.value)>".$row['intitule_offre']."</option>
			";
		}
	}
	echo "</select>";
		
}
Donc ici, j'appelle la fonction javascript chmpOffre où this.value contient la valeur de la balise select, à savoir l'id de l'offre que j'ai sélectionné.

Ensuite, voici la fonction chmpOffre que je crée. texte contient la valeur de l'id de l'offre que j'ai sélectionné

Code : Tout sélectionner

function chmpOffre(texte) { var chmp = document.getElementById("visites"); //chmp fait référence à la seconde balise select que je souhaite voir affiché ou non. Cette balise select est toujours la même. Elle ne change jamais. Soit elle est affichée, soit elle ne l'est pas. //on a créé autant de formulaires qu'il n'y a d'offres qui proposent des visites. Chacun de ces formulaires comporte un name, un id et une value //Ces trois informations sont les memes et valent id_offre_commerciale. //on crée donc une variable a qui va contenir value de l'élément dont l'id vaut l'id_offre_commerciale //Si a existe réellement, c'est que l'on a sélectionné dans la liste une offre qui possède une visite //si a n'existe pas, alors il n'existe pas d'éléments dans cette page qui ont pour id l'id_offre_commerciale, donc l'offre sélectionnée ne comprend pas de visites. var a=document.getElementById(texte).value; if(a) { chmp.style.display="inline"; } else chmp.style.display="none"; }
Et dans mon code php, je crée un certain nombre de formulaires cachés qui contiennent les id des offres qui doivent laisser affiché le second select. A partir de ces id, je vais voir si la valeur sélectionnée correspond à un id de mes formulaires cachés. Si tel est le cas, alors cela signifie que l'offre que j'ai sélectionné doit laisser apparaitre le second select, dans le cas contraire, on n'affiche pas la balise.
$req="SELECT id_offre_commerciale FROM offre_commerciale WHERE visite=1";
$reqquery=mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $reqquery);
while($row=mysql_fetch_array($reqquery,MYSQL_ASSOC))
{
	echo '<input type="hidden" name="'.$row['id_offre_commerciale'].'" id="'.$row['id_offre_commerciale'].'" value="'.$row['id_offre_commerciale'].'"></input>';
}
Finalement, mon code fonctionne, c'est-à-dire que si jamais je sélectionne une offre qui doit afficher la seconde balise, elle le fait. Seulement, je change d'avis et qu'au final je sélectionne une offre qui n'a pas besoin de voir affiché la balise, celle-ci reste affichée. Là est mon problème !

Savez-vous ce qui ne va pas dans mon code ? merci d'avance.

Eléphant du PHP | 97 Messages

26 mars 2012, 11:03

personne pour m'aider ? ..

ViPHP
ViPHP | 2287 Messages

31 mars 2012, 19:23

personne pour m'aider ? ..
Bonjour,

A priori il te manquerait juste un "else" quelquepart pour cacher le select, de la même manière et au même endroit où tu t'arranges pour l'afficher, donc certainement avec du javascript. (Et si tu as peu de réponses c'est parceque ton explication est très longue, spécifique, compliquée et contient des morceaux de code mais pas ceux qui pourraient permettre de voir/tester ton problème réel.) Ce qui fait qu'on doit jouer aux devinettes pour t'aider (si on a pris le temps de te lire et de comprendre), et c'est pénible. A toi d'aider ceux qui t'aident ;-)

Eh bien en fait tu as le "else", mais tu n'y passes sans doute jamais. Le if(a) teste juste si a contient "quelquechose", ce qui peut correspondre à priori à tous tes ids, donc normal que tu ne voies jamais rien disparaître à priori... Il faudrait modifier cette condition pour n'être vraie que lorsque a contient bien une des valeurs que tu souhaites (là ce if() semble exprimer tout à fait autre chose, et vu le mal que tu as à l'expliquer, c'est qu'il y a un problème dans la mise en oeuvre - à revoir en plus simple, sans doute).
if(!@work()){ Nespresso(); } else { what(); }
______________________________