Version complète: sur le forum Webmaster Hub : Requête PHP qui ne fonctionne pas
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Wolf18
Bonjour à tous !

Voila je viens vous demander un peu d'aide aprés de nombreux essaies de débugage de ma requête PHP... Je passe une info par l'URL en $_GET donc, et exécute toute une requête si le $_GET = machin chose.

Je vous mets le code
CODE
if (@$_GET['mod'] == "etpro")
                    { // connexion
                      *****
                      // cherchons s'il y a un résultat
                      $nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs WHERE mod='ETpro' AND ok='oui'"));
                      if ($nombre_resultat == 0)
                      { echo "<br><br><b><font color=#cc0000>Aucun résultat ne correspond aux critères de votre recherche.</font></b><br><br>";
                      }
                      // recherche dans la bdd
                      $reponse = mysql_query("SELECT * FROM $table_serveurs WHERE mod='ETpro' AND ok='oui' ORDER BY nom ASC");
                      // boucle
                      while ($donnees = mysql_fetch_array($reponse))
                        {
                        echo "<div id=titrepage><div class=titrepage>".$donnees['nom']."&nbsp;&nbsp;&nbsp;IP : ".$donnees['ip']."</div></div><div class=contenu>";
                        echo "Mod : ".$donnees['mod']."<br>";
                        echo "Style : ".$donnees['style']."<br>";
                        echo "Slots Publics : ".$donnees['slots']."<br>";
                        echo "Version : ".$donnees['version']."<br></div>";
                        }
                      // déconnexion
                      mysql_close();
                    }


La variable $table_serveurs est dans un fichier que j'ai préalablement inclus dans la page grâce à la fonction du même nom. (J'ai vérifié au moins 50 fois que l'erreur ne provenait pas du nom de la table sad.gif )
Ce que je n'arrive pas à comprendre, et d'un où se cache l'erreur, de deux comment ca se fait qu'il ne marche pas étant donné que j'ai utilisé éxactement la même chose sur une autre page ! (presque).

Merci par avance, et s'il vous faut plus de détails pour eclaircir tout cela je vous les donnerais volontier.

Cordialement. wacko.gif
astrofiles
Bonjour,

Tu détailles bien ton problème mais il manque l'essentiel smile.gif , le message d'erreur et la ligne à laquelle cette erreur se produit .
Ce sera plus facile de t'aider avec wink.gif

il plante sur
CODE
$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs

?
Wolf18
Oups je suis vraiment désolé d'avoir oublié tongue.gif

En fait ce sont les deux requêtes qui plantes, donc aux lignes :
CODE
$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs

CODE
while ($donnees = mysql_fetch_array($reponse))
Kent
Et le message d'erreur obtenu s'il te plait ?

CITATION
$reponse = mysql_query("SELECT * FROM $table_serveurs WHERE mod='ETpro' AND ok='oui' ORDER BY nom ASC");


il me semble que mysql_query execute une instruction sql , cette fonction n'est donc pas capable de comprendre $table_serveurs à moins de concatener.

(oublie la portion ci-dessus smile.gif )

essaye plutôt :

CODE
$req = "SELECT * FROM ".$table_serveurs." WHERE mod='ETpro' AND ok='oui' ORDER BY nom ASC";

$reponse = mysql_query($req);
sarc
Kent, les variables dans les guillemets sont bien remplacées par leurs valeurs avant d'effectuer la fonction qui est appelée. Il aurait du concatener avec des apostrophes, mais avec les guillemets aucun souci.

De toute façon pour résoudre ce genre de problèmes, la solution est TOUJOURS la même :

1. Séparer la construction de la requète et son exécution.
CODE
$rq = "SELECT FROM WHERE";
$res = mysql_query($rq);


2. Si ça ne marche pas, afficher la requète à l'écran
CODE
$rq = "SELECT FROM WHERE";
echo $rq;
$res = mysql_query($rq);

Deux solutions :
  • Elle n'est pas conforme à ce qu'on attendait. Si par exemple la variable est mal passée, chercher dans le programme pourquoi la
    valeur de la variable ne passe pas...
  • Soit elle est conforme à ce qu'on attendait, alors allumer MyAdmin et tester la requète directement dans l'onglet SQL de MyAdmin.
3.
  • Si dans MyAdmin la requète passe bien, alors c'est un problème de connexion à la base dans le programme
  • Si elle ne passe pas bien, c'est la structure de la requète qui est en cause
Voilà avec ça, t'es sûr de trouver. wink.gif


EDIT : héhé Anonymus désolé je t'ai grillé ta réponse tongue.gif
Anonymus
Bonjour,

Quand un programme plante 'au niveau des requètes sql', le plus simple pour commencer est de les afficher.
Au lieu de :
CODE
$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs WHERE mod='ETpro' AND ok='oui'"));

tu fais :
CODE
$q = "SELECT id FROM $table_serveurs WHERE mod='ETpro' AND ok='oui'";
$r= mysql_query($q);
echo "<br>".$q;

echo "<br>".$r;

$nombre_resultat = mysql_num_rows($r);

Avec ca, tu prends la requète générée, et tu essaie dans phpmyadmin.
Si ca ne marche pas, alors essaie de voir dans phpmyadmin directement pourquoi, sinon, c'est que le problème est autre. (mais en général, ca vient de là wink.gif
Wolf18
Tout d'abord merci pour vos réponses, mais ca coince toujours et je ne sais comment arranger cela blush.gif

Voici la requête que m'affiche ma page :
CODE
SELECT id FROM serveurs WHERE mod='ETpro' AND ok='oui'


Et voila la réponse que me renvoie PhpMyAdmin :
CITATION
Erreur
requête SQL: Documentation

SELECT id
FROM serveurs
WHERE mod = 'ETpro'
AND ok = 'oui'
LIMIT 0 , 30

MySQL a répondu:Documentation
#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 '= 'ETpro' AND ok = 'oui'
LIMIT 0, 30' at line 1
sarc
Ahah pour une fois c'est plus subtil que les simples erreurs...

"mod" est un mot réservé en SQL, tu ne peux pas utiliser ce mot pour désigner une de tes colonnes... Tu dois donc changer la structure de ta BDD et choisir un nom de colonne "non réservé"...
Kent
Le nom de la table est correcte ? tu utilise bien les bons apostrophe (touche 4) ? les noms des champs sont correct ??

C'est une erreur de syntaxe mais je vois vraiment pas le soucis une requête similaire dans mon phpMyadmin fonctionne parfaitement.

Edit : ah ben bien joué sarc...
Wolf18
Ah d'accord ! Un grand grand merci à vous tous, je n'ai pas encore essayé mais je suppose que l'erreur provient donc bien de là. smartass.gif

Sans vous j'aurais cherché encore un bon moment encore smile.gif

EDIT : Effectivement, tout marche à merveille, encore merci happy.gif
Portekoi
Sinon, tu peux encadrer mod par des ` : `mod` smile.gif
Wolf18
J'ai fais simple pour pas trop me prendre la tête aprés ces recherches intenses, j'ai juste ajouté un 'e' tongue.gif

Heureusement que la table en question était utilisée pour une seule page sinon je n'ose pas imaginer le temps que j'aurais passé à tout corriger... Je ferais très attention à l'avenir aux noms de mes tables et champs. shutup.gif
sarc
Tu as une liste des mots réservés si tu veux... Elle te permettra de vérifier avant de créer une nouvelle colonne.

Je viens de me rendre compte que j'en utilisais aussi... M'enfin, tant que ça marche tongue.gif
Attention notamment à "date", "desc", "text"... Le mieux, c'est de privilégier les mots français tongue.gif
Wolf18
Merci beaucoup pour la liste, je la place des mes marques-pages ! Je pensais vraiment pas qu'il y en avait autant et puis en fait on y pense pas assez (je parle pour moi en fait) quand on construit nos tables... smartass.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.