Wolf18 Posté 12 Avril 2007 Posté 12 Avril 2007 (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. Modifié 12 Avril 2007 par Wolf18
astrofiles Posté 12 Avril 2007 Posté 12 Avril 2007 (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é 12 Avril 2007 par astrofiles
Wolf18 Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Oups je suis vraiment désolé d'avoir oublié 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))
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 (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é 12 Avril 2007 par Kent
Sarc Posté 12 Avril 2007 Posté 12 Avril 2007 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
Anonymus Posté 12 Avril 2007 Posté 12 Avril 2007 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à
Wolf18 Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Tout d'abord merci pour vos réponses, mais ca coince toujours et je ne sais comment arranger cela 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 : Erreurrequê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 Posté 12 Avril 2007 Posté 12 Avril 2007 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 Posté 12 Avril 2007 Posté 12 Avril 2007 (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é 12 Avril 2007 par Kent
Wolf18 Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 (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à. Sans vous j'aurais cherché encore un bon moment encore EDIT : Effectivement, tout marche à merveille, encore merci Modifié 12 Avril 2007 par Wolf18
Wolf18 Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 J'ai fais simple pour pas trop me prendre la tête aprés ces recherches intenses, j'ai juste ajouté un 'e' 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.
Sarc Posté 12 Avril 2007 Posté 12 Avril 2007 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 Attention notamment à "date", "desc", "text"... Le mieux, c'est de privilégier les mots français
Wolf18 Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 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...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant