Appel de données de 2 tables par liste déroulante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Appel de données de 2 tables par liste déroulante

par Stegue » 18 mars 2006, 15:12

Genial et rapide. Un grand merci Truc.

Et hop ... résolu :lol:

par Truc » 18 mars 2006, 15:06

le plus simple est de demander de n'afficher le nom et prénom qu'une seule fois:
  $reponse = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$i = true;

   while ($donnees = mysql_fetch_array($reponse) )
   {
      if($i)
      {
         echo $donnees['prenom']." ";
         echo $donnees['nom']."<br />";
      }
      echo $donnees['citation']."<br />";
      $i = false;
   } 

par Stegue » 18 mars 2006, 15:02

Juste une petite chose avant le "résolu".
(tu vois, mon retour est rapide !)

J'ai modifié la fonction echo pour afficher le nom et prenom de l'auteur.

Ca marche mais si l'auteur a plusieurs citations, son nom et prenom se répète autant de fois qu'il a des citations.
if(isset($_POST["auteur"]))
{
   $nom = $_POST["auteur"];


   $sql = "SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation 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());

   while ($donnees = mysql_fetch_array($reponse) )
   {
      echo $donnees['prenom']." ";
	  echo $donnees['nom']."<br />";
	  echo $donnees['citation']."<br />";
   }
}
// On a fini de travailler, on ferme la connexion :
mysql_close(); // Déconnexion de MySQL
?>

par Truc » 18 mars 2006, 14:53

De rien :)

n'oublis pas le [Réolu] :wink:

par Stegue » 18 mars 2006, 14:47

C'est bon, ça marche !
J'ai supprimé:
echo $sql; 
Et j'ai désormais la citation de l'auteur choisi dans la liste déroulante.

Merci beaucoup Truc et à bientôt.
Ben ouais, je pense retrouver d'autres problèmes ! :wink:

par Truc » 18 mars 2006, 14:45

mainteannt tu peux enlever la ligne qui affiche la requete:
echo $sql; 
qui ne sert que pour les tests

par Stegue » 18 mars 2006, 14:40

Ca s'ameliore, maintenant ma page résultat affiche le nom de l'auteur et sa ou ses citations mais avec la requete. Comme ça.

SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur WHERE citateurs_celebres.nom='Beigbeder'A New York les taxis sont jaunes, à Londres ils sont noirs et à Paris ils sont cons.

On est pas loin de la vérité.

par Truc » 18 mars 2006, 14:34

je suis un peu perdu la,
tu as une erreur ?
ou rien ne s'affiche ?

c'est étonnant que la requete ne renvois pas de résultats si le nom existe biendans le champ "nom"

par Stegue » 18 mars 2006, 14:13

Pourtant, j'ai une autre page pour appeler les citations mais sans critères de choix et ça marche.
Voici:
$reponse = mysql_query("SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur ORDER BY citateurs_celebres.nom ASC LIMIT 0, 5"); 

echo mysql_error();
// On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p>
<?php echo $donnees['citation']; ?><br />
<?php echo $donnees['prenom']; ?> <?php echo $donnees['nom']; ?>
 </em>
</p>

<?php
}
// On a fini de travailler, on ferme la connexion :
mysql_close(); // Déconnexion de MySQL
?>
Et les citations s'affichent bien par 5 comme limité dans la requête.

par Truc » 18 mars 2006, 13:45

dans ton code il manque la partie affichage de la requête:
<?
if(isset($_POST["auteur"]))
{
   $nom = $_POST["auteur"];


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

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

   while ($donnees = mysql_fetch_array($reponse) )
   {
      echo $donnees['citation']."<br />";
   }
}
// On a fini de travailler, on ferme la connexion :
mysql_close(); // Déconnexion de MySQL
?>
Pour phpmyadmin, pas imporatnt que tu teste en local ou en ligne le plus important est de remplir la base. Si phpmyadmin ne donne pas de tableau de resultat cela signifi que tu n'as pas de données qui correspondent aux critères de recherche, ici le nom ou les jointures (citateurs_celebres.id = citations_celebres.numcitateur).

par Stegue » 18 mars 2006, 13:34

En fait, je n'utilise pas PHPmyadmin en local mais sur le serveur de mon hébergeur. C'est peut-être pour ça que je n'ai pas le tableau dont tu parles.

et pour isset voici ma page:
<?php
mysql_connect("mysql4.8", "xxxxxx", "xxxxxxx"); //connexion à la base
mysql_select_db("citation"); // Sélection de la base citation
// On est connectés, on peut travailler sur la BDD

if(isset($_POST["auteur"]))
{
$nom = $_POST["auteur"];


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

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

}
// On a fini de travailler, on ferme la connexion :
mysql_close(); // Déconnexion de MySQL
?>

par Truc » 18 mars 2006, 11:53

:( je sens que mon inexpérience va te faire perdre patience, désolé. :wink:
T'en fait pas :wink:
La requete est donc bien exécutée et normalement tu dois avoir un tableau avec les résultats en dessous (dans phpmyadmin)

Pour le isset montre nous ce que tu as fait.

par Stegue » 18 mars 2006, 08:23

la requête générée
celle qui s'affiche à l'écran suite au "echo" donc pas de $sql ni de varaibles dans phpmyadmin.
:( je sens que mon inexpérience va te faire perdre patience, désolé. :wink:

Donc j'ai rectifié et voici ce que dit MyPHPadmin:

Votre requête SQL a été exécutée avec succès (traitement: 0.0009 sec.)

Par contre, avec isset, j'ai le même résultat.

par Truc » 18 mars 2006, 00:01

Dans MyPHPadmin, Mysql a repondu:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '$sql = "SELECT citateurs_celebres.nom, citateurs_celebres.preno
la requête générée :wink:
celle qui s'affiche à l'écran suite au "echo" donc pas de $sql ni de varaibles dans phpmyadmin.

Pour le isset(), tu inclus la 2eme partie de ton code dans ce test:
if(isset($_POST["auteur"]))
{
$nom = $_POST["auteur"];
...
}

par Stegue » 17 mars 2006, 23:51

Dans MyPHPadmin, Mysql a repondu:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '$sql = "SELECT citateurs_celebres.nom, citateurs_celebres.preno

J'ai ensuite mis les messages d'erreurs mais il n'apparaissent pas. J'ai toujours la même chose: SELECT ....

Par contre, en ce qui concerne isset(), je sèche.