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

glop glop
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 12:23

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 nov. 2005, 12:45

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é ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

glop glop
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 13:22

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 13:34

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 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

glop glop
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 13:58

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>";

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 14:03

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 2144 Messages

17 nov. 2005, 14:09

Tu as plusieurs tables, ayant la même structure ? :? :? :? :? :?

glop glop
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 15:47

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 15:55

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());

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

glop glop
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 16:33

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] !!!!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2005, 16:35

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 2144 Messages

17 nov. 2005, 18:37

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.