Page 1 sur 1

accéder à une table via select mais avec une variable

Posté : 17 nov. 2005, 12:23
par glop glop
Bonjour,

un petit souçi pour une requète.
Le code ci-dessous fonctionne parfaitement dans mon environnement
$resultat = mysql_query("SELECT * from table1 where nom='$recherche_nom'");
Je souhaiterais remplacer table 1 par une variable "$choix_table" et la , j'ai un pb de syntaxe.

Cette variable provient d'un formulaire option que je récupère par Post
$choix_table = trim ($_POST['choix']);
Lorsque je fais un echo de $choix_table, la valeur retourné est correct "table1", "table2", ou "table3" en fonction de la selection du formulaire.

Si vous avez une idée, je suis preneur, merci

Re: accéder à une table via select mais avec une variable

Posté : 17 nov. 2005, 12:45
par zeus
Tu reprends tout simplement le principe utilisé pour insérer ta variable $recherche_nom.
$choix_table = trim ($_POST['choix']);
$resultat = mysql_query("SELECT * from ".$choix_table." where nom='".$recherche_nom."'");
J'ai extrait les variables des chaines pour des questions de clarté et de validité ;)

Posté : 17 nov. 2005, 13:22
par glop glop
merci pour ta très rapide réponse, mais,

la syntaxe me renvoie l'erreur suivante pour une autre ligne. Erreur inéxistante sans l'utilisation de la variable $choix_table

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp 1-8\www\projet serveur web\centre_recherche_archives44.php on line 58

Cette ligne correspond au début de la boucle pour la récup et affichage du tableau
while($affichage = mysql_fetch_row($resultat)){
je dois certainement mal écrire les syntaxes quand j'appelle des variables.
Je me perds avec les . ' " et autre ponctuation

Merci à toi si tu as une autre idée

Posté : 17 nov. 2005, 13:34
par Truc
salut, d'apres le message d'erreur la requete n'est pas conforme. Affiche la requete générée (echo) pour verifier qu'elle est complete =>
echo $resultat;
la table (table2)que tu met en variable existe-t-elle ?

Posté : 17 nov. 2005, 13:58
par glop glop
J'ai mis le code complet en dessous si vous avez le courage...
Pour répondre, oui les 3 tables existent (table1 / table2 / table3)

Si j'affiche un echo de $choix_table, le retour est ok => table1, table 2 ou table3

Si je n'intègre pas la variable $choix_table dans la requète Select, aucune erreur, je n'attaque que la table du Select (1, 2 ou 3)

Si j'affiche un echo de $resultat (sans variable $choix_table), j'ai un retour ressource ID#6

Si j'affiche un echo de $resultat (avec variable $choix_table), j'ai l'erreur de tout à l'heure sur le while (Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp 1-8\www\projet serveur web\centre_recherche_archives44.php on line 60) en ligne 60 maintenant car rajout de la ligne echo pour test

Merci à vous

// Connexion à la base en faisant appel au fichier connexion_base
      require 'connexion_base.php';
      $resultat = mysql_query("SELECT * from ".$choix_table." where nom='".$recherche_nom."'");
       mysql_close();

      echo "<table ALIGN=\"center\" BORDER=\"1\" cellpadding=\"5\" border bordercolor=\"green\">";

      // Première ligne en-tête du tableau
      echo "<tr>";
      echo "<td bgcolor=\"#669999\" align=\"center\"><b><u>Nom</u></b></td>";
      echo "<td bgcolor=\"#669999\" align=\"center\"><b><u>Prénom</u></b></td>";
      echo "<td bgcolor=\"#669999\" align=\"center\"><b><u>Autres Prénoms</u></b></td>";
      echo "<td bgcolor=\"#669999\" align=\"center\"><b><u>Année</u></b></td>";
      echo "<td bgcolor=\"#669999\" align=\"center\"><b><u>Plus d' infos</u></b></td>";
      echo "</tr>"."\n";

      //Récupération et affichage des résultats de la table choisie (table1 / table2 / table3)
      while($affichage = mysql_fetch_row($resultat)){
      $num = ucfirst($affichage[0]);
      $nom = ucfirst($affichage[6]);  // le chiffre 9 correspond au numéro de la colonne dans la table etat_civil, attention, le premier n° est le 0
      $prenom1 = ucfirst($affichage[7]);
      $prenom2 = ucwords($affichage[8]);
      $date_naissance = ucwords($affichage[10]);

      // transition date us => fr
      $annee = substr($date_naissance,0,4);
      $mois = substr($date_naissance,5,2);
      $jour = substr($date_naissance,8,2);
      $date = "$jour-$mois-$annee";

      echo "<tr>";
      echo "<td><font color=\"blue\" size=\"2\">$nom</font></td>";
      echo "<td><font color=\"blue\" size=\"2\">$prenom1</font></td>";
      echo "<td><font color=\"blue\" size=\"2\">$prenom2</font></td>";
      echo "<td><font color=\"blue\" size=\"2\">$date</font></td>";
      echo "<td align=\"center\"><input type=\"checkbox\" multiple name=\"case[]\" value=\"$num\"></td>";
      echo "</tr>";
      }
      echo "</table>";

Posté : 17 nov. 2005, 14:03
par Truc
euh.. autant (au temps ?!) pour moi ce que je voulais c'est la requete elle meme, il faut séparer:
$sql="SELECT * from ".$choix_table." where nom='".$recherche_nom."'";
echo $sql;
$resultat = mysql_query($sql); 

et la tu affiche $sql.

Posté : 17 nov. 2005, 14:09
par iclo
Tu as plusieurs tables, ayant la même structure ? :? :? :? :? :?

Posté : 17 nov. 2005, 15:47
par glop glop
Oui, les trois tables ont la même structure. Plus précisement, les trois tables correspondent à naissance, mariage, et décès.

Concernant l'echo $sql, le retour me parait OK
l'echo bascule bien entre les trois tables en fonction de $choix_table

Code : Tout sélectionner

SELECT * from table1 where nom='Gauthier'
Je reste avec la même erreur, toujours inexistant si je saisie la requète Select directement avec table1 / table2 / table3
J'ai effectué le test via une condition

Code : Tout sélectionner

if ($choix_table == 'table1') {......} elseif ($choix_table == 'table2') {......} elseif ($choix_table == 'table2') {......}
Cela fonctionne bien, mais j'aurais d'autres conditions à saisir plus tard, et cela va énormément alourdir ce les possibilités


Merci encore

Posté : 17 nov. 2005, 15:55
par Truc
effetivement c'est pas forcément une bonne solution :?

ajoute mysql_error(), pour voir le type de mesage d'erreur de la requete
$resultat = mysql_query($sql) or die('Erreur SQL ! '.$sql.' '.mysql_error());

Je suis un âne - je suis un âne - je suis un âne

Posté : 17 nov. 2005, 16:33
par glop glop
Je suis un âne.
Je vais l'écrire 50 fois ce soir.

Merci pour le mysql_error qui a permi de mettre en évidence que la value de mon formulaire n'était pas complète.
Il manquait la précision de la table qui ne m'avais pas sauté aux yeux lorsque j'affichait un echo de $choix_table


Merci à tous pour votre aide. Sujet clos.
Désolé, mais je ne vois pas la balise [résolu] !!!!!

Re: Je suis un âne - je suis un âne - je suis un âne

Posté : 17 nov. 2005, 16:35
par Truc
Désolé, mais je ne vois pas la balise [résolu] !!!!!
Tu ne peut pas étant donné que tu as posté en invité... a la charge d'un modo
:D

n'oublis pas de t'inscrire pour la procaine fois :wink:

Posté : 17 nov. 2005, 18:37
par iclo
Je persisterais à dire que la structure de la base de donnée, n'est pas optimale, ce qui risque de poser des problêmes de lourdeur, ou en cas de modification ou de mise à jour.