probleme de requete

Mammouth du PHP | 19672 Messages

27 mai 2005, 16:25

BON, ton code remis à peu près en ordre et des question ensuite:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
include("connexionessai.inc.php");
//affichage pour la ville

$sql = 'SELECT distinct type_objet FROM objet order by type_objet;';

$result = pg_query($sql) or die( 'Erreur' );

$nb = pg_num_rows($result);
echo '<h1> nombre '.$nb.'</h1>';
?>
<select name="famille" onChange="location.href='<?php echo  $_SERVER['PHP_SELF']  ;?>?type_objet=' + this.value">
<?
if ( $nb==0 )
{
?>
<option>Aucune Famille</option>
<?
}
else
{
    ?>
    <option>*</option>

    <?
    $sel="selected";
    while ( $list = pg_fetch_array( $result ) )
    {
?>
<option value="<? echo $list['type_objet'] ;?>" selected="<?php if(isset($_SESSION['type_objet'])){ echo $sel;} ?>"><?php echo $list['type_objet'] ;?></option>
<?
    }
}
?>
</select>  
<?
if(isset($_GET['type_objet']))
{
    $type_objet=@$_GET['type_objet'];
    $_SESSION['type_objet'] = @$_GET['type_objet'];
}
elseif(isset($_GET['marque']))
{
    $marque=@$_GET['marque'];
    $_SESSION['marque'] = @$_GET['marque'];
}
elseif(isset($_GET['modele']))
{
    $modele=@$_GET['modele'];
    $_SESSION['modele'] = @$_GET['modele'];
}
//$_SESSION['type_objet'] = @$_GET['type_objet'];
echo @$_SESSION['type_objet'];

if(@$type_objet!=""){
    //affichage pour les marque
    $sql1 = "SELECT distinct marque FROM objet where type_objet='".$type_objet. "' order by marque;";
}
else
{
    $sql1 = "select distinct marque from objet order by marque";
}
$result1 = pg_query($sql1) or die( 'Erreur1' );
$nb = pg_num_rows($result1);
echo '<h1> nombre '.$nb.'</h1>';
?>
<select name="marque" onChange="location.href='<?php echo  $_SERVER['PHP_SELF'] ; ?>?marque=' + this.value">  
<?
if ( $nb==0 )
{
?>
<option>Aucune Marque</option>
<?  
}
else
{
?>
  <option>*</option>
    <?
    while ( $list1 = pg_fetch_array( $result1 ) )
    {
?>
<option value="<?php echo $list1['marque'] ;?>"><? echo $list1['marque'] ;?></option>
<?
    }
}
?>
</select>  
<?
//$marque=@$_GET['marque'];
//echo $marque;
echo @$_SESSION['marque'];
if(@$marque!="")
{
    //affichage par modele
    $sql1 = "SELECT distinct modele FROM objet where marque='".$marque. "' order by modele;";
}
else
{
    $sql1 = "select distinct modele from objet order by modele";
}
$result1 = pg_query($sql1) or die( 'Erreur1' );

$nb = pg_num_rows($result1);

echo '<h1> nombre '.$nb.'</h1>';
?>

<select name="modele" onChange="location.href='<?php echo $_SERVER['PHP_SELF'] ;?>?modele=' + this.value">
<?
if ( $nb==0 )
{
?>
<option>Aucun Modele</option>
<?  
}
else
{
?>
   <option>*</option>
    <?
    while ( $list1 = pg_fetch_array( $result1 ) )
    {
?>
<option value="<?php echo $list1['modele'] ;?>" ><?php echo $list1['modele']; ?></option>
<?
    }
}
?>
</select>  
<?
//$modele=@$_GET['modele'];
echo @$_SESSION['modele'];
?>
</body>
</html>
Ou donc est la balise <form> ???
Tu fais le rechargement avec un onchange="location..." donc tu perds la sélection dans la liste déroulante; Donc tout ce qu'on t'explique ne sert à rien de toutes façon

J'en arrive à me demander si les conseils qu'on te donne servent à quelque chose
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 mai 2005, 16:33

Petit message de soutien à Cyrano, et pour dire que j'étais en train de faire la même manip (des onChange et des validations de form et du PHP et des selected="selected") et tout fonctionne de mon côté.

Alors, pourquoi donny n'y arriverait pas ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 406 Messages

27 mai 2005, 16:41

ok desolé
je comprenais pas moi aussi pourquoi tu me parlais de form
tes conseils me serve je te rassure, chaque fois que tu m a conseillé j ai appris des choses
mais le truc est que je pensai que comme j utilisai le onchange je devais pas utilisé de <form> :oops:

Mammouth du PHP | 19672 Messages

27 mai 2005, 16:48

Une balise <select> ne peut être QUE à l'intérieur d'un formulaire, c'est la DTD (X)HTML qui est faite comme ça.

Donc, tu crées un formulaire, ce qui te permet de mettre un attribut method qui va définit le mode de transmission des données, en GET ou en POST. Sans balise form, comment transmets-tu les données ? tu ne peux pas, tout simplement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 mai 2005, 16:48

mais le truc est que je pensai que comme j utilisai le onchange je devais pas utilisé de <form>
Même si le <select> ne te sert pas en tant qu'élément de <form> il est tjs mieux d'avoir un document bien formé...pour les manips Javascript.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 406 Messages

27 mai 2005, 16:52

ok je vous remercie,
je vais refaire des modifs et voir ce que sa donne avec les balise <form>

Eléphant du PHP | 406 Messages

29 mai 2005, 09:59

si j 'utilise un formulaire, il me faudra bien un bouton pour valider ou quelquechose dans le genre pour que la method post fonction ?

Eléphant du PHP | 406 Messages

29 mai 2005, 10:03

Il faudra que je fasse un truc comme cela si je veux que le selected fonctionne ?
<option value="<? echo $list['type_objet'] ;?>" selected="<?php if($_SESSION['type_objet']==$_POST['famille']){ echo $sel;} ?>"><?php echo $list['type_objet'] ;?></option> 

Eléphant du PHP | 406 Messages

29 mai 2005, 10:10

J ai rajouter les balise form mais je vois pas trop.
il me selectionne toujours le derniere element de la liste deroulante,je vois pas comment je pourrai lui dire qu il faut qu il selectionne l element qui est egale à l element contenu dans la variable session ?

Mammouth du PHP | 19672 Messages

29 mai 2005, 11:08

Le principe est relativement simple, voici un exemple basique:
<?php
/* En haut du script, on récupère les données du formulaire dont l'élément sélectionné dans la liste */
$element = $_POST['element'];
/* On a maintenant le choix qui a été fait, passé le traitement on veut afficher à nouveau le formulaire avec le choix toujours sélectionné */
?>
<select name="element">
    <option value="valeur_1" <?php echo($element == "valeur_1"?"selected = \"selected\"":"") ?>>Valeur 1</option>
    <option value="valeur_2" <?php echo($element == "valeur_2"?"selected = \"selected\"":"") ?>>Valeur 1</option>
    <option value="valeur_3" <?php echo($element == "valeur_3"?"selected = \"selected\"":"") ?>>Valeur 1</option>
</select>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 406 Messages

29 mai 2005, 11:18

mais tu vois j ai tout mis dans un formulaire
<form method="post"> mais je n ai pas mis d action, le simple faite que dans mon on change j'appelle la meme page les element seront stocké dans le $_post ?
tu vois j ai trois liste dans ma page donc meme en cliquant ensuite sur la 2eme liste le selected sur la 1ere liste ne changera pas ?

Mammouth du PHP | 19672 Messages

29 mai 2005, 11:38

Et si tu faisais des essais avant de t'inquiéter :?:

Là, tu as l'air de craindre que ça ne fonctionne pas sans même avoir testé quoique ce soit. Personnellement, je ne ferai pas ton code: je te donne des éléments pour que tu saches le faire tout seul. Donc fais un essai et si ça ne marche pas, pose toi la question fondamentale : Pourquoi ? Quelle variable n'a pas la bonne valeur? Ai-je bien récupéré la valeur envoyée par le formulaire ? etc... Et si tu ne trouves pas toi-même la réponse, à ce moment là viens nous voir, et tu te rendras compte qu'en fonctionnant comme ça, tu vas finalement venir moins souvent parce que tu vas découvrir toi-même la plupart de tes erreurs :)

Si tu ne mets pas d'attribut action dans ta balise form, par défaut, ce sera vers la même page. Mais virtuellement, c'est vers une nouvelle page que les données sont expédiées et les valeurs sont bien transmises via GET ou POST selon ce qui est dans l'attribut method.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 406 Messages

29 mai 2005, 12:56

je l ai fait et dans ma liste j ai pour chaque element ce message d erreur :
undefined variable : element in c:.....
et j ai essayer en mettant dans element le resultat de la variable de sessions mais j ai le meme message d erreur .??

Mammouth du PHP | 19672 Messages

29 mai 2005, 13:11

Alors remonte dans le code pour voir pourquoi ta variable n'est pas définie: dans quel ordre est donc ton code ?
Bon, voilà ce que ça donne sur la base du code complet montré dans un post précédent :
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
/* Récupération éventuelle des éléments sélectionnés */
$famille = isset($_POST['famille'])?$_POST['famille']:"";
$marque = isset($_POST['marque'])?$_POST['marque']:"";
$modele = isset($_POST['modele'])?$_POST['modele']:"";



include("connexionessai.inc.php");
//affichage pour la ville

$sql = 'SELECT distinct type_objet FROM objet order by type_objet;';

$result = pg_query($sql) or die( 'Erreur' );

$nb = pg_num_rows($result);
echo '<h1> nombre '.$nb.'</h1>';
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<select name="famille" onChange="location.href='<?php echo  $_SERVER['PHP_SELF']  ;?>?type_objet=' + this.value">
<?
if ( $nb==0 )
{
?>
<option>Aucune Famille</option>
<?
}
else
{
    ?>
    <option>*</option>

    <?
    $sel="selected";
    while ( $list = pg_fetch_array( $result ) )
    {
?>
<option value="<? echo $list['type_objet'] ;?>"<?php echo(($famille != "" && $famille == $list['type_objet'])?" selected=\"selected\"":""); ?>><?php echo $list['type_objet'] ;?></option>
<?
    }
}
?>
</select>  
<?
if(isset($_GET['type_objet']))
{
    $type_objet=@$_GET['type_objet'];
    $_SESSION['type_objet'] = @$_GET['type_objet'];
}
elseif(isset($_GET['marque']))
{
    $marque=@$_GET['marque'];
    $_SESSION['marque'] = @$_GET['marque'];
}
elseif(isset($_GET['modele']))
{
    $modele=@$_GET['modele'];
    $_SESSION['modele'] = @$_GET['modele'];
}
//$_SESSION['type_objet'] = @$_GET['type_objet'];
echo @$_SESSION['type_objet'];

if(@$type_objet!=""){
    //affichage pour les marque
    $sql1 = "SELECT distinct marque FROM objet where type_objet='".$type_objet. "' order by marque;";
}
else
{
    $sql1 = "select distinct marque from objet order by marque";
}
$result1 = pg_query($sql1) or die( 'Erreur1' );
$nb = pg_num_rows($result1);
echo '<h1> nombre '.$nb.'</h1>';
?>
<select name="marque" onChange="location.href='<?php echo  $_SERVER['PHP_SELF'] ; ?>?marque=' + this.value">  
<?
if ( $nb==0 )
{
?>
<option>Aucune Marque</option>
<?  
}
else
{
?>
  <option>*</option>
    <?
    while ( $list1 = pg_fetch_array( $result1 ) )
    {
?>
  <option value="<?php echo $list1['marque'] ;?>"<?php echo(($marque != "" && $marque == $list['marque'])?" selected=\"selected\"":""); ?>><? echo $list1['marque'] ;?></option>
<?
    }
}
?>
</select>  
<?
//$marque=@$_GET['marque'];
//echo $marque;
echo @$_SESSION['marque'];
if(@$marque!="")
{
    //affichage par modele
    $sql1 = "SELECT distinct modele FROM objet where marque='".$marque. "' order by modele;";
}
else
{
    $sql1 = "select distinct modele from objet order by modele";
}
$result1 = pg_query($sql1) or die( 'Erreur1' );

$nb = pg_num_rows($result1);

echo '<h1> nombre '.$nb.'</h1>';
?>

<select name="modele" onChange="location.href='<?php echo $_SERVER['PHP_SELF'] ;?>?modele=' + this.value">
<?
if ( $nb==0 )
{
?>
<option>Aucun Modele</option>
<?  
}
else
{
?>
   <option>*</option>
    <?
    while ( $list1 = pg_fetch_array( $result1 ) )
    {
?>
<option value="<?php echo $list1['modele'] ;?>"<?php echo(($modele != "" && $modele == $list['modele'])?" selected=\"selected\"":""); ?>><?php echo $list1['modele']; ?></option>
<?
    }
}
?>
</select>
</form>
<?
//$modele=@$_GET['modele'];
echo @$_SESSION['modele'];
?>
</body>
</html>
Si ça marche, j'aimerais que tu en comprennes le fonctionnement. Ça ne sert à rien que quelqu'un te fasse ton code et que tu recopies bêtement, tu n'apprendras rien comme ça et tu seras toujours dépendant d'une aide extérieure. Tu me diras ce que tu as compris.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 406 Messages

29 mai 2005, 14:16

sa ne fonctionne pas, les truc ne reste jamais sur la liste
en faite sa doit etre impossible a cause du on change
mais je vais t expliquer ce que je veux faire
je veux choisir des element dans mes liste et faire une requete sur ma base à partir de ses element, le mieux vu qu on peut pas garder l element selectionner est que je les stock dans les variable de session et les affiche dans des zone texte (pour etre visible par l utilisateur) et ensuite je fait ma requete a l aide des variable de session ?
Modifié en dernier par donny le 29 mai 2005, 14:53, modifié 1 fois.