Comment garder une valeur de requete?

chanteur06 Messages postés 131 Statut Membre -  
chanteur06 Messages postés 131 Statut Membre -
hello
je tourne en rond depuis klk jours.
je cherche à afficher des resultats d'une base importante,donc sur plusieures pages.J'arrive à afficher une pagination,sauf que les pages suivantes ne gardent pas la requete récupérée du formulaire. donc je me disais que créer une session permettrait de garder cette requete sur chaque page appelées,je me trompe..?
et comment écrire et intégrer cette session si necessaire,car j'ai des retours parse errors.
Si vous avez une autre idée,je prends
(le script est classique pour pagination et requete de BDD)
[CODE] <?php
session_start() ;

$recherche = isset($_POST['recherche']);

//enregistrement d'une variable de session
$_SESSION['recherche'] = $recherche;

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].' '.$recherche.'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).'&recherche='.$_POST['recherche'];
$barre .= "'>".$cpt."</A>";
}
else {

$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page).'&recherche='.$_POST['recherche'];
$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;
}
?>

<html>
<head>
<title>Les livres de la bibliothèque</title>
</head>

</body>
Les différents restaurants :<br /><br />
<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('youresto', $base);

// 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(city) FROM jos_restaurante WHERE city LIKE '".$recherche."%'";

// 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_row($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 = 15;

// 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());

// 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";

// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
echo '</table><br />';
?>

</body>
</html> /CODE

merci

4 réponses

Xil Messages postés 351 Statut Membre 257
 
<?php session_start();
$_SESSION['variable'] = "valeur";
?>


$_SESSION['variable'] existera et aura la même valeur sur toute les pages où 'session_start' sera appelée, tant que la fenêtre du navigateur affichant le site ne sera pas fermée et que l'utilisateur ne sera pas resté inactif trop longtemps (en fonction de la configuration du serveur PHP).

session_start(); doit toujours être la première instruction de la page où les sessions sont nécessaires.
0
chanteur06 Messages postés 131 Statut Membre 1
 
ok, c'est ce qui me semble avoir compris (je suis pas sur des guillemets sur "valeurs")
Mais il me semblait que la page s'ouvrait dans la meme page...?
donc apparemment elle s'ouvre sur une autre page c'est ça?(vu la valeur url en bas) comment faire pour faire suivre session_start()?
je dois faire une autre page identique ou on fait suivre sur l'une des lignes de ce code?
Merci
0
Xil Messages postés 351 Statut Membre 257
 
Ne pas confondre 'page' et 'fenêtre'.
Que les pages s'ouvrent dans la même fenêtre ou pas, la variable de session sera accessible.

https://phpsources.net/tutoriel-sessions.htm
0
chanteur06 Messages postés 131 Statut Membre 1 > Xil Messages postés 351 Statut Membre
 
je dois mal utiliser cette fonction session alors, puisqu'elle est en début de code.
Qu'est ce que t'en pense?
0
Xil Messages postés 351 Statut Membre 257 > chanteur06 Messages postés 131 Statut Membre
 
J'en pense que si je ne vois pas ta façon de l'utiliser, je ne peux pas la deviner.
0
chanteur06 Messages postés 131 Statut Membre 1 > Xil Messages postés 351 Statut Membre
 
je n'utilises rien de plus que cette page... :-(
0
chanteur06 Messages postés 131 Statut Membre 1 > Xil Messages postés 351 Statut Membre
 
Si ça peut aider, voilà l'erreur affichée sur l'appel de la page suivante:

Notice: Undefined index: recherche in C:\Program Files\wamp\www\rech3\recherche.php on line 102

ce serait pas le code session ou autre à mettre dans la navigation...?
0
chanteur06 Messages postés 131 Statut Membre 1
 
l'url du bas m'affiche bien le resultat de la requete en survolant les numéros de pages, mais lors du click,elle se vide et affiche toujours la base dès le 1er enregistrement!!! je comprends pas.... revoilà le code:
[code]
<?php
session_start() ;

if (isset($_SESSION['recherche'])) $recherche = $_SESSION['recherche'];
else if (isset($_POST['recherche'])) $recherche = $_POST['recherche'];

//enregistrement d'une variable de session
$_SESSION['recherche'] = $recherche;

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'] == "recherche") {
$query = $_SERVER['PHP_SELF'].'?debut='.'$recherche';
}
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='.'$_SESSION';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].' '.$recherche.'debut='.'$_SESSION';
}
}
}

// 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).'&recherche='.$_SESSION['$recherche'];
$barre .= "'>".$cpt."</A>";
}
else {

$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page).'&recherche='.$_SESSION['$recherche'];
$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;
}
?>

<html>
<head>
<title></title>
</head>

<body>
Les différents restaurants :<br /><br />
<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('youresto', $base);

// 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(city) FROM jos_restaurante WHERE city LIKE '".$recherche."%'";

// 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_row($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;

echo($sql);

// 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";

// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
echo '</table><br />';

?>

</body>
</html>
[/code]

merci
0
Xil Messages postés 351 Statut Membre 257
 
$_SESSION['$recherche']

Ceci ne risque pas de fonctionner, c'est $_SESSION['recherche']. Il y est plusieurs fois.

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

Est toujours là, juste après ta connexion à mysql. C'est cette ligne qui vide ta recherche, supprime la.
0
chanteur06 Messages postés 131 Statut Membre 1
 
en supprimant
// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';

j'ai : "aucun resultat trouvé" ....!
0