begin process at 2012 05 31 01:31:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

Débutants

 > 

Problème avec pagination php de résultats de requete sql


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec pagination php de résultats de requete sql

mercredi 2 novembre 2005 à 00:25:01 | Problème avec pagination php de résultats de requete sql

dieusurterre

J'ai tenté d'appliquer le code donné dans le tuto sur la pagination... mais j'ai une erreur qui me revient concernant la ligne en rouge [$nb_enreg = mysql_num_rows($res);]

celle-ci définit la variable $nb_enreg et donc le calcul du nb_pg_rounded ne se fait... conséquence le lien vers la page suivante est toujours présent même lorsqu'il n'y a plus de page suivante à afficher (s'affiche alors l'erreur:
 if(mysql_num_rows($query) == 0)
  {
echo '<img src="images/error.gif">';
echo '<br>';
echo '<div style="padding-top:20px;padding-left:25px">Aucun résultat ne correspond aux termes de votre recherche.</div>';
echo '<div style="padding-top:100px;padding-left:5px"><a href="http://www.manucure.be/fr/frame2/search.htm" class="linkgreen"><< Retour au formulaire</a></div>';
    }


de plus, la seconde page affichée contient les résultats dont ID > 7, 7 étant le nbre maximal de résultats à afficher par page.

if(!isset($_GET['pg'])){
    $pg = 1;
    }
    else
    {
    $pg = $_GET['pg'];
    }
   
 if(!is_numeric($pg))
     {
    $pg = 1;
    }

 $enreg_par_pg = 7;
 
 function pgs($enreg_par_pg, $pg, $link)
     {
         $res = mysql_query (
            "    SELECT Nom_Prenom, ID, Societe
                FROM $table
                WHERE
                Nom_Prenom LIKE '%$Nom_Prenom%'
                AND Adresse LIKE '%$Adresse%'
                AND CP LIKE '%$CP%'
                AND Commune LIKE '%$Commune%'
                AND Province LIKE '%$Province%'
                AND Pays LIKE '%$Pays%'
                ". $FR_query ."
                ". $EN_query ."
                " , $link);

       
         
         $nb_enreg = mysql_num_rows($res);
         $nb_pg_rounded = ceil( $nb_enreg / $enreg_par_pg );
         $pp = $pg - 1;
         $ps = $pg + 1;
         
         if($pg != 1)
            {
            echo "<a href='?pg=$pp'>&lt;&lt;page pr&eacute;c&eacute;dente</a>";
            }
           
         $i=1;
         
         do{
            if($i != $pg)
                {
                echo "&nbsp;<a href='?pg=$i'>$i</a>\n";
                }
                else
                {
                echo "&nbsp;$i&nbsp;";
                }
       
         $i++;
         }while($i <= $nb_pg_rounded);
         if($pg != $nb_pg_rounded){
         echo "&nbsp;<a href='?pg=$ps'>page suivante&gt;&gt;</a>";
         }
     }
   
 $limit = $enreg_par_pg*$pg-$enreg_par_pg;

 $query = mysql_query (
     "    SELECT Nom_Prenom, ID, Societe
         FROM $table
        WHERE
        Nom_Prenom LIKE '%$Nom_Prenom%'
        AND Adresse LIKE '%$Adresse%'
        AND CP LIKE '%$CP%'
        AND Commune LIKE '%$Commune%'
        AND Province LIKE '%$Province%'
        AND Pays LIKE '%$Pays%'
        ". $FR_query ."
        ". $EN_query ."
        LIMIT $limit, $enreg_par_pg
        "
);
     
?>
mercredi 2 novembre 2005 à 00:33:11 | Re : Problème avec pagination php de résultats de requete sql

FhX

"LIKE '%$Nom_Prenom%'
                AND Adresse LIKE '%$Adresse%'
                AND CP LIKE '%$CP%'
                AND Commune LIKE '%$Commune%'
                AND Province LIKE '%$Province%'
                AND Pays LIKE '%$Pays%'
                ". $FR_query ."
                ". $EN_query .""

Variable non déclaré dans ta fonction !
Attention, les variables hors fonction ne se transmette que si on les appèles via :
global $var;

Sinon, tes variables ne valent rien du tout !
mercredi 2 novembre 2005 à 00:39:03 | Re : Problème avec pagination php de résultats de requete sql

dieusurterre

euh je comprends pas trop ce que tu veux m'expliquer... les variables dans la requetes sont définies plus haut dans ma page
exemple:
//load des valeurs postée par le formulaire
if(isset($_POST['FR']))
                            {
                            $FR=$_POST['FR'];
                            }
                            else
                            {
                            $FR='';
                            }

//variables pour la requete
 if($FR=='on')
      {
    $FR_query='AND FR = 1';
    }
    else
    {
    $FR_query=' ';
    }

Mais je devrais faire quoi pour ma ligne qui foire?

         $nb_enreg = mysql_num_rows($res);

pcq dans le tuto, il y a rien de plus pour la faire fonctionner....

mercredi 2 novembre 2005 à 00:40:17 | Re : Problème avec pagination php de résultats de requete sql

dieusurterre

j'ai trouvé mon code pour la pagination ici
mercredi 2 novembre 2005 à 00:44:06 | Re : Problème avec pagination php de résultats de requete sql

FhX

Attention, les variables hors fonction ne se transmette que si on les appèles via :
global $var;

$var = 1;
function yes() {
  echo $var; // Erreur, ca n'affichera rien ! (si une erreur)
}

Ta requète c'est pareil, ==> $province ? $cp ? Ca sort d'ou ca ?
Je t'invite à faire :

$query = mysql_query (
     "    SELECT Nom_Prenom, ID, Societe
         FROM $table
        WHERE
        Nom_Prenom LIKE '%$Nom_Prenom%'
        AND Adresse LIKE '%$Adresse%'
        AND CP LIKE '%$CP%'
        AND Commune LIKE '%$Commune%'
        AND Province LIKE '%$Province%'
        AND Pays LIKE '%$Pays%'
        ". $FR_query ."
        ". $EN_query ."
        LIMIT $limit, $enreg_par_pg
        "
) OR DIE ( mysql_error() );

Et tu va vite comprendre :)
mercredi 2 novembre 2005 à 00:49:16 | Re : Problème avec pagination php de résultats de requete sql

dieusurterre

You have an error in your SQL syntax near 'WHERE Nom_Prenom LIKE '%%' AND Adresse LIKE '%%' AND CP LIKE '%%' ' at line 3


comment je répare ça?
mercredi 2 novembre 2005 à 00:51:41 | Re : Problème avec pagination php de résultats de requete sql

dieusurterre

mes variables sortent de là... elles me viennent d'un formulaire, il faut donc les récupérer sur cette page

//Load des données du formulaire
   
                        if(isset($_POST['Nom_Prenom']))
                            {   
                            $Nom_Prenom=$_POST['Nom_Prenom'];
                            }
                            else
                            {
                            $Nom_Prenom='';
                            }
                               
                        if(isset($_POST['Adresse']))
                            {
                            $Adresse=$_POST['Adresse'];
                            }
                            else
                            {
                            $Adresse='';
                            }
                           
                        if(isset($_POST['CP']))
                            {
                            $CP=$_POST['CP'];
                            }
                            else
                            {
                            $CP='';
                            }
                           
                        if(isset($_POST['Commune']))
                            {   
                            $Commune=$_POST['Commune'];
                            }
                            else
                            {
                            $Commune='';
                            }
                       
                        if(isset($_POST['Province']))
                            {
                            $Province=$_POST['Province'];
                            }
                            else
                            {
                            $Province='';
                            }
                       
                        if(isset($_POST['Pays']))
                            {
                            $Pays=$_POST['Pays'];
                            }
                            else
                            {
                            $Pays='';
                            }

mercredi 2 novembre 2005 à 01:37:47 | Re : Problème avec pagination php de résultats de requete sql

monoceros01

$where = '' ;
$where.= ($CP) ? 'CP=\'%'.$CP.'
%\'' : '';
$and = ($where !== '') ? ' AND ' : '';
$where.= ($Pays) ? $and.'Pays=\'
%'.$Pays.'%\''  : '';
$and = ($where !== '') ? ' AND ' : '';

$where.= ($FR) ? $and.'FR=\'1\''  : '';

$and = ($where !== '') ? ' AND ' : '';

$where.= ($EN) ? $and.'EN=\'1\''  : '';



$query = 'SELECT ID,Nom_Prenom,Societe FROM '.$table.' WHERE '.$where ;
mercredi 2 novembre 2005 à 03:42:48 | Re : Problème avec pagination php de résultats de requete sql

dieusurterre

ça ne résoud toujours pas cette erreur...

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

qui renvoit à cette ligne

         $nb_enreg = mysql_num_rows($res);



mercredi 2 novembre 2005 à 05:06:41 | Re : Problème avec pagination php de résultats de requete sql

monoceros01

Ouai t'as des trucs en plus par rapport à ce que j'ai mis, fallait adapter...

<?php


# initialisation de la fonction pgs
# la fonction pgs sert à faire un menu de navigation
# Je l'ai modifié car il était inutile d'y répéter la requête SQL
function pgs($nb_enreg, $enreg_par_pg, $pg)
{
    $nb_pg_rounded = ceil( $nb_enreg / $enreg_par_pg );
    $pp = $pg - 1;
    $ps = $pg + 1;
   
    # Les valeurs des attributs HTML sont obligatoirement contenues dans
    # des doubles quotes ("valeur") et non dans des simples quotes ('valeur')
    if($pg > 1)
    {
        echo '<a href="?pg='.$pp.'">&lt;&lt;page pr&eacute;c&eacute;dente</a>';
    }

    # Une boucle for() est conseillée pour ce genre de boucle car plus claire
    # Mais il est vrai qu'elle est légèrement plus couteuse que le while()
    # Une différence de temps d'execution de 25ms pour 1000 itérations             # (Source). Je pense que là on peut se le permettre.
    for($i=1;$i<=$nb_pg_rounded;$i++)
    {
        if($i != $pg)
        {
            echo '&nbsp;<a href="?pg='.$i.'">'.$i.'</a>';
        }
        else
        {
            echo '&nbsp;'.$i.'&nbsp;';
        }
    }
        
    if($pg < $nb_pg_rounded)
    {
        echo '&nbsp;<a href="?pg='.$ps.'">page suivante&gt;&gt;</a>';
    }
}


# Récupération des variables passées dans l'url (l'opérateur ternaire serait moins long... Mais j'ai eu la flemme de convertir)
if(isset($_POST['Nom_Prenom']))
{
    $Nom_Prenom=$_POST['Nom_Prenom'];
}
else
{
    $Nom_Prenom='';
}

if(isset($_POST['Adresse']))
{
    $Adresse=$_POST['Adresse'];
}
else
{
    $Adresse='';
}

if(isset($_POST['CP']))
{
    $CP=$_POST['CP'];
}
else
{
    $CP='';
}

if(isset($_POST['Commune']))
{   
    $Commune=$_POST['Commune'];
}
else
{
    $Commune='';
}

if(isset($_POST['Province']))
{
    $Province=$_POST['Province'];
}
else
{
    $Province='';
}

if(isset($_POST['Pays']))
{
    $Pays=$_POST['Pays'];
}
else
{
    $Pays='';
}


if(isset($_POST['FR']))
{
    $FR=$_POST['FR'];
}
else
{
    $FR='';
}

if(isset($_POST['EN']))
{
    $EN=$_POST['EN'];
}
else
{
    $EN='';
}
# On vérifie à la fois
# si la variable est envoyée dans l'url donc définie (isset())
# si c'est un nombre entier (is_int())
# si elle n'est pas inférieure à 0 ( <= 0)
# auquel cas on assigne 1 à $pg
if(!isset($_GET['pg']) || !is_int($_GET['pg']) || $_GET['pg'] <= 0)
{
    $pg = 1;
}
else
{
    $pg = $_GET['pg'];
}

# Création des conditions de la clause WHERE
# On concatène la variable $where en fonction des valeurs des variable d'intérêt
# Entre chaque concaténation on vérifie si la chaîne $where est vide ou non pour y rajouter un AND si on concatène une nouvelle condition
$where = '' ;
$where.= ($Nom_Prenom) ? 'Nom_Prenom=\'%'.$Nom_Prenom.'%\'' : '';
$and = ($where !== '') ? ' AND ' : '';
$where.= ($Adresse) ? $and.'Adresse=\'%'.$Adresse.'%\'' : '';
$and = ($where !== '') ? ' AND ' : '';
$where.= ($CP) ? $and.'CP=\'%'.$CP.'%\'' : '';
$and = ($where !== '') ? ' AND ' : '';
$where.= ($Commune) ? $and.'Commune=\'%'.$Commune.'%\'' : '';
$and = ($where !== '') ? ' AND ' : '';
$where.= ($Province) ? $and.'Province=\'%'.$Province.'%\'' : '';
$and = ($where !== '') ? ' AND ' : '';

$where.= ($Pays) ? $and.'Pays=\'
%'.$Pays.'%\''  : '';
$and = ($where !== '') ? ' AND ' : '';

$where.= ($FR) ? $and.'FR=\'1\''  : '';

$and = ($where !== '') ? ' AND ' : '';

$where.= ($EN) ? $and.'EN=\'1\''  : '';

# Paramètrage de la clause LIMIT
$enreg_par_pg = 7;
$limit = $enreg_par_pg*($pg-1);

# Création et envoi de la requête
$query = 'SELECT ID,Nom_Prenom,Societe FROM '.$table.' WHERE '.$where.' LIMIT '.$limit.','.$enreg_par_pg ;
$result = mysql_query($query); 

# Calcul du nombre de résultat retourné
$nb_enreg = mysql_num_rows($result);

# Envoi de la fonction pgs
pgs($nb_enreg,$enreg_par_pg,$pg);

# Exploitation des données renvoyées par la requête
while($datas = mysql_fetch_array($result))
{
    # Là tu affiches tes données en utilisant le tableau associatif $datas
    # retourné par mysql_fetch_array() sous la forme
    # $datas['ID'], $datas['Nom_Prenom'] et $datas['Societe']
    # À chaque passage de la boucle, les données de l'enregistrement suivant
    # sont renvoyés dans $datas
}

?>



Il peut y avoir des erreurs de syntaxe, je ne l'ai pas essayé, mais je t'assure que ça fonctionne très bien comme celà!

1 2

Cette discussion est classée dans : and, query, like, pg, enreg


Répondre à ce message

Sujets en rapport avec ce message

Ma Bdd 'clignote'... Fonctionne, fonctionne pas... [ par larrieu ] Bonjour,Je suis un peu dépassé...Ma bdd sur mysql comprend une table annonce, des champs idannonce, sujet, message, pseudo (de l'auteur),mail (de l'au pb avec une recherche [ par neotetsuo34 ] bonjour, quand je lance ma recherche avec 6 critères, elle fonctionne impeccable mais quand je mets un septième critère, elle ne fonctionne plus. j'ai requete d'un moteur de recherche [ par mariobotta ] bonjour ,j'ai un champs dans un formulaire qui récupère des mots clefs.après traitement j'obtient une variable que je nomme $phrase qui contient le ou Php - foreach pour construire une requête multicritères [ par lolo479 ] Bonjour, j'essai de contruire dynamiquement une requête mais je n'arrive pas à ce que le "AND" s'écrive au bon endroit !!! Si qq'un à une idée je suis mon moteur recherche web : création de page d'idexation [ par astuces_jeux ] Bonjour,j'ai fait une page de résultats et j'ai peut-etre des erreurset j'aimerai décider qu'il y ai 15 réponses par pages et faires plusieurs page !! mon moteur recherche web : création de page d'idexation [ par astuces_jeux ] Bonjour,j'ai fait une page de résultats et j'ai peut-etre des erreurset j'aimerai décider qu'il y ai 15 réponses par pages et faires plusieurs page !! besoin d'aide pour pagination d'un moteur de recherche... [ par witch32 ] alors voila,j'ai créé un moteur de recherche pour partitions.aujourd'hui la base contient 35000 références;pour une recherche si je tombe sur1200 résu Erreur requete sql [ par flopad ] Bonjour, j'ai un formulaire via lequel je propose diverses options de recherche dans ma bdd; j'ai le code suivant qui me récupère les données du form transmission variable [ par soniaboulares ] Bjr,J'ai un problème consiste à afficher une table Mysql page par page avec une condition, cette condition depend de la variable ($datef=$_POST['UserS select like and or [ par jphilippev ] Bonjour j'ai un petit moteur de recherche sans pretention sur mon siteet je voudrais savoir si il est possible de faire ceci :$sql="select * from log


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales