[RESOLU] une barre déroulante qui contiens plusieurs barre déroulante

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 : [RESOLU] une barre déroulante qui contiens plusieurs barre déroulante

Re: une barre déroulante qui contiens plusieurs barre déroulante

par tof73 » 16 mai 2015, 15:12

tes listes n'ont pas de valeur par défaut avec value="", donc elles ont toutes toujours une valeur.

voir si ce n'est pas mieux, d'avoir une seule liste au début, et en fonction de la sélection dans cette première liste, générer dynamiquement le contenu d'une seconde liste.

Re: une barre déroulante qui contiens plusieurs barre déroulante

par challenger11 » 16 mai 2015, 11:50

Bonjour @ryle,
j'ai fais comme vous m'avez dis concernant la variable $type2 qui concerne les seconds barre déroulante elle pointe toujours vers la première barre déroulante parmi les second même si je clique sur valider sans rien choisir elle prend cette valeur ainsi j'ai enlevé tous les accents .Pour les données récupérés voici l'affichage dans le cas ou je choisi dans la barre principale " accompany performance" :

Code : Tout sélectionner

Array ( [type_mission] => Accompany Performance [Accompany_Croissance] => Management de la Relation Client (CRM) [Accompany_Performance] => Organisation et RH [Accompany_Pilotage] => Controle de Gestion [Accompany_Risk_Management] => Strategie et Gouvernance des Risques [Accompany_systeme_D'information] => Strategie et Choix du SI [Valider] => )

Re: une barre déroulante qui contiens plusieurs barre déroulante

par Ryle » 16 mai 2015, 09:36

Il faudrait afficher la requête générée (echo $req) pour vérifier les instructions envoyées à la base de données. A priori la valeur associée au champ miss_type2 doit être vide. Si tel est le cas, cela veut dire que la variable $type2 est vide et donc qu'aucun des if/elseif n'a été vérifié, où que les valeurs reçues sont vides également.

Affiche le contenu de $_POST pour vérifier les valeurs transmises par le formulaire. Il suffit qu'un champ ou un index soit mal nommé (vire les accents et apostrophes des noms des champs ;)) et php ne verra pas la valeur transmise
echo '<pre>'; 
print_r($_POST);
echo '</pre>';
Edit : attention à ta requête SQL. Tu insères les données passées en post sans aucun contrôle sur celle-ci. Un utilisateur malveillant pourrait en profiter pour créer son propre formulaire et t'envoyer des données différentes de celles que tu as prévu dans tes listes. Il pourrait ainsi envoyer du code SQL que tu exécuterais sans le contrôler. On appelle ça des injections SQL. On en parle souvent sur les forums de phpfrance ou internet (petite recherche :)) si tu veux sécuriser un peu tout ça :)

Re: une barre déroulante qui contiens plusieurs barre déroulante

par challenger11 » 16 mai 2015, 02:40

Merci @ryle pour votre réponse mais c'est pareil sa n'a pas marché il n’insère dans la base que les choix de la première barre déroulante qui se trouve dans le if

Re: une barre déroulante qui contiens plusieurs barre déroulante

par Ryle » 15 mai 2015, 20:57

Bonjour,

La fonction isset() te permet de tester si une variable est définie. Cela permet de ne pas faire appel à des variables ou des index de tableaux qui n'existent pas.
if (isSet($_POST["type_mission"]) // si le champ est envoyé en post
    $type_mission=$_POST["type_mission"];
else // éventuellement une valeur par défaut
    $type_mission="Défaut";
Pour vérifier qu'une variable est définie et contient une valeur, tu peux utiliser empty(). Cette fonction retourne vrai si la variable existe (isSet()) ET que celle-ci n'est ni égale à null, zéro, false ou chaine vide :)

Ps : ton code n'est pas très lisible. Il est mal indenté et contient beaucoup de parenthèse inutiles qui le rende compliquer à lire et à maintenir :)
if (isset($_POST["Accompany_Croissance"])) { // ici il faudrait à priori utiliser !empty() au lieu de isSet()
	$type2=$_POST["Accompany_Croissance"]; 
}
elseif(isset($_POST["Accompany_Performance"])) { // idem 
	$type2=$_POST["Accompany_Performance"]);
}
elseif (isset($_POST["Accompany_Pilotage"])) { // ...
	$type2=$_POST["Accompany_Pilotage"];
}
elseif (isset($_POST["Accompany_Risk_Management"])) {
	($type2=$_POST["Accompany_Risk_Management"]);
}
elseif (isset($_POST["Accompany_Systéme_D'information"])) { 
	$type2=$_POST["Accompany_Systéme_D'information"]);
	// Nota : les accents et apostrophes ne sont pas recommandés dans les noms de champs, de variables ou d'index
}

Re: une barre déroulante qui contiens plusieurs barre déroulante

par challenger11 » 15 mai 2015, 16:06

Merci @tof73 pour votre réponse
Je n'ai pas bien compris pouvez vous m'expliquer d'avantage plutôt comment tester si une valeur est séletionnée

Re: une barre déroulante qui contiens plusieurs barre déroulante

par tof73 » 15 mai 2015, 15:47

s'il y a plusieurs balises select pour le second niveau dans la page html, alors le test à faire n'est pas isset car cela retourne toujours vrai. il faut tester si une valeur est sélectionnée.

une barre déroulante qui contiens plusieurs barre déroulante

par challenger11 » 15 mai 2015, 15:41

Bonjour je veux que l'utilisateur après d’avoir sectionné son choix dans la première barre déroulante une autre s'affiche pour qu'il effectue un autre choix et ces deux choix serons insérer dans la base de données. jusque la tout marche seulement quand je récupéré les choix sélectionné la barre déroulante fonctionne correctement mes les seconds barres non car le code actuelle n’insère qu les choix de la première barre déroulante qui se trouve dans la condition if c'est à dire il ne continue pas le parcours même si l'utilisateur choisi autre chose pour les seconds barre il n’insère dans la base que celle qui se trouve en premier dans le if donc voila la partie php ou je pense que l'erreur se trouve :
PS:'type_mission ' c'est la barre principale et elle marche parfaitement et les autres les seconds
<?php
if(isset($_POST["Valider"])) 
{	
mysql_connect('localhost','root','');
mysql_select_db('mission');
$type_mission=$_POST["type_mission"];
$type2='';
if(isset($_POST["Accompany_Croissance"])){
	($type2=$_POST["Accompany_Croissance"]); }else
			if(isset($_POST["Accompany_Performance"])){
			($type2=$_POST["Accompany_Performance"]);}else 
				if(isset ($_POST["Accompany_Pilotage"])){
				($type2=$_POST["Accompany_Pilotage"]);}else
					if(isset ($_POST["Accompany_Risk_Management"])){
						($type2=$_POST["Accompany_Risk_Management"]);}
							else if( isset($_POST["Accompany_Systéme_D'information"])) {
								($type2=$_POST["Accompany_Systéme_D'information"]);}

$req=("INSERT into miss (miss_type1,miss_type2)
		VALUES ('$type_mission','$type2')");
		mysql_query($req) or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());

}
?>
merci d'avance pour votre aide