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

Eléphant du PHP | 113 Messages

18 juin 2006, 10:58

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 !

Eléphant du PHP | 153 Messages

18 juin 2006, 11:10

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.

:)
http://gl2.delcedo.com/ Galaxialord 2 !

Invité
Invité n'ayant pas de compte PHPfrance

18 juin 2006, 15:39

$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

Eléphant du PHP | 153 Messages

18 juin 2006, 17:32

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 :)
http://gl2.delcedo.com/ Galaxialord 2 !

Eléphant du PHP | 113 Messages

18 juin 2006, 18:07

Merci, ça marche.
Ca engendre juste un problème au niveau de mon systeme de vote. Je vais voir de plus près.