Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/11/2011, 22h07   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 0
Points : 0
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 :
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
freestyle83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 06h16   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 08h20   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 0
Points : 0
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
freestyle83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 12h17   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
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 :
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; ?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2011, 14h24   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 0
Points : 0
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.
freestyle83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web