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

dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005 - 2 nov. 2005 à 00:25
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005 - 2 nov. 2005 à 14:31
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 '';

echo '
';

echo '
Aucun
résultat ne correspond aux termes de votre recherche.
';

echo '
[http://www.manucure.be/fr/frame2/search.htm

10 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 00:33
"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 !
0
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 00:39
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....
0
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 00:40
j'ai trouvé mon code pour la pagination ici
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 00:44
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 00:49
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?
0
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 00:51
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='';



}
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
2 nov. 2005 à 01:37
$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 ;
0
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 03:42
ç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);
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
2 nov. 2005 à 05:06
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 '[?pg='.$pp.' &lt;&lt;page
pr&eacute;c&eacute;dente]';

}


# 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;[?pg='.$i.' '.$i.']';
}
else
{
echo '&nbsp;'.$i.'&nbsp;';
}
}



if($pg < $nb_pg_rounded)

{
echo '&nbsp;[?pg='.$ps.' page suivante&gt;&gt;]';
}
}



# 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à!
0
dieusurterre Messages postés 13 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 14:31
ça a bien meilleure gueule que mon code originel.. mais j'ai une erreur
concernant la requete.. je n'arrive pas à trouver d'où ça peut venir



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





<!--Début Table html-->






$nb_enreg = mysql_num_rows($result);




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


while($datas = mysql_fetch_array($result)){




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

if(mysql_num_rows($result) == 0)



pourtant.. il me semble que c'est correct



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





?>
0
Rejoignez-nous