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

PHP & Base de données Discussion :

Besoin d'aide pour une requete


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 43
    Par défaut Besoin d'aide pour une requete
    Bonjour à tous,

    J'espère que je ne me suis pas trompé de rubrique.
    Alors voilà, j'essaie de faire un genre de "formulaire" qui m'enverrai la réponse correspondant à ce que l'utilisateur a selectionné.

    Exemple concret: j'ai une liste déroulante avec à l’intérieur les noms des régions.
    L'utilisateur sélectionne la région qui lui plait, et les résultats ( ce sont les associations) qui correspondent à cette région s'affichent.

    J'ai donc une table avec id, region, noms, adresse, tel ...Ect

    Les noms des régions ss'affiche bien, ainsi que le résultat , mais j'ai quand même un problème.

    Mes régions s'affiche en plusieurs fois, et sur chacune d'entre elle, le resultat qui va avec.
    Exemple si j'ai deux assos qui sont dans les pyrenees atlantique, et bien dans la liste déroulante j'ai deux fois pyrennee atlantique. Si je selectionne la première j'ai le resultat de la première assos, si je selectionne le deuxième j'ai le resultat de la deuxième assos.

    Or ce que je voudrais c'est que la région ne s'affiche qu'une seule fois et que lorsque je selectionne pyrennee atlantique, les deux assos s'affiche.

    Mais je sais pas comment on fait.
    Je suis débutante en php, alors si quelqu'un pouvait avoir la gentillesse de m'aider ça serait super simpa. Car là, je seche :s

    Voici le code :

    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
    <div id="rechercherace">
     
     
     
      <form method="post" action="recherche_associations.php">
    <fieldset>
           <legend>Rechercher une race </legend>
       <p> 
          <label for="region">Choisissez la race :</label>
           <select name="recherche">
     <?php 		   
    	$host = "xxxxx";
    $user = "xxxxx";
    $password = "xxxxx";
    $bdd = "xxxxx"; 
    {
    mysql_connect($host, $user, $password);
    mysql_select_db($bdd) or die("Impossible d'ouvrir la base de donnee $bdd");
    mysql_query("SET NAMES UTF8"); 
    }
     
    	$lettre = '1'; //On initalise la lettre a une valeur absurde
    	$sql = 'SELECT id,region FROM association ORDER BY region ASC'; //ici change le champ et la table pour adapter :p
    	$req = mysql_query($sql);
     
    	while($data = mysql_fetch_assoc($req)) //envoie la colonne voulu $req= connect a $sql = prendre tous les noms de race_chien et classer par ordre croissant
    	{
    	   if (substr($data['region'],0,1) != $lettre) //Si on change de lettre; substr = extraire
    	   {
    			if ($lettre != '1') //Si on as d?j? chang? de lettre, on ferme le optgroup
    			{
    				echo '</optgroup>';
    			}
    			$lettre = substr($data['region'], 0, 1);
    			echo '<optgroup label="'.$lettre.'">';
    		}
     
    		echo '<option value="'.$data['id'].'">'.$data['region'].'</option>';//donne les noms dans le formulaire
    	}
     
    	if ($lettre != '1') //Et enfin si on a mit une lettre (le seul cas ou ce serait faux serait celui ou l'on ne trouve rien, mais quand m?me :p
    	{
    		echo '</optgroup>';
    	}
    		?>
           </select>
        	<input type="submit" name="ok" value="Rechercher"/>		
     
       </p>
    </fieldset>
    </form>   
     
        <?php 	
     
    	//if($_POST['ok'] == "Rechercher")
     
    	if(isset($_POST['ok']))
     
    	{
    	//On r?cup?re les valeurs entr?es par l'utilisateur :
     
    	//On pr?pare la commande sql d'insertion
    	$requete = "SELECT * FROM association WHERE id='$_POST[recherche]'";
    	$donnees = mysql_fetch_array(mysql_query ($requete));
     
     
    	?> 
    	  </p>
     
     
         <div id="rechercheasso">     
     
                   <div id="asso"><img src= "<?php echo $donnees['photo'];?>" height="200" align="absmiddle"/></div>
                   <div id="race2a">
    			   <table>
                     <tr>
                       <td><ul>
                         <li><strong>Département :</strong> <?php echo $donnees['département']; ?><br /></li>  
    					 <li><strong>Noms de l'association :</strong> <?php echo $donnees['noms']; ?><br /> </li>
    					 <li><strong>Adresse :</strong> environ <?php echo $donnees['adresse']; ?>ans et plus<br /></li>
    					 <li><strong>Numéros de téléphone:</strong> <?php echo $donnees['telephone']; ?><br /></li>
    					 <li><strong>Adresse mail :</strong> <?php echo $donnees['mails']; ?><br /></li>
    					 <li><strong>Logo :</strong>  <?php echo $donnees['photo']; ?><br /></li>
    					 <li><strong>URL :</strong> <?php echo $donnees['URL']; ?><br /></li>               
    					</p>
                       </ul></td>
                     </tr>
                   </table>
     
                 </div>
         </div>
     
    	<?php
    	}
     
    	?>
     
     
     
     
    	</div>

    Voilà c'est un petit peu long, mais j'ai essayé de faire propre.
    Merci aux personnes qui prendront la peine de me lire


    Edit: j'ai un peu avancé de mon coté.
    J'ai en fait rajouter un table.
    Donc sur ma première table j'ai :
    -id
    -id_region
    -noms
    -adresse
    -telephone
    -mails
    et sur ma deuxième table j'ai :
    -id
    -region
    -id_region

    Je crois que c'est quelques chose dans ce genre qu'il faudrait que je fasse.
    J'ai lu plein d'article pour savoir comment faire pour lier les deux, mais je crois que je m’emmêle les pinceaux.

    Quelqu'un aurait-il une piste?
    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    La fin de ton post te mets sur la bonne voie.
    Cependant je n'ai pas clairement compris où tu voulais en venir.
    Si ce que tu souhaites c'est qu'après avoir construit tes options du <select> à partir de la table regions ce <select> soit modifié au sein même du formulaire pour ne plus proposer que les associations de cette région ou bien si tu veux proposer cette liste des associations dans une autre liste dudit formulaire ou bien encore ouvrir un nouveau formulaire avec la liste des associations de la région sélectionnée.
    Dans les deux premiers cas il faudrait t'orienter vers AJAX.
    En tout état de cause, maintenant que tu as normalisé cette partie de ta base en créant deux tables, ce n'est plus vraiment un problème MySQL.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 43
    Par défaut
    Bonjour, merci de m'avoir répondu.

    Disons que je ne sais pas faire la requete qui relie les deux tables.
    Je ne sais d'ailleurs pas si la structure de mes tables sont bonne.
    Je les ai faites à la main sur phpmyadmin, et je crois que le id_region je dois lui mettre une clé étrangère. Mais je ne sais pas comment on fait (sur l'interface phpmyadmin).

    Et ce que je voudrais c'est simplement une liste déroulante ou apparaisse les régions.
    Une fois que l'utilisateur aura selectionné une région, la liste des associations appartenant a cette région s'afficherait sur la page ( pas en liste déroulante)
    C'est pour ça que je pensais que c'était du ressort de Mysql...

    J'ai lu plein de tuto ou on fait "joujou" avec le selec pour prendre un nom, ou un mot ou tous les mots qui commence par la meme lettre ect, mais j'ai pas trouvé de tuto avec mon cas. Donc je continue de cherché

    Merci d'avance pour votre aide

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Je n'ai pas tout compris entre tes explications et le code que tu as posté...
    Je l'ai entièrement repris afin de t'aiguiller sur une autre voie. Dans tous les cas, le b.a.ba te manque. Faudrait potasser un peu avant de se jeter (à poil) dans l'eau du bain
    Allez bon courage.
    Adaptes le obligatoirement histoire de le rendre fonctionnel dans ton evironnement d'exécution.

    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
    <?php
     
    // REGIONS : NOMENCLATURE INSEE
    $regions = array(
       '42' => 'Alsace',
       '72' => 'Aquitaine',
       '83' => 'Auvergne',
       '26' => 'Bourgogne',
       '53' => 'Bretagne',
       '24' => 'Centre',
       '21' => 'Champagne-Ardenne',
       '94' => 'Corse',
       '43' => 'Franche-Comté',
       '11' => 'Ile-de-France',
       '91' => 'Languedoc-Roussillon',
       '74' => 'Limousin',
       '41' => 'Lorraine',
       '73' => 'Midi-Pyrénées',
       '31' => 'Nord-Pas-de-Calais',
       '25' => 'Basse-Normandie',
       '23' => 'Haute-Normandie',
       '52' => 'Pays de la Loire',
       '22' => 'Picardie',
       '54' => 'Poitou-Charentes',
       '93' => 'Provence-Alpes-Côte d\'Azur',
       '82' => 'Rhône-Alpes',
       '01' => 'Guadeloupe',
       '03' => 'Guyane',
       '02' => 'Martinique',
       '05' => 'Mayotte',
       '04' => 'La Réunion'
    );
     
    // on vérifie si des données ont été envoyées au script : région sélectionnée
    $selected = null;
    if (isset($_POST['region']) && isset($regions[$_POST['region']])) {
       $selected = $_POST['region'];
     
       // paramètrage et connexion à la base
       $host = "xxxxx";
       $user = "xxxxx";
       $password = "xxxxx";
       $bdd = "xxxxx";
       mysql_connect($host, $user, $password);
       mysql_select_db($bdd) or die("Impossible d'ouvrir la base de donnee $bdd");
       mysql_query("SET NAMES UTF8");
     
       // une région a été sélectionnée : on extrait les associations correspondantes
       $sql = "SELECT * FROM association WHERE id_region='$selected'";
       $data = mysql_query($sql);
     
       if ( ! $data) {
          die('Erreur extraction des associations : '.mysql_error());
       }
     
       // récupération de toutes les données
       $assos = array();
       while($row = mysql_fetch_assoc($data)) {
          $assos[] = $row;
       }
    }
    ?>
    <form method="post" action="recherche_associations.php">
       <label for="listeRegions">Régions : </label>
       <select id="listeRegions" name="region">
          <?php foreach($regions as $id => $region): ?>
          <option value="<?php echo $id, '"', (($id !== $selected) ?: ' selected="selected"'), '>', $region; ?></option>
          <?php endforeach; ?>
       </select>
       <input type="submit" value="Rechercher">
    </form>
    <?php if (null !== $selected): /* on affiche les résultats que si une région a été sélectionnée */ ?>
    <div id="resultat">
       <table>
          <thead>
             <tr><th>Liste des associations</th></tr>
          </thead>
          <tbody>
             <?php foreach($assos as $asso): ?>
             <tr>
                <td>
                   <ul>
                      <li><strong>Département :</strong><?php echo $asso['département']; ?><br /></li>
                      <li><strong>Noms de l'association :</strong> <?php echo $asso['noms']; ?><br /> </li>
                      <li><strong>Adresse :</strong> environ <?php echo $asso['adresse']; ?>ans et plus<br /></li>
                      <li><strong>Numéros de téléphone:</strong> <?php echo $asso['telephone']; ?><br /></li>
                      <li><strong>Adresse mail :</strong> <?php echo $asso['mails']; ?><br /></li>
                      <li><strong>Logo :</strong>  <?php echo $asso['photo']; ?><br /></li>
                      <li><strong>URL :</strong> <?php echo $asso['URL']; ?><br /></li>
                   </ul>
                </td>
             </tr>
             <?php endforeach; ?>
          </tbody>
       </table>
    </div>
    <?php endif; ?>

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 43
    Par défaut
    Merci rawsrc, je sais que j'ai encore énormement de lacune.
    Il y a quelques mois encore je ne connaissais absolument rien.



    Merci d'avoir repris le code, je regarde ça et vous tiens au courant.


    EDIT : Je n'ai pas eu à modifier quoi que ce soit (sauf l'id_region dans la bdd 'association' que j'ai adapter à la nomenclature. ) cela marche exactement comme je le souhaiter. Il ne reste plus que le css/html à mettre en place, et ça c'est bon je maitrise (heureusement pour moi :s )

    Mais, en tout cas, je n'avais pas du tout penser à faire de cette façon! Il n'y a même pas besoin de deux tables, une seule suffisait en faite. J'était pas partie dans une bonne direction.
    Encore merci pour le temps que vous y avez passé, c'est gentil de votre part.

Discussions similaires

  1. Besoin d'aide pour une requete
    Par fabris dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2006, 20h15
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  3. besoin d'aide pour une requete
    Par Pigoulou dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/02/2006, 20h34
  4. Besoin d'aide pour une requete
    Par Okhotsk dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2005, 16h30
  5. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54

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