IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Relation entre 2 listes liées alimentées avec bdd avec l'affichage dans un tableau HTML


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut Relation entre 2 listes liées alimentées avec bdd avec l'affichage dans un tableau HTML
    Bonjour à tous,
    J'ai un petit logiciel de 2 listes déroulantes liées et alimentées par bdd qui fonctionne très bien, mais je voudrais que les résultats d'une requête affiche les données d'une autre table"coordonnees" provenant d'une autre bdd dans le tableau html. Malheureusement il m'affiche toujours le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Notice: Undefined index: nom_categorie in C:\Program Files\EasyPHP-5.3.3.1\www\infopub\Tab.php on line 41
     
    Notice: Undefined index: nom_selection in C:\Program Files\EasyPHP-5.3.3.1\www\infopub\Tab.php on line 41
    Ci-joint :listeslieesBis.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    <?php
    // Connexion à la base
     
    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db = 'test';
     
     
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());
    ?>
     
    <?php
    // initialisation/recuperation de la selection
    // categorie
    if (isset($_GET['categorie'])){
    	$categorie= $_GET['categorie'];
    } elseif (isset($_POST['selectcategorie'])){
    	$categorie = $_POST['selectcategorie'];
    } else {
    	$categorie = '';
    }
    // selection
    if (isset($_POST['selectselection'])){
    	$selection = $_POST['selectselection'];
    } else {
    	$selection = '';
    }
    ?>
     
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
    <head>
    	<title>Document sans titre</title>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
    	<script type="text/javascript">
    	function modifcombo()
    	{
    		var id_categorie = document.form1.selectcategorie.value;
    		document.location.replace("listeslieesBis.php?categorie=" + id_categorie );
    	}
    	</script>
     
    </head>
     
    <body>
     
    	<p>Essai formulaire</p>
     
    	<form name="form1" method="post" action="Tab.php">
    	<table width="100%" border="1">
    	<tr>
    	    <td>categorie:</td>
    		<td>
    			<select id="idselectcategorie" name="selectcategorie" class="txt16-000000" onChange="javascript: modifcombo();">
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php			// Execution requete : tous les categories
    				$ma_req = "SELECT * FROM T_CATEGORIES;";					  
    				$res_req = mysql_query($ma_req) or die("Selection table \"T_CATEGORIES\" impossible");
     
    				// Affectation des variables utilisees pour l'affichage
    				if (mysql_num_rows($res_req)!=0) { // resultat non vide
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_categorie = $une_ligne["id_categorie"];
    						$nom_categorie = $une_ligne["nom_categorie"];
    						$sel_categorie = ($id_categorie == $categorie)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_categorie; ?>"<?php echo $sel_categorie; ?>><?php echo $nom_categorie; ?></option>
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
    	<tr>
    		<td>selection :</td>   
            <td>
    			<select id="idselectselection" name="selectselection" class="txt16-000000">		
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php	  		// Execution requete : les selection des catégories selectionnées 
    				$ma_req = "SELECT * FROM T_SELECTIONS WHERE id_categorie = '".$categorie."';";
    				$res_req = mysql_query($ma_req) or die("Selection table \"T_SELECTIONS\" impossible");
    				// Affectation des variables utilis?es pour l'affichage
    				if (mysql_num_rows($res_req)!=0) // resultat non vide
    				{  
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_selection = $une_ligne["id_selection"];
    						$nom_selection = $une_ligne["nom_selection"];
    						$sel_selection = ($id_selection == $selection)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_selection; ?>"<?php echo $sel_selection; ?>><?php echo $nom_selection; ?></option>	
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
    	<tr>
            <td colspan="2">
    			<input type="submit" name="envoyer" value="envoyer" />
    		</td>
    	</tr>
    	</table>
    	</form>
     
    </body>
    </html>
    et le code: Tab.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    <?php
     
     if (isset($_POST['envoyer'])) 
    {
    	function Verif_magicquotes ($chaine)
    	    {
    	        if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
     
    	        return $chaine;
    	    } 
     // Récupération des valeurs des champs du formulaire 
    	$message = array();
     
     //$categorie = $_POST['selectcategorie'];
    	$id_categorie = isset($_POST['selectcategorie']) && trim($_POST['selectcategorie']) != '' ? Verif_magicquotes(ucfirst(trim($_POST['selectcategorie']))) : null;
     if ($id_categorie=$_POST['selectcategorie']);
    	$selection = isset($_POST['selectselection']) && trim($_POST['selectselection']) != '' ? Verif_magicquotes(ucfirst(trim($_POST['selectselection']))) : null;
     	echo $_POST['selectcategorie'];
    	echo $_POST['selectselection'];
     
    	if (!isset($selection))
    	    {
    		     $message[] = 'Veuillez choisir une option dans la seconde liste déroulante';
    		}  
    	}
        if (isset($message) && count($message) == 0) 
    	// connexion à la base de données
    try
    {
    //echo'<strong>Faites votre choix dans la liste :</strong>';
    // information pour la connection à le DB
    $host = 'localhost';
    $user = 'root';
     
    $pass = '';
    $db = 'clients';
     
    // connection à la DB
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());
           $select = "SELECT * FROM coordonnees WHERE  cat='$_POST[nom_categorie]' AND selection='$_POST[nom_selection]'";
     
     
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
     
     
    // si on a récupéré un résultat on l'affiche.
    if($total) {
        // debut du tableau
    	echo $selection;
        echo '<table bgcolor="FFFFFF">'."\n";
            // première ligne on affiche les titres prénom et surnom dans 2 colonnes
            echo '<tr>';
    		echo '<td bgcolor="#669999"><b><u>id</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>cat</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>selection</u></b></td>';
     
            echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
            echo '<td bgcolor="#669999"><b><u>prenom</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>numtel</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>codepostal</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>ville</u></b></td>';
    		echo '</tr>'."\n";
        // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
        while($row = mysql_fetch_array($result)) {
            echo '<tr>';
    		echo '<td bgcolor="#CCCCCC">'.$row["id"].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$row["cat"].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$row["selection"].'</td>';
            echo '<td bgcolor="#90EE90">'.$row["nom"].'</td>';
            echo '<td bgcolor="#90EE90">'.$row["prenom"].'</td>';
    		echo '<td bgcolor="#9ACD32">'.$row["numtel"].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$row["codepostal"].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$row["ville"].'</td>';
    		echo '</tr>'."\n";
        }
        echo '</table>'."\n";
        // fin du tableau.
    }
    else echo 'Pas d\'enregistrements dans cette table...';
     
    // on libère le résultat
    mysql_free_result($result);
    }
    catch(Exception $e)
    {
        // En cas d'erreur précédemment, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
    }
     
     
    ?>
    Quelqu'un peut-il m'aider à résoudre ce problème car j'avoue que l'index indéfini de nom_categorie et nom_selection me laisse perplexe?
    Sincères remerciements
    Claudine

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    $select = "SELECT * FROM coordonnees WHERE cat='$_POST[nom_categorie]' AND selection='$_POST[nom_selection]'";
    Tu n'as pas d'élément avec le name nom_selection dans ton formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = "SELECT * FROM coordonnees WHERE  cat='".$_POST["selectcategorie"]."' AND selection='".$_POST["nom_selectselection"]."'";
    A+.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    bonjour Andry.aime
    merci pour cette réponse rapide mais malheureusement cela ne fonctionne pas. j'ai une nouvelle erreur: idex inconnu de nom_selectselection.
    J'ai donc transformé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = "SELECT * FROM coordonnees WHERE  cat='".$_POST["selectcategorie"]."' AND selection='".$_POST["selectselection"]."'";
    il n'y a plus d'erreur mais il m'affiche:"'Pas d\'enregistrements dans cette table..." ce qui est faux puisqu'il y en a 6.
    Je crois que c'est normal car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $_POST['selectcategorie'];
    	echo $_POST['selectselection'];
    cela affiche1 ce qui correspond a l'id dans la table T_categorie correspondant au nom_catégorie de la même table
    et de nouveau 1 ce qui correspond à l'id dans la tableT_selection correspondant au nom_selection de cette même table
    Or dans la base de données "coordonnees" 'cat' est un nom d'une catégorie et non une id et "idem pour selection
    Je ne suis pas capable de retrouver les variables nom_categorie et nom_selection dans le javascript ou y a-t-il lieu de modifier alors que les deux listes liées fonctionnent très bien?
    Votre aide me serait précieuse.
    Merci
    Claudine

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Claudine,
    voila pourquoi je t'avais conseillé d'utiliser des NOMS DE VARIABLES EXPLICITES (pour éviter les confusions).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			<select id="idselectcategorie" name="selectcategorie" class="txt16-000000" onChange="javascript: modifcombo();">
    				<!-- ........... -->
    				<option value="<?php echo $id_categorie; ?>"<?php echo $sel_categorie; ?>><?php echo $nom_categorie; ?></option>
    				<!-- ........... -->
    			</select>
    			<select id="idselectselection" name="selectselection" class="txt16-000000">		
    				<!-- ........... -->
    				<option value="<?php echo $id_selection; ?>"<?php echo $sel_selection; ?>><?php echo $nom_selection; ?></option>	
    				<!-- ........... -->
    			</select>
    name="selectcategorie" -> value="<?php echo $id_categorie; ?>" -> $_POST['selectcategorie'] récupère id_categorie (de la table T_CATEGORIES)
    name="selectselection" -> value="<?php echo $id_selection; ?>" -> $_POST['selectselection'] récupère id_selection (de la table T_SELECTIONS)
    Comme le vois que tu as une nouvelle table "coordonnees" :
    => peux-tu nous donner la structure et les champs de tes 3 tables ?

    Plus précisément, qu'enregistres-tu dans "coordonnees" :
    - id_categorie ou nom_categorie ?
    - id_selection ou nom_selection ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonsoir Jreaux62,
    Très heureux de vous relire.
    La structure de la table"coordonnees" est la suivante:
    id , motdepasse , cat , selection , nom, prenom , numtel , codepostal , ville .
    le 'cat' correspond aux choix des catégories choisies par les clients
    la "selection" correspond aux choix des sélections choisies par les clients.

    Il faudrait donc que la catégorie choisie dans les listes liées(nom_catégorie) corresponde à 'cat' dans la table"coordonnes" et de même pour la selection.
    Le problème c'est que le javacript reprend les id des catégories et sélections et non les noms!
    Sincères remerciements
    Claudine

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comme je l'ai expliqué ci-dessus, c'est défini de cette manière dans les select : on récupère les 2 ids !

    Si tu veux récupérer les noms, alors il faut :
    - SOIT modifier les 2 selects pour récupérer directement les noms (et le reste du code en conséquence),
    - SOIT récupérer les noms A PARTIR des 2 ids récupérés (2 requêtes à faire).

    TOUT n'est qu'une question de BONNE CONCEPTION.
    Et une BONNE CONCEPTION découle de BONS CHOIX.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2014, 12h45
  2. Réponses: 1
    Dernier message: 02/12/2011, 11h46
  3. Réponses: 1
    Dernier message: 29/05/2010, 19h22
  4. relation entre 2 liste déroulantes
    Par all4youweb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/01/2010, 16h26
  5. [MySQL] liste déroulante alimentée par BDD
    Par mitch46000 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/06/2007, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo