Page 1 sur 1
Erreur requete SQL
Posté : 31 janv. 2010, 01:06
par Zoom2mlk
Bonjour a tous

,
J'ai un probleme avec mon script de commentaire, dans la partie qui affiche les commentaire, la voici :
$reponse = mysql_query("SELECT * FROM commentaires WHERE id_page="' . $_GET['id_page'] . '" ORDER BY ID DESC LIMIT 0,10");
A l'affichage de ma page, on me dit qu'il y a une erreur dans cette ligne, mais quel est cet erreur ? Aidez moi svp

!
A noter qu'avant je n'utilisais pas le $_GET['id_page'], j'ecrivais l'id_page manuellement et ca marchait tres bien !
Re: Erreur requete SQL
Posté : 31 janv. 2010, 01:21
par Ryle
Et quel est ce message d'erreur ? (on a encore rien trouvé de mieux pour identifier l'origine d'un problème

)
As-tu vérifié ce que contenait ta variable $_GET['id_page'] ? (vu qu'avec une valeur saisie manuellement ça marchait, y a de grande chance que le problème vienne de là

)
Re: Erreur requete SQL
Posté : 31 janv. 2010, 01:26
par Zoom2mlk
Tout d'abord merci de repondre =), voici le message d'erreur :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /homepages/8/d314637936/htdocs/includes/commentairesv2.php on line 36
Et pour la variable $id_page, je suis sur de ce qu'elle contient car je l'utilise egalement pour enregistrer le commentaire dans la BDD.
Re: Erreur requete SQL
Posté : 31 janv. 2010, 03:09
par stealth35
simple erreur de syntax
$reponse = mysql_query("SELECT * FROM commentaires WHERE id_page='" . $_GET['id_page'] . "' ORDER BY ID DESC LIMIT 0,10");
Re: Erreur requete SQL
Posté : 31 janv. 2010, 04:59
par Patriboom
Simple erreur de syntaxe: vérifie tes guillemets ( ") et apostrophes ( ' ), rectifie leurs positions et ça devrait fonctionner
Re: Erreur requete SQL
Posté : 31 janv. 2010, 13:19
par Aureusms
Petit conseil : protège ton $_GET['id_page'] sinon attention aux injections sql...
Re: Erreur requete SQL
Posté : 31 janv. 2010, 13:25
par Aureusms
Moi ce que je fais souvent c'est de tester la valeur avant :
<?php
$requete = "SELECT id_page FROM commentaires";
$resultat_sql = mysql_query ($requete);
$tab_id_page = array();
while ($resultat = mysql_fecth_row($resultat_sql))
{
array_push($tab_id_page,$resultat[0]);
}
if (in_array($_GET['id_page'],$tab_id_page))
{
//ok suite du script
}
else
{
// pas Ok (essai de piratage ou erreur de l'utilisateur) : message d'erreur ou script par défaut
}
?>
Re: Erreur requete SQL
Posté : 31 janv. 2010, 13:49
par Ryle
Moi ce que je fais souvent c'est de tester la valeur avant
Personnellement, je ne suis pas convaincu de l'intérêt de ce test... en effet, plus le nombre d'enregistrements de la table va être important, plus ce test va être lourd et long (bon ok, ça se compte en milisecondes

), alors que protéger ta variable se fait simplement et si l'info n'existe pas, tu le sais très rapidement :
<?php
if (isSet($_GET['id_page'])) {
// traitement pour protéger la variable avec real_escape, htmlentities et tout ce dont vous avez besoin
$idPage = protegeMaVariable($_GET['id_page']);
// Nota : si le champ id_page est numérique, il ne faut pas d'apostrophes pour délimiter la valeur
// mysql les tolèrera, mais pas les autres base de données. C'est donc une bonne habitude à prendre
$requete = "SELECT ... FROM commentaires WHERE id_page=" . $idPage . " ORDER BY ID DESC LIMIT 0,10";
$resultat_sql = mysql_query ($requete);
while ($resultat = mysql_fecth_assoc($resultat_sql)) { // on peut aisément tester s'il y a un résultat
//ok suite du script
}
else {
// pas Ok (essai de piratage ou erreur de l'utilisateur) : message d'erreur ou script par défaut
}
}
?>
Ca ne reste qu'un avis personnel

Re: Erreur requete SQL
Posté : 31 janv. 2010, 14:52
par Superpilou
La ta variable d'après le nom est un entier, donc on peut utiliser is_int() qui vérifiera si la valeur saisit est un entier.
<?php
if(is_int($val))
{
//il se passe ca
}
else
{
//il se passe ca
}
?>
Ainsi on éviter les injections.
Re: Erreur requete SQL
Posté : 31 janv. 2010, 18:33
par Aureusms
Moi ce que je fais souvent c'est de tester la valeur avant
Personnellement, je ne suis pas convaincu de l'intérêt de ce test... en effet, plus le nombre d'enregistrements de la table va être important, plus ce test va être lourd et long (bon ok, ça se compte en milisecondes

), alors que protéger ta variable se fait simplement et si l'info n'existe pas, tu le sais très rapidement :
D'abord tu fais que toujours m'embetter

Re: Erreur requete SQL
Posté : 31 janv. 2010, 18:39
par stealth35
et puis array_push c'est pas bien de l'utilisé pour une seule valeur, c'est plus otimisé d'utilisé $array[]
sinon pour la valeur, un coup de sprintf (avec %d) est c'est reglé pas besion de faire de fonction, sauf si on veux un message spécial