Aller au contenu

Requête PHP qui ne fonctionne pas


Sujets conseillés

Posté (modifié)

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

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']."   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 :( )

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:

Modifié par Wolf18
Posté (modifié)

Bonjour,

Tu détailles bien ton problème mais il manque l'essentiel :) , le message d'erreur et la ligne à laquelle cette erreur se produit .

Ce sera plus facile de t'aider avec ;)

il plante sur

$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs

?

Modifié par astrofiles
Posté

Oups je suis vraiment désolé d'avoir oublié :P

En fait ce sont les deux requêtes qui plantes, donc aux lignes :

$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs

while ($donnees = mysql_fetch_array($reponse))

Posté (modifié)

Et le message d'erreur obtenu s'il te plait ?

$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 :) )

essaye plutôt :

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

$reponse = mysql_query($req);

Modifié par Kent
Posté

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.

$rq = "SELECT FROM WHERE";
$res = mysql_query($rq);

2. Si ça ne marche pas, afficher la requète à l'écran

$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. ;)

EDIT : héhé Anonymus désolé je t'ai grillé ta réponse :P

Posté

Bonjour,

Quand un programme plante 'au niveau des requètes sql', le plus simple pour commencer est de les afficher.

Au lieu de :

$nombre_resultat = mysql_num_rows(mysql_query("SELECT id FROM $table_serveurs WHERE mod='ETpro' AND ok='oui'"));

tu fais :

$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à ;)

Posté

Tout d'abord merci pour vos réponses, mais ca coince toujours et je ne sais comment arranger cela :blush:

Voici la requête que m'affiche ma page :

SELECT id FROM serveurs WHERE mod='ETpro' AND ok='oui'

Et voila la réponse que me renvoie PhpMyAdmin :

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

Posté

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é"...

Posté (modifié)

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...

Modifié par Kent
Posté (modifié)

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:

Sans vous j'aurais cherché encore un bon moment encore :)

EDIT : Effectivement, tout marche à merveille, encore merci ^^

Modifié par Wolf18
Posté

J'ai fais simple pour pas trop me prendre la tête aprés ces recherches intenses, j'ai juste ajouté un 'e' :P

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:

Posté

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 :P

Attention notamment à "date", "desc", "text"... Le mieux, c'est de privilégier les mots français :P

Posté

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:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...