Erreur affichage page par page...

Erreur affichage page par page... - SQL/NoSQL - Programmation

Marsh Posté le 27-10-2007 à 13:38:14    

Bonjour,
 
j'ai integrer un affichage page par page dans mon moteur de recherche pour éviter un trop grand nombre de résultat sur la même page, je me suis servi  du tuto de phpdebutant: http://www.phpdebutant.org/article84.php.
Lorsque je veux afficher les résultats suivant il y a cette erreur qui s'affiche:
 
Erreur : 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 'LIMIT 3,3' at line 1
 
d'où peut provenir l'erreur... merci de votre aide...
 
<?php
 
//Liste des conditions de la requete
$whereReq = 'WHERE ';
 
//Variable indiquant si on est sur la première clause du WHERE
$fLig = 1;
 
//Si le nom est renseigné, on l'ajoute à la recherche
if(!empty($_POST['nom']))
{
    $tabNoms = explode(",", $_POST['nom']);        //Dans l'exemple suivant, on considère que les noms sont séparés par une virgule
    $listNoms = "";        //Liste des noms
    $fNom = 1;        //Variable indiquant si on est sur le premier nom
 
    //Pour chaque nom
    foreach($tabNoms as $nom)
    {
        //Si c'est le premier nom, on ne met pas de virgule, et on indique qu'on a passé le premier nom...
        if($fNom){$listNoms .= "'".trim($nom)."'"; $fNom = 0;}
        //Sinon on met une virgule
        else{$listNoms .= ",'".trim($nom)."'";}
    }
 
    //On fait un IN qu'on rajoute aux conditions
    $whereReq .= "`nom` IN(".$listNoms." ) ";
    $fLig = 0;
}
 
//Si le prénom est renseigné, on l'ajoute à la requete
if(!empty($_POST['prenom']))
{
    //Si le prénom est le première condition (cas ou aucun nom n'est renseigné), on indique qu'on a passé la première condition...
    if($fLig != 0)
    {$fLig = 0;}
    //Sinon, on rajoute un AND
    else{$whereReq .= "AND ";}
 
    $whereReq .= "`prenom` = '".trim($_POST['prenom'])."' ";
}
 
if(!empty($_POST['age']))
{
    //Si l'age  est le première condition (cas ou aucun nom ni aucun prénom n'est renseigné), on indique qu'on a passé la première condition...
    if($fLig != 0)
    {$fLig = 0;}
    //Sinon, on rajoute un AND
    else{$whereReq .= "AND ";}
 
    $whereReq .= "`age` = '".trim($_POST['age'])."'";
}
 
//Si on en est toujours à la première ligne, cela signifie qu'aucun critère n'a été entré => Message d'erreur
if($fLig == 1)
{echo 'Vous devez preciser en moins un critére de recherche !!';}
else
{  
 
//=========================================
 
// includes du fichier fonctions
 
//=========================================
 
require 'fonctions.php';
 
    //Informations de connexion au serveur
    $host = '*****';    //Serveur
    $user = '*****';    //Nom d'utilisateur
    $pass = '****';    //Mot de passe utilisateur
    $db = '*****';        //Nom de la base
    $tables = 'personne';    //Liste des tables à parcourir
   
//=========================================
 
// initialisation des variables
 
//=========================================
 
// on va afficher 5 résultats par page.
 
$nombre = 5;
 
// si limite n'existe pas on l'initialise à zéro
 
if (!$limite) $limite = 0;
 
// on cherche le nom de la page.  
 
$path_parts = pathinfo($_SERVER['PHP_SELF']);
 
$page = $path_parts["basename"];
 
    //Connexion à la BDD
    mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());
   
//=========================================  
 
// requête SQL qui compte le nombre total
 
// d'enregistrements dans la table.
 
//=========================================
 
$sel = 'SELECT count(id) FROM personne';
   
$res = mysql_query($sel)  or die ('Erreur : '.mysql_error() );
 
$row = mysql_fetch_row($res);
 
$total = $row[0];
 
//=========================================
 
// vérifier la validité de notre variable
 
// $limite;
 
//=========================================
 
$verifLimite= verifLimite($limite,$total,$nombre);
 
// si la limite passée n'est pas valide on la remet à zéro
 
if(!$verifLimite)  {
 
    $limite = 0;
 
}
 
    $sel = "SELECT * FROM $tables $whereReq ORDER BY nom ASC LIMIT ".$limite.",".$nombre;
 
    $res = mysql_query($sel) or die ('Erreur : '.mysql_error());
 
    if($total)
    {
        echo '<table border="0" cellpadding="0" cellspacing="0">';
                     
        while($row = mysql_fetch_array($res))
        {
            echo '
            <tr>
                <td>
                    <div class="b13">
                        <table>
                            <h2>'.$row['prenom'].'</h2>
                            <tr>
                                <td>'.$row['age'].'</td>
                                <td>'.$row['img'].'</td>
                            </tr>
                        </table>
                    </div>
                </td>
            </tr>';
        }
        echo '</table>';
    }
    else {echo '<div align="center">Aucun résulat ne correspond à votre
recherche !!</div>';}
 
    mysql_free_result($res);
    mysql_close();
   
    if($total > $nombre) {
 
    // affichage des liens vers les pages
 
    affichePages($nombre,$page,$total);
 
    // affichage des boutons
 
    displayNextPreviousButtons($limite,$total,$nombre,$page);
 
}
}
?>

Reply

Marsh Posté le 27-10-2007 à 13:38:14   

Reply

Marsh Posté le 27-10-2007 à 17:23:49    

tu voudrai pas faire un echo $sel avant ta requet , histoire de voir ce que ca contient

Reply

Marsh Posté le 27-10-2007 à 18:05:29    

Si le nom contient une apostrophe, il y aura une erreur.  
Mais l'erreur détectée en est peut-être une autre.
 
Cependant, il faudrait sans doute doubler les apostrophes contenues dans les variables.
Au lieu de

trim($nom)

on pourait avoir

trim_apo($nom)
..
function trim_apo($s1)
{
  $s1 = trim($s1); // enleve les espaces autour
  $s1 = trim($s1, "\xA0" ); // enleve les nbsp
  $s1 = stripslashes($s1); // enleve les slashs avant les apostrophes, etc.
  $s1 = str_replace("'", "''", $s1); // remplace les guillemets
 
  // supprime les caractères non imprimables (null, tab, backspace, ...)
  $s2 = "";
  for ($i = 0; $i < strlen($s1); $i++) {
     $c = substr($s1, $i, 1);
     if (ord($c) >= 32)
        $s2 .= $c;
  }
  return($s2);
}


Reply

Marsh Posté le 28-10-2007 à 18:59:08    

Merci pour vos réponses mais mes compétences sont très limité, j'ai un peu de mal à suivre vos conseilles (le boulet que j'suis...). Avez vous des exemples qui me permettrai de mieux comprendre vos conseilles...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed