Page 1 sur 1
Cascade de Liste Déroulante
Posté : 18 févr. 2008, 14:47
par Photographiquement Vôtre
Bonjour,
J'ai une première liste déroulante qui s'alimente bien mais pas la seconde qui y est liée.
Je ne vois pas où est mon erreur.
Merci de votre aide
<html>
<head>
<title>Envoyer une newsletter</title>
</head>
<body><center>
<?php
include("../Connexion/connexion.php");
?>
<table border="0" cellspacing="0" cellpadding="3">
<tr height="100">
<td>
<br>
</td>
</tr>
<tr>
<td><center><font face="verdana" size="2" color="#808080"><b>Envoyer votre newsletter</b></font></center></td>
</tr>
<br>
<tr>
<td>
<form id="form_email" method="post" action="news_send_html.php">
<table width="470" align="center" border="0" cellspacing="0">
<tr>
<td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td>
<td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td>
<td width="311" align="left"><textarea name="message" id="message" rows="10" cols="55"></textarea></td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="categorie" width="40">
<OPTION value="-1" selected>Sélectionnez une catégorie</OPTION>
<?php
$sql_categorie = "SELECT * FROM tblcategorie_prospect";
$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error());
while ($result_categorie=mysql_fetch_array($query_categorie))
{
extract($result_categorie);
?>
<!-- $idr permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->
<option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option>
<?php
}
mysql_free_result($query_categorie);
?>
</select>
</td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="souscategorie" width="40">
<OPTION value="-1" selected>Sélectionnez une sous catégorie</OPTION>
<?php
if(isset($cat) && $cat != -1)
{
echo "OK";
$sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId = ". $cat . " ORDER BY tblsouscategorie_prospect";
$query_souscategorie = mysql_query($sql_souscategorie) or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error());
while($result_soucategorie = mysql_fetch_array($query_souscategorie))
{
extract($result_souscategorie);
?>
<option value="<?php echo($souscategorie_prospectId); ?>"<?php echo((isset($souscat) && $souscat == $souscategorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($souscategorie_prospectLibelle); ?></option>
<?php
}
}
?>
</select>
<tr>
<td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>
Posté : 18 févr. 2008, 15:20
par d0m
es tu sûr que $cat contient bien une bonne valeur et que la requête renvoie bien des résultats?
Posté : 18 févr. 2008, 16:01
par Photographiquement Vôtre
Merci
J'ai des données dans mon select "catégorie" mais je ne suis pas sur de la syntaxe pour définir $cat
<option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option>
Posté : 18 févr. 2008, 17:41
par d0m
$cat est la catégorie sélectionnée dans la liste déroulante.
Je pense que tu as une liste de catégories, tu sélectionne une catégorie et la page se recharge.
Il faut donc au rechargement de ta page initialiser $cat avec la valeur sélectionnée précédemment dans ta liste.
C'est à dire dans $_POST['categorie']
Posté : 18 févr. 2008, 18:58
par Photographiquement Vôtre
OK j'ai essayé de compléter sans meilleur résultat
<?php
include ("../Connexion/connexion.php");
$cat = isset($_POST['categorie'])?$_POST['categorie']:null;
//echo "$cat";
if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "")
{
$categorie_selectionnee = $_POST['categorie'];
$souscategorie_selectionnee = $_POST['souscategorie'];
?>
<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p>
<?php
}
?>
<form id="form_email" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept">
<table width="470" align="center" border="0" cellspacing="0">
<tr>
<td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td>
<td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td>
<td width="311" align="left"><textarea name="message" id="message" rows="10" cols="55"></textarea></td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="categorie" id="categorie" width="40" onchange="document.forms['chgdept'].submit();">
<OPTION value="-1" selected>Sélectionnez une catégorie</OPTION>
<?php
$sql_categorie = "SELECT * FROM tblcategorie_prospect";
$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error());
while ($result_categorie=mysql_fetch_array($query_categorie))
{
extract($result_categorie);
?>
<!-- $cat permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->
<option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option>
<?php
}
mysql_free_result($query_categorie);
?>
</select>
</td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="souscategorie" id="souscategorie" width="40">
Sélectionnez une sous catégorie</OPTION>
<?php
if(isset($cat) && $cat != -1)
{
echo "$cat";
$sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId = ". $cat . " ORDER BY tblsouscategorie_prospect";
$query_souscategorie = mysql_query($sql_souscategorie) or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error());
while ($result_souscategorie=mysql_fetch_array($query_souscategorie))
{
extract($result_souscategorie);
?>
<!-- $cat permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->
<option value="<?php echo($souscategorie_prospectId); ?>"<?php echo((isset($souscategorie_selectionnee) && $souscategorie_selectionnee == $souscategorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($souscategorie_prospectLibelle); ?></option>
</select>
<?php
}
mysql_free_result($query_souscategorie);
}
?>
</td>
</tr>
<tr>
<td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td>
</tr>
</table>
</form>
</body>
</html>
Posté : 18 févr. 2008, 20:23
par d0m
Essaie de voir à quel niveau se pose le problème :
transmission de donnée : $_POST['catégorie'] contient elle la bonne valeur?
préséléction dans la liste : La première liste a-t-elle la bonne catégorie préséléctionnée après rechargement
requête SQL : la requête SQL de sous catégorie est elle correcte? (affichage de la chaine requête)
éxécution requête : si oui, la requête renvoie elle des résultats? (test directement dans phpmyadmin ou similaire)
construction de la liste : les résultats de la requête sont ils bien insérés dans la liste?
Posté : 18 févr. 2008, 20:32
par Photographiquement Vôtre
Ma liste categorie est correctement remplie.
Mais quand je clique dessus, rien ne se passe = aucun résultat à l'instruction
$cat = isset($_POST['categorie'])?$_POST['categorie']:null;
echo "$cat";
Mais quand je soumets le formulaire
echo "$cat"; marche.
Un autre fait inquiétant, quand je soumets le formulaire mes boutons "submit" et "reset" disparaissent ?
Posté : 18 févr. 2008, 22:51
par d0m
Tu veux que ta page se recharge donc automatiquement en changeant de catégorie dans la liste.
En PHP pur ce n'est pas possible, il faut soumettre le formulaire par un bouto submit.
Par contre tu peux utiliser du javascript avec l'événement
onChange.
Par exemple :
<form id="form_email" method="post" action="<?php echo $_SERVER['PHP_SELF']">
<select name="categorie" onChange="this.form.submit();" width="40">
En changeant l'action du formulaire pour qu'il redirige vers la page elle même.
Tu fais simplement un test au début de ta page, si le formulaire a été soumis par le bouton, tu rediriges les informations via un header vers ta page
news_send_html.php.
Sinon c'est que tu as simplement changé de catégorie.
Sinon de l'ajax...
Posté : 19 févr. 2008, 02:03
par Photographiquement Vôtre
Oui j'avais compris mais je n'arrive toujours pas à mouvementer ma sous catégorie.
J'ai un peu modifié mon code :
<?php
include ("../Connexion/connexion.php");
$cat = isset($_POST['categorie']);
echo "$cat";
if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "")
{
$categorie_selectionnee = $_POST['categorie'];
$souscategorie_selectionnee = $_POST['souscategorie'];
?>
<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p>
<?php
}
$sql_categorie= "SELECT * FROM tblcategorie_prospect ORDER BY categorie_prospectId";
$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error());
$code_categorie = array();
$libelle_categorie = array();
/* On active un compteur */
$nb_categorie = 0;
while($result_categorie = mysql_fetch_assoc($query_categorie))
{
array_push($code_categorie, $result_categorie['categorie_prospectId']);
array_push($libelle_categorie , $result_categorie['categorie_prospectLibelle']);
/* On incrémente de compteur */
$nb_categorie++;
}
?>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept">
<table width="470" align="center" border="0" cellspacing="0">
<tr>
<td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td>
<td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td>
<td width="311" align="left"><textarea name="message" id="message" rows="10" cols="55"></textarea></td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="categorie" id="categorie" width="40" onchange="document.forms['chgdept'].submit();" width="40">
>
<OPTION value="-1" >Sélectionnez une catégorie</OPTION>
<?php
for($i = 0; $i < $nb_categorie; $i++)
{
?>
<option value="<?php echo($code_categorie[$i]); ?>"<?php echo((isset($cat) && $cat == $code_categorie[$i])?" selected=\"selected\"":null); ?>><?php echo($libelle_categorie[$i]); ?></option>
<?php
}
?>
</select>
</td>
</tr>
<?php
mysql_free_result($query_categorie);
if(isset($cat) && $cat != -1)
{
/* Cération de la requête pour avoir les sous catégories */
$sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId =" .$cat. " ORDER BY souscategorie_prospectId";
$query_souscategorie = mysql_query($sql_souscategorie)or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error()); ;
/* Compteur pour les sous catégories */
$nb_souscategorie = 0;
/* On crée deux tableaux pour les Id de sous catégories et leurs libellés */
$code_souscategorie = array();
$libelle_souscategorie = array();
/* On va mettre les Id et Libellés dans les deux tableaux */
while($result_souscategorie = mysql_fetch_assoc($query_souscategorie))
{
array_push($code_souscategorie, $result_souscategorie['souscategorie_prospectId']);
array_push($libelle_souscategorie,$result_souscategorie['souscategorie_prospectLibelle']);
$nb_souscategorie++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="souscategorie" id="souscategorie">
<?php
for($d = 0; $d<$nb_souscategorie; $d++)
{
?>
<option value="<?php echo($code_souscategorie[$d]); ?>"<?php echo((isset($souscategorie_selectionnee ) && $$souscategorie_selectionnee == $code_souscategorie[$d])?" selected=\"selected\"":null); ?>><?php echo($libelle_souscategorie[$d]); ?></option>
<?php
}
?>
</select>
<?php
mysql_free_result($query_souscategorie);
}
?> </td>
</tr>
<tr>
<td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td>
</tr>
</table>
</form>
</body>
</html>
Posté : 19 févr. 2008, 09:43
par d0m
reprenons.
Qu'appelles tu mouvementer ta sous catégorie?
Que veux tu que ça fasse exactement et qu'est ce que ça fait pour l'instant?
Posté : 19 févr. 2008, 15:05
par Photographiquement Vôtre
Je souhaite quand j'ai choisi un élément dans ma première listbox "categorie" que ma deuxième listbox "sous categorie" soit remplie.
Pour l'instant cela marche quand je clique sur le bouton de submit
Posté : 19 févr. 2008, 15:39
par d0m
Dans ta liste des catégories tu as ce code :
et voilà ton formulaire :
Ce qui veut dire en français soumettre le formulaire
nommé chgdept dans le document courant.
Or dans ton formulaire tu ne précise pas de nom, juste l'id :
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept">
Il faut donc préciser l'attribut
name.
Sinon tu peux préciser que c'est le formulaire dans lequel la liste se trouve :
Ça a l'avantage de garder le code valide si tu changes le nom de ton formulaire.
Posté : 19 févr. 2008, 16:34
par Photographiquement Vôtre
J'ai fait quelques corrections.
Merci pour ton aide
Voici le code pour qui cela peut intéresser :
<?php
include ("../Connexion/connexion.php");
$cat = isset($_POST['categorie'])?$_POST['categorie']:null;
if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "")
{
$categorie_selectionnee = $_POST['categorie'];
$souscategorie_selectionnee = $_POST['souscategorie'];
?>
<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p>
<?php
}
$sql_categorie= "SELECT * FROM tblcategorie_prospect ORDER BY categorie_prospectId";
$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL1 !'.$query_categorie.'<br>'.mysql_error());
$code_categorie = array();
$libelle_categorie = array();
/* On active un compteur */
$nb_categorie = 0;
while($result_categorie = mysql_fetch_assoc($query_categorie))
{
array_push($code_categorie, $result_categorie['categorie_prospectId']);
array_push($libelle_categorie , $result_categorie['categorie_prospectLibelle']);
/* On incrémente de compteur */
$nb_categorie++;
}
?>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" name="chgdept" id="chgdept">
<table width="470" align="center" border="0" cellspacing="0">
<tr>
<td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td>
<td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td>
<td width="311" align="left"><textarea name="message" id="message" rows="10" cols="55"></textarea></td>
</tr>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="categorie" id="categorie" width="40" onchange="document.forms['chgdept'].submit();" width="40">
>
<OPTION value="-1" >Sélectionnez une catégorie</OPTION>
<?php
for($i = 0; $i < $nb_categorie; $i++)
{
?>
<option value="<?php echo($code_categorie[$i]); ?>"<?php echo((isset($cat) && $cat == $code_categorie[$i])?" selected=\"selected\"":null); ?>><?php echo($libelle_categorie[$i]); ?></option>
<?php
}
?>
</select>
</td>
</tr>
<?php
mysql_free_result($query_categorie);
if(isset($cat) && $cat != -1)
{
/* Cération de la requête pour avoir les sous catégories */
$sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId=". $cat ."" ;
$query_souscategorie = mysql_query($sql_souscategorie)or exit ('Erreur SQL2 !'.$query_souscategorie.'<br>'.mysql_error());
/* Compteur pour les sous catégories */
$nb_souscategorie = 0;
/* On crée deux tableaux pour les Id de sous catégories et leurs libellés */
$code_souscategorie = array();
$libelle_souscategorie = array();
/* On va mettre les Id et Libellés dans les deux tableaux */
while($result_souscategorie = mysql_fetch_assoc($query_souscategorie))
{
array_push($code_souscategorie, $result_souscategorie['souscategorie_prospectId']);
array_push($libelle_souscategorie,$result_souscategorie['souscategorie_prospectLibelle']);
$nb_souscategorie++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<tr>
<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td>
<td width="311" align="left"><select name="souscategorie" id="souscategorie">
<?php
for($d = 0; $d<$nb_souscategorie; $d++)
{
?>
<option value="<?php echo($code_souscategorie[$d]); ?>"<?php echo((isset($souscategorie_selectionnee ) && $$souscategorie_selectionnee == $code_souscategorie[$d])?" selected=\"selected\"":null); ?>><?php echo($libelle_souscategorie[$d]); ?></option>
<?php
}
?>
</select>
<?php
mysql_free_result($query_souscategorie);
}
?> </td>
</tr>
<tr>
<td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td>
</tr>
</table>
</form>
</body>
</html>