Variable php dans requête sql

Résolu/Fermé
clastype Messages postés 330 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 26 mai 2017 - 27 sept. 2014 à 19:14
clastype Messages postés 330 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 26 mai 2017 - 1 oct. 2014 à 03:09
Bonjour,

voila j'ai récupérer un script php de pagination pour mon site web. Il fonctionne correctement mais j'aimerai ajouter une variable pour ne prendre qu'une certaine partie dans ma BDD. Je m'explique, voici le code :



$var = $_GET['categorie'];

<?php
                        }

}
else
{
$messagesParPage=5; //Nous allons afficher 5 messages par page.
 
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query("SELECT COUNT(*) AS total FROM images where categorie IN (Select categorie from images where categorie='$var')"); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.


echo $total;
 
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
 
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
 
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else // Sinon
{
     $pageActuelle=1; // La page actuelle est la n°1    
}
 
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

echo $premiereEntree;
echo $messagesParPage;
 
// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query("SELECT * FROM images where categorie='$var' ORDER BY id DESC LIMIT '$premiereEntree', '$messagesParPage'");
 
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
     //Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
     //De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
?><table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
                <tr>
                     <td><strong><center><?php echo stripslashes($donnees_messages['nom']); ?></center></strong></td>
                </tr>
                <tr>
                     <td><center><img src="data/images/<?php echo $donnees_messages['lien']; ?>" width="160px" height="160px" /></center></td>
                </tr>
            </table>


Dans les requêtes $retour_messages et retour total, j'ai ajouté la variable "$var" qui insère un paramètre récupéré dans l'adresse de la page par $var = $_GET['categorie'];

Et c'est la que les problèmes arrivent, j'ai cette erreur :

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource


Je pense que le problème se situe au niveau de :

$retour_messages=mysql_query("SELECT * FROM images where categorie='$var' ORDER BY id DESC LIMIT '$premiereEntree', '$messagesParPage'");


Mais je ne suis sûr de rien.

Merci d'avance de votre aide.
A voir également:

3 réponses

Bonsoir

... LIMIT '$premiereEntree', '$messagesParPage'

Les paramètres de LIMIT doivent obligatoirement être numériques et ne doivent donc pas être être encadrés d'apostrophes.
Dans la plupart des cas, sql traduit les chaînes (entre apostrophes) en nombres automatiquement, mais justement PAS dans le cas de LIMIT.
Tu devrais donc écrire :
... LIMIT $premiereEntree, $messagesParPage


Et Zep3k!GnO a raison en ce qui concerne l'utilisation de mysql.
1
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
29 sept. 2014 à 17:16
Facile, pour voir le message fais appel à mysql_error() https://www.php.net/manual/fr/function.mysql-error.php :
$retour_messages=mysql_query("SELECT * FROM images where categorie='$var' ORDER BY id DESC LIMIT '$premiereEntree', '$messagesParPage'") or die('Error while querying : '.mysql_error());

Attention, tu notera que tu utilises "mysql_*" qui est obsolète, il est conseillé de passer par "mysqli_*".
0
clastype Messages postés 330 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 26 mai 2017 195
1 oct. 2014 à 03:09
Merci à tous les deux.

En effet mon erreur venait de la valeur numérique. C'est maintenant résolu.

Encore merci
0