Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2011
    Messages : 4
    Points : 2
    Points
    2

    Par défaut Liste liée avec connexion odbc

    Bonjour

    Je suis en train de créer un formulaire ou on pourrait renseigner des informations à propos de formations proposées.
    Je suis à un stade ou j'ai vraiment un problème, c'est quand je crée une liste liée (liste déroulante change en fonction du premier choix). J'ai décidé de faire appel uniquement au PHP et non à du javascript ou à de l'ajax.
    J'ai tout de même testé ma requête sous access et elle marche :
    Voici là ou çà coince :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    //Connexion a la base de donnée
    		$cnx=odbc_connect("formation","root","") or die ("Impossible de se connecter Ã* la base de donnée");
     
    		//Création de la requête
    		$sql="SELECT intitule_gfe 
    		        FROM GFE 
    			ORDER BY intitule_gfe";
     
    		//Préparation et exécution de la reqûete
    		$res=odbc_exec($cnx,$sql);
     
    		//Affichage de la requête
    		echo '<p>
    			<label for="gfe"><li>GFE :</li></label><br/>
    			<select name="gfe" id="gfe">';
    			echo "<option value='-1'>- - -Choisissez un GFE- - -</option>";
    			while($row=odbc_fetch_array($res))
    			{
    				echo "<option value='".$row['intitule_gfe']."'>".$row['intitule_gfe']."</option>";
    			}
    			echo '</select>
    		</p>';
     
    		//Requête liée Ã* la première liste déroulante
    		if(isset($_POST['$row[intitule_gfe]']) && $_POST['$row[intitule_gfe]'] != -1)
    		{
    			//Préparation de la requête 
    			$sql2="SELECT SSGFE.intitule_ssgfe 
    				  FROM SSGFE,GFE,Posseder
    				  WHERE GFE.num_gfe=Posseder.num_gfe
    				  AND Posseder.num_ssgfe=SSGFE.num_ssgfe
    				  AND GFE.intitule_gfe= ".$row[intitule_gfe]."
    				  ORDER BY intitule_ssgfe";
     
    			  //Préparation et exécution de la requête
    			  $res2=odbc_exec($cnx,$sql2);
     
    			  //Affichage de la requête
    					echo '<p>
    				    <label for="ssgfe"><li>Sous-GFE</li></label><br/>
    					<select name="ssgfe" id="ssgfe">';
    					while($row2=odbc_fetch_array($res2))
    					{
    						echo '<option value="'.$row2['intitule_ssgfe'].'">'.$row2['intitule_ssgfe'].'</option>';
    					}
    					echo '</select> </p>';
    		}
    		//Deconnexion
    		odbc_close($cnx);
    		?>
    Il ne m'affiche aucune erreur mais je crois que le compilateur n'arrive pas à faire le test isset() dans $row[intitule_gfe]. Pourquoi, çà devrait marcher non ?

    Si j'ignore le test, alors il va me détecter une erreur au niveau du odbc_exec. En effet, le compilateur me signale une erreur au niveau de la jointure, mais je sais que la requête est bonne.

    Merci d'avance d'avoir lu mon message en attendant une réponse.

  2. #2
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 582
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 582
    Points : 8 294
    Points
    8 294

    Par défaut

    Bonjour,
    Ta syntaxe $_POST est malformée :
    Code :
    $_POST['$row[intitule_gfe]'] => $_POST[$row['intitule_gfe']]
    Et puis, ton if(isset($_POST['$row[intitule_gfe]']) est en dehors du la boucle while() qui définit $row à chaque passage. A moins que ton $sql ne retourne qu'un seul et unique enregistrement, dans ce cas ça ne devrait pas poser de problème.

    Je sais que c'est (presque) équivalent mais il est préférable d'utiliser une jointure correctement formée à la place des critères des jointures dans le WHERE. Un truc du genre :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql2 = 
       "SELECT 
          SSGFE.intitule_ssgfe 
       FROM 
          SSGFE
             INNER JOIN Posseder ON SSGFE.num_ssgfe = Posseder.num_ssgfe
             INNER JOIN GFE ON Posseder.num_gfe = GFE.num_gfe
       WHERE
          GFE.intitule_gfe= ".$row['intitule_gfe']."
       ORDER BY 
          intitule_ssgfe";
    # Dans la Création, tout est permis mais tout n'est pas utile...

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2011
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Je ne vais pas pouvoir te répondre si çà marche car le poste ou je suis, je n'ai pas accès au localhost. je serais sur le poste afin de corriger mercredi, et je te dirais çà. En tout cas, merci pour ton aide

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •