Page 1 sur 1

Comment faire une requete suivant 2 critères d'un menu dérou

Posté : 18 juin 2006, 10:58
par Stegue
Bonjour,
Sur mon site, le visiteur choisit l'auteur d'une citation dans un menu déroulant (qui se présente sous la forme nom et prénom ) et un clic sur ok fait apparaitre le nom et prénom de l'auteur et sa ou ses citation(s).
Tout marchait bien depuis mes derniers posts sur ce forum mais est arrivé ce qui devait arrivé.
A force de compléter ma base, j'ai 2 auteurs qui portent le même nom.
Le problème est que: si je choisis l'un ou l'autre, ma requète affiche les citations des 2.

Voici mon menu:
<?php// Lancement de la requ&ecirc;te de s&eacute;lection des donn&eacute;es de la tables
$requete_sql = "SELECT nom, prenom FROM citateurs_celebres ORDER BY nom ASC";

// Execution de la requete $requete_sql
$sql = mysql_query($requete_sql) or die(mysql_error());

// Association des cellules a la variable $sql_row
$sql_row = mysql_fetch_assoc($sql);

// Ici on compte le nombre de cellules retourn&eacute;es par notre requete
$sql_num_rows = mysql_num_rows($sql);
?>
                        <select name="auteur" class="Style21">
                          <?
     do
     {
?>
                          <option value="<?php echo $sql_row['nom'];?>"><?php echo $sql_row['nom']?> <?php echo $sql_row['prenom'];?></option>
                          <?
    }

        while ($sql_row = mysql_fetch_assoc($sql));
              $rows = mysql_num_rows($sql);
              if($rows > 0) {
              mysql_data_seek($sql, 0);
              $row_sql = mysql_fetch_assoc($sql);
Et ma requete:
<?phpif(isset($_POST["auteur"]))
{
   $nom = $_POST["auteur"];


   $sql = "SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation, citations_celebres.id FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur WHERE citateurs_celebres.nom='".$nom."'";

  $reponse = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$i = true;

   while ($donnees = mysql_fetch_array($reponse) )
   {
      if($i)
      { ?>
                <span class="Style28">
                <?php
         echo $donnees['prenom']." ";
         echo $donnees['nom']." <br /><br /> ";?>
                </span>
              <?php
      }
      echo $donnees['citation']." <br /> "; ?>
              <span class="Style29">_____________________________________________________________
              <script language="JavaScript" src="vote/easy-votes-light.php?idcom=
<?php echo $donnees['id']  ?>&rep=vote" type="text/javascript"

></script>
Vu le script, c'est normal que ça bug mais je sèche un peu pour le résoudre !

Posté : 18 juin 2006, 11:10
par delcedo galaxialord
Salut !

Crée plutot des identifiants dans la table de tes auteurs (un autoincremente par exemple), et à la place de mettre le nom de l'auteur dans le select, tu mets l'identifiant (qui sera unique).

Dans ta page de traitement tu récupères l'identifiant et cela te permettra de dissocier les auteurs ayant le même nom.

:)

Posté : 18 juin 2006, 15:39
par Invité
$sql = "SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citateurs_celebres.id, citations_celebres.citation, citations_celebres.id FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur WHERE citateurs_celebres.nom='".$nom."'";
Je ne comprends pas, id dans la table citateurs-celebres est égal à numcitateur dans la table citations-celebres.
Cette condition devrait éviter le probleme ?
FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur

Posté : 18 juin 2006, 17:32
par delcedo galaxialord
Si j'organise tes tables :

citateurs_celebres(id, nom, prenom )
citation_celebres(id, numcitateur, citation )

Pour ton <select> de la première page :
<?php
$sql = "SELECT id, nom, prenom FROM citateurs_celebres";

// [...]
?>
<select name="auteur">
<?php 
do
{
?>
<option value="<?php echo $sql_row['id'] ?>" ><?php echo $sql_row['nom']." ".$sql_row['prenom'] ?></option>
<?php
}
while()
?>
</select>
et pour ta page de traitement :
$sql = "SELECT a.nom, a.prenom, c.citation 
FROM citateurs_celebres a, citations_celebres c
WHERE
a.id = c.numcitateur
AND a.id = ".$_POST['auteur'];

// Et ensuite ton traitement que tu as déjà
Normalement tout devrait fonctionner :)

Posté : 18 juin 2006, 18:07
par Stegue
Merci, ça marche.
Ca engendre juste un problème au niveau de mon systeme de vote. Je vais voir de plus près.