Sql affichage sans fin!
chanteur06
Messages postés
131
Statut
Membre
-
Dalida Messages postés 7114 Date d'inscription Statut Contributeur Dernière intervention -
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 ;-)
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:
- Sql affichage sans fin!
- Fin des zfe - Guide
- Affichage double ecran - Guide
- Windows 11 affichage classique - Guide
- Fin numericable - Accueil - Box & Connexion Internet
- Logiciel sql - Télécharger - Bases de données
16 réponses
salut,
tu peux commencer par afficher ta requête pour la tester dans PHPMyAdmin :
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());
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
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
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
et quand tu testes sur la bdd, elle te retourne la même chose que tu affiches avec PHP ? (bis)
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...
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...
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.... ;-)
<?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.... ;-)
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....!
ç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....!
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.
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.
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
#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
ça doit venir du double % dans la requête.
en tout cas il faut le faire tourner sur PHPMyAdmin en premier !
en tout cas il faut le faire tourner sur PHPMyAdmin en premier !
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...?
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...?