IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur de syntaxe LIMIT [PHP 5.1]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Par défaut Erreur de syntaxe LIMIT
    Bonsoir,

    pour mon système de pagination, j'exécute la requête SQL suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_select = "SELECT author, date, news_text FROM news ORDER BY date DESC LIMIT $first_input, $messages_per_page;
    Les variables sont:
    $first_input = $current_page - 1) * $messages_per_page;
    $messages_per_page = 5;

    Ceci fonctionne mais lorsque je voulais tester la sécurité, celle-ci s'est avérée compromettante.
    En effet, mon système est fait à l'aide d'un $_GET['page'] donc il y a cette url:
    http://www.monsite.com/news.php?page=2
    Lorsque je fais ceci: http://www.monsite.com/news.php?page='2
    J'ai cette erreur de syntaxe:

    Erreur SQL : 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 '-5, 5' at line 1

    Faut-il ajouter un backslash quelque part, une quote ?

    Au plaisir de vous lire,
    amicalement.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Dans ton exemple tu utilises $messages_per_page et ensuite tu le défini... faudrait faire l'inverse.

    Ensuite rien ne t'empêche de contrôler tes variables avant de les utiliser et de définir une valeur par défaut qui ne fera pas bugguer ta requête par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $first_input = ($current_page - 1) * $messages_per_page;
     
    $first_input = is_numeric($first_input) && $first_input >= 0 ? $first_input : 0;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Par défaut
    Et bien merci beaucoup !

    Je ne suis pas sûr d'avoir bien compris t'as deuxième ligne. Pourrais-tu me l'expliquer s'il te plaît ?

    En attendant, ton fonctionne.
    Donc si quelqu'un a un petit soucis vis à vis de ça, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Calculer la première entrée à lire. */
    	 $first_input = ($current_page - 1) * $messages_per_page;
    	 $first_input = is_numeric($first_input) && $first_input >= 0 ? $first_input : 0;
     
    	 /* Récupérer les informations des news et limiter la reqûete par le nombre de messages et de page. */
    	 $sql_select = "SELECT author, date, news_text FROM news ORDER BY date DESC LIMIT $first_input, $messages_per_page";
    	 $result_select = mysql_query($sql_select) or die("Erreur SQL :  " . mysql_error());
    Sachant que $current_page est égale à $_GET['page'] et au nombre de pages si $current_page est plus grand que le nombre de pages.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $first_input = is_numeric($first_input) && $first_input >= 0 ? $first_input : 0;
    c'est la syntaxe avec les opérateurs ternaires. Cela correspond à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(is_numeric($first_input) && $first_input >= 0)
    {
    $first_input = $first_input;
    }
    else
    {
    $first_input = 0;
    }
    Les opérateurs ternaires sont pratiques pour ce genre de vérification car tu peux tout faire tenir sur une même ligne. Plus d'info en tapant 'opérateurs ternaire php' dans google.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] erreur de syntaxe requête préparé et condition LIMIT
    Par le nOoB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2012, 08h50
  2. [Directives] Page blanche quand erreur de syntaxe
    Par syl2095 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/02/2006, 15h15
  3. erreur de syntaxe en C++
    Par sergepmessa dans le forum C++
    Réponses: 6
    Dernier message: 11/03/2005, 18h15
  4. PHP SQL =>erreur de syntaxe (operateur absent)
    Par snipes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 14h09
  5. erreur de syntaxe javascript dans ma page
    Par Oluha dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo