Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Erreur affichage page par page...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur affichage page par page...

n°1632121
sclormu
Posté le 27-10-2007 à 13:38:14  profilanswer
 

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);
 
}
}
?>

mood
Publicité
Posté le 27-10-2007 à 13:38:14  profilanswer
 

n°1632157
flo850
moi je
Posté le 27-10-2007 à 17:23:49  profilanswer
 

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

n°1632160
olivthill
Posté le 27-10-2007 à 18:05:29  profilanswer
 

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);
}


n°1632423
sclormu
Posté le 28-10-2007 à 18:59:08  profilanswer
 

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...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Erreur affichage page par page...

 

Sujets relatifs
erreur langage SQLAffichage lors du passage de la souri
Erreur php.ini et HTTP 500[SQL,ORACLE]Message d'erreur mutating, trigger....(RESOLU)
erreur : Only variables can be passed by referencema première page sur deamweaver : problème
pas de valeur erreur avec vlookup[QST]Page Rank
[resolu]Affichier resultat de ma requete dans un cadre de ma page PHPErreur d'affichage du <div> d'une page dans le <div> d'une autre page
Plus de sujets relatifs à : Erreur affichage page par page...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR