Sql affichage sans fin!

chanteur06 Messages postés 131 Statut Membre -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je ne comprends pas pourquoi l'affichage demandé ne s'arrete pas simplement à la demande..?
voici le script:

// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM jos_restaurante';

// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
else {
echo '<table>'."\n";'<tr><td><td>Description</td></tr>';

// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$nb_affichage_par_page = 10;

// Préparation de la requête avec le LIMIT
$sql = "SELECT title, city FROM jos_restaurante WHERE city LIKE '%".$recherche."%' ORDER BY city ASC LIMIT ".$_GET["debut"].",".$nb_affichage_par_page;

// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) {
// on affiches les résultats dans la <table>
echo '<tr><td><td>' , htmlentities(trim($data['title'])) , '</td></tr>';
echo '<tr><td><td>' , htmlentities(trim($data['city'])) , '</td></tr>'."\n";
}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
echo '</table><br />'."\n";

si quelqu'un a une idée....merci beaucoup ;-)
A voir également:

16 réponses

Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

tu peux commencer par afficher ta requête pour la tester dans PHPMyAdmin :
// Préparation de la requête avec le LIMIT
$sql = "SELECT title, city FROM jos_restaurante WHERE city LIKE '%".$recherche."%' ORDER BY city ASC LIMIT ".$_GET["debut"].",".$nb_affichage_par_page;

echo($sql);

// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
0
chanteur06 Messages postés 131 Statut Membre 1
 
je test en local effectivement.
La requete s'affiche correctement au debut,mais le nombre de pages n'est pas limité!
avec ta requete d'affichage voilà ce qui apparait en plus du resultat:

SELECT title, city FROM jos_restaurante WHERE city LIKE '%%' ORDER BY city ASC LIMIT 0,10

le champ n'est plus renseigné,ça doit etre normal, et le retour en arriere avec les boutons ne m'affiche plus la requete demandé mais le début de la base.

Avec le script précédent,la requete de mandée s'affiche mais la suite de la base aussi, ce qui donne un nombre de pages allant jusqu'à la fin des enregistrements.
Je ne comprends pas pouquoi il n'affiche pas QUE la requete avec le nombre de pages correspondant...?
Merci
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
SELECT title, city FROM jos_restaurante WHERE city LIKE '%%' ORDER BY city ASC LIMIT 0,10

faut déjà savoir pourquoi ton "WHERE" est vide, non ?

et quand tu testes sur la bdd, elle te retourne la même chose que tu affiches avec PHP ?

0
chanteur06 Messages postés 131 Statut Membre 1
 
il est renseigné au départ, il est vide avec ta requete
echo($sql);

....
0

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

Posez votre question
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
je vois mal comment un echo() peut vider une variable.

et quand tu testes sur la bdd, elle te retourne la même chose que tu affiches avec PHP ? (bis)
0
chanteur06 Messages postés 131 Statut Membre 1
 
c'est a dire?

Les données sont bonnes. l'affichage est bon au départ de la requete envoyé par la recherche, l'echo reconnait le champ demandé. c'est si je mets ta ligne en plus que la premiere page sur la quelle on revient affiche le debut de la base,puisque qu'il est vide.
Mias je ne comprends pas pourquoi la requete ne s'arrete pas à l'echo demandé et sort toute la base en disponible.
Sinon l'affichage se fait bien par le nombre demandé....mais il devrait s'arreter à quelques pages,5 par exemple,et là on a autant de page necessaires à l'affichage de tous ce qui est sorti...
0
chanteur06 Messages postés 131 Statut Membre 1
 
c'est peut etre dans les fonctions, si tu vois klk chose...

<?php
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_dans_la_barre) {

$barre = '';

// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}

// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}

if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else {
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}

if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}

// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A>  ';
}
else {
$lien='';
}
$barre .= $lien;

// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= $cpt;
}
else {
$barre .= $cpt.' - ';
}
}
else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else {

$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}

$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}

// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = '  <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;

return $barre;
}
?>

Merci.... ;-)
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
et tu aurais pas une version en ligne pour voir ce qu'il envoie ?
0
chanteur06 Messages postés 131 Statut Membre 1
 
je suis en local pour l'instant
ça donne ça avec ta ligne echo($sql);

SELECT title, city FROM jos_restaurante WHERE city LIKE '%%' ORDER BY city ASC LIMIT 0,10
Auberge des Adrets
ADRETS DE L'ESTEREL (LES)
Auberge Panoramique
ADRETS DE L'ESTEREL (LES)
Auberge Font Freye
ANDON
Five
ANDON
Le Petit Cabri
ANDON
chez mamo
antibes
Tea Pot
ANTIBES JUAN LES PINS
Tea Pot
ANTIBES JUAN LES PINS
Vénéto Caffé
ANTIBES JUAN LES PINS
A la Table des Fées
ANTIBES JUAN LES PINS

1 - 2 - 3 >>

voilà....on peut faire défiler les chiffres jusqu'à la fin de la base,au lieu de n'avoir que quelques pages....!
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
mais dans PHPMyAdmin, si tu colles "SELECT title, city FROM jos_restaurante WHERE city LIKE '%%' ORDER BY city ASC LIMIT 0,10" dans l'onglet SQL, est-ce qu'il te renvoie toute la bas lui aussi ?

si oui, on sait où chercher.

tu peux toujours ajouter des accents graves pour séparer les champs, c'est plus propre mais ça ne doit être la cause de l'erreur.
0
chanteur06 Messages postés 131 Statut Membre 1
 
non j'ai une erreur...

#1064 - 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 '"SELECT title, city FROM jos_restaurante WHERE city LIKE '%%' ORDER BY city ASC ' at line 1
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
ça doit venir du double % dans la requête.
en tout cas il faut le faire tourner sur PHPMyAdmin en premier !
0
chanteur06 Messages postés 131 Statut Membre 1
 
ok jvai voir ça merci
ptetre a demain
0
chanteur06 Messages postés 131 Statut Membre 1
 
bon,en testant plusieurs chose,il apparait que la base est "rappelée" lorsque l'on clique sur un numéro de page, mais elle n'est pas rappelée avec la requete de $recherche, cette requete devient vide! et donc la totalité de la base est appelé, c'est logique
j'ai ajouté une requete plus complete dans

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM jos_restaurante';

où j'ai mis la meme demande que plus bas en complétant avec where et like; ça permet d'avoir d'entrée le bon nombre de pages vis à vis de la requete de recherche, ce qui n'était pas le cas avant.

Mais je ne trouve pas pourquoi la requete se vide et donc repart .
Probleme de definnition de boucle ou de fonstions peut etre...?
0
chanteur06 Messages postés 131 Statut Membre 1
 
quelqu'un a une idée...?
Merci
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

as-tu réussi ?
difficile de déboguer sans l'avoir en local.

si tu cherches toujours…
souvent je débogue à l'arrache en me faisant un log : à chaque ligne de code qui modifie la variable pistée, j'écris sa valeur dans un fichier texte.
0