Perte de donnees lors d'un changement de page

Eléphanteau du PHP | 12 Messages

25 mars 2009, 00:59

Bonjour tout le monde! :D

Je fais face depuis quelques jours a un problème que je n'arrive a résoudre, ni seul, ni a l'aide des forums!

J'ai une première page index.php sur laquelle j'ai des listes déroulantes lies qui me renvoi sur une deuxième page après le choix effectue! Jusque la pas de problème (enfin maintenant) 8-)

J'arrive donc sur ma 2eme page: Search.php et tout se passe bien, les éléments demandes ont bien été cherche de la base de sql!

Mon problème c'est quand j'appuie sur les numéros de pages (même pages 1), c'est comme tout les variables été efface et il me met donc un message d'erreur sur la syntaxe d'une de mes requêtes sql (qui cela dit en passant fonctionnait très bien lors du 1er affichage)

Je ne sais plus du tout par ou orienter mes recherches, voici mon code, en espérant qu'il n'est pas trop mal organise pour que vous puissiez m'aider!

Merci d'avance pour votre grande aide!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Consultancy and advisory companies</title>
<link href="design.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="body_frame" align="center">
<div id="pos_toptop" align="center">
<div id="moncadre_categ">

<!-- Start categ. description -->
<div align="justify" class="categ_description">
<div align="justify"><strong>

<?php
$idc = isset($_POST['category'])?$_POST['category']:null; // recup donnee formulaire 1
$iduc = isset($_POST['under_categ'])?$_POST['under_categ']:null; // recup donnee formulaire 2
$idop = isset($_POST['op_area'])?$_POST['op_area']:null; // recup donnee formulaire 3
?>
<?php 
$connexion = mysql_pconnect("localhost", "********", "********") or die("Impossible to connect : " . mysql_error());
mysql_select_db("********");

// recup la donne désiré dans les tables
// search for Table name 
$get_tablename = mysql_query("SELECT * FROM category WHERE id_category = '". $idc . "'"); 
	if (!$get_tablename) {
	echo 'Impossible to execut this request 1 : ' . mysql_error(); // ERROR TO CORRECT
	exit;}
$row_t = mysql_fetch_row($get_tablename);
$id_table = $row_t[2]; // la valeur du champ id_table 
//echo $id_table;
// search for under category name
$get_under_categ = mysql_query("SELECT * FROM under_categ WHERE id_under_categ = '". $iduc. "'");
	if (!$get_under_categ) {
	echo 'Impossible to execut this request 2 : ' . mysql_error();
	exit;}
$row_uc = mysql_fetch_row($get_under_categ);
$name_undercateg = $row_uc[1]; // la valeur du champ under_categ
// echo $name_undercateg;
// search for operating area name
$get_op_area = mysql_query("SELECT * FROM op_area WHERE id_op_area = '". $idop. "'");
	if (!$get_op_area) {
	echo 'Impossible to execut this request 3 : ' . mysql_error();
	exit;}
$row_op = mysql_fetch_row($get_under_categ);
$name_op_area = $row_op[1]; // la valeur du champ under_categ
// echo $name_op_area;
?>

Category: <?php echo $idc ?> Under_categ: <?php echo $iduc ?> Op_area: <?php echo $idop ?> // Category: <?php echo $id_table ?> Under_categ: <?php echo $name_undercateg ?> Op_area: <?php echo $name_op_area ?></strong></div> // recap pour savoir quelles données fonctionne
</div>

<div class="displaying">
<div class="search_result">
<div class="page_number_up"><strong>

<?php // décompte des pages
$nombreDeMessagesParPage = 14;
$nb = mysql_query("SELECT COUNT(*) AS nbr FROM " . $id_table . " WHERE under_categ_all = '" . $name_undercateg . "'"); // On récupère le nombre total de messages
	if (!$nb) {
	echo 'Impossible to execut this request 5 : ' . mysql_error();
	exit;}
$donnees = mysql_fetch_array($nb);
$totalDesMessages = $donnees['nbr']; // echo "$totalDesMessages";
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage); // On calcule le nombre de pages à créer
	// Puis on fait une boucle pour écrire les liens vers chacune des pages
	echo 'Page : ';
	for ($i = 1 ; $i <= $nombreDePages ; $i++)  { echo '<a href="Search.php?page=' . $i . '">' . $i . '</a> '; }?> nb: <?php echo $totalDesMessages ?> </strong></div>

<div class="displaying"></p>

<?php // code central
//  Etape 3: Maintenant, on va afficher les messages
if (isset($_GET['page']))
{ 
$page = $_GET['page'];} // On récupère le numéro de la page indiqué dans l'adresse (advisory.php?page=4)
else 
{
$page = 1;} // La variable n'existe pas, C la première fois qu'on charge la page, On se met sur la page 1 (par défaut)
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$reponse = mysql_query("SELECT * FROM " . $id_table . " WHERE under_categ_all = '" . $name_undercateg . "' ORDER BY company LIMIT " . $premierMessageAafficher . ", " . $nombreDeMessagesParPage) or die(mysql_error()); 

while ($donnees = mysql_fetch_array($reponse) ){?>

<div id="table_advisory">
<div class="listing_title1"><strong><a href="<?php echo $donnees['adress']; ?>"><?php echo $donnees['company']; ?></a></strong></div>
<div class="image_robothumb"><a href="<?php echo $donnees['adress']; ?>"><img src=http://www.robothumb.com/src/?url=<?php echo $donnees['adress']; ?> style='border-width: 1px' /></a></div>
<div class="listing_title"><strong> Expertness: </strong><?php echo $donnees['under_categ_all']; ?></div>
<div class="listing_title"><strong> Op. Area: </strong><?php echo $donnees['operating_area']; ?></div>

<p></p>
</div><?php } mysql_close(); // Déconnexion de MySQL ?>

</div>
</div>
</div>
</body>
:P :idea:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

25 mars 2009, 02:22

Pas le temps de regarder en détail mais parfois mysql_close() pose problème dans certains scripts.

Eléphant du PHP | 254 Messages

25 mars 2009, 08:36

Salut,

Ou j'ai mal lu, ou tu ne revoie pas du tout tes infos en cliquant sur les numéro
    for ($i = 1 ; $i <= $nombreDePages ; $i++)  
{ 
      echo '<a href="Search.php?page=' . $i . '">' . $i . '</a> '; 
}
Tu t'attend a recevoir des variables POST mais tu n'as pas de formulaire, et tu n'envoie rien en GET, normal que tu perde tes valeurs

A moins qu'il nous manque un peu de code, ton système de pagination est incomplet

Eléphanteau du PHP | 12 Messages

26 mars 2009, 23:21

Hello!!

Désolé pour le retard avec lequel je répond!!

Bon c'est super tout ça mais après quelques test et quelques lectures, je ne sais pas vraiment comment m'y prendre!!

Variable de session, variable get, variable post caché.... La liste est longue! :(

Si je passe par un get, je ne suis pas sur d'avoir compris genre:
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{ echo '<a href="Search.php?page=' . $i . '"&id_table='.id_table.'>' . $i . '</a> '; }?>
Ci ceci est bon, est-ce que ce n'est pas mieux de passer par une session!
J'ai trouve plein d'info la dessus mais j'ai l'impression qu'aucune ne correspond a mon cas étant donne que la 2, 3, 4e pages se génère temporairement 9je ne peux pas écrire de code dedans!!

MERCI D'AVANCE :)

Eléphanteau du PHP | 12 Messages

29 mars 2009, 18:15

Arf arf....
Tant d'effort pour rien....
J'ai essayer de faire passer les variables par l'URL mais elles ne semble pas se transmettre!!

J'ai un message d'erreur, il ne veut pas executer ce code lorsque je clique sur un numero:
$nb = mysql_query("SELECT COUNT(*) AS nbr FROM " . $id_table . " WHERE under_categ_all = '" . $name_undercateg . "'"); // On récupère le nombre total de messages
	if (!$nb) {
	echo 'Impossible to execut this request 5 : ' . mysql_error();
	exit;}
Si vous aviez une idee de mon probleme!

Do not hesitate!!

Merci :roll:

Eléphant du PHP | 254 Messages

29 mars 2009, 19:36

Faut prendre les choses dans l'ordre, et les comprendre si tu veux t'en sortir. Il y a des choses existantes dans ton script mais beaucoup manquent.

Premièrement :

Quand tu sélectionnes tes liste déroulantes tu arrive sur ton script avec ceci
$idc = isset($_POST['category'])?$_POST['category']:null; // recup donnee formulaire 1
$iduc = isset($_POST['under_categ'])?$_POST['under_categ']:null; // recup donnee formulaire 2
$idop = isset($_POST['op_area'])?$_POST['op_area']:null; // recup donnee formulaire 3 
Ce sont des variables POST, qui ne peuvent venir que d'un formulaire, ce qui est le cas (il est possible de faire passer des variables GET par un formulaire mais ça n'a pas tant d'intérêt)

Ces variables sont indispensables au bon fonctionnement de ton script, aussi lorsque tu clique sur un des chiffres de ta pagination, ces variables doivent rester valables. le fait de cliquer sur un chiffre va rejouer le script, mais tu ne submit aps de formulaire, tes variables POST vont donc se retrouver vides.

Le mieux je pense c'est de mettre tes variables POST en session si elles existent. Ainsi dans $idc, $iduc et $idop tu mettras tes variables de sessions. De cette facon, ton script aura $idc, $iduc et $idopbie remplies, que tu viennent de ta sélection ou de ta pagination.

Deuxiemement

Les liens sous forme de chiffre de ta pagination semble être envoyées par GET (via l'attribut url de ton lien), et doivent être récupérées de cette façon pour être utilisés par la requête d'affichage

Avant tout traitement de requête sql assure toi d'avoir bien toutes tes variables qui circulent bien, a la fois a l'arrivée sur le script et en cliquant sur la pagination (pas la peine de se lancer dans le sql si ce n'est pas le cas)

troisièmement :

Si tes requêtes ne fonctionnent pas, fait les s'afficher a l'écran (une requête n'est qu'une string, tu peux l'afficher avec un echo)

Si tu as des soucis encore, ne nos dit pas "ca ne marche pas j'ai une erreur", mais donne nous l'erreur, ça nous évitera d'user de notre imagination :wink: Mais assure toi des deux premier point tout d'abord

Eléphanteau du PHP | 12 Messages

29 mars 2009, 22:49

Je galère grave!

Même avec une session les valeurs des variables ne passent pas:
<?php session_start(); 
if(isset($_SESSION["category"]))
$idc = $_SESSION["category"];
if(isset($_SESSION["under_categ"]))
$idc = $_SESSION["under_categ"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Consultancy and advisory companies</title>
<link href="design.css" rel="stylesheet" type="text/css" />
Et un peu plus loin:
<?php
$idc = isset($_POST['category'])?$_POST['category']:null; // recup donnee formulaire 1
$iduc = isset($_POST['under_categ'])?$_POST['under_categ']:null; // recup donnee formulaire 2
$idop = isset($_POST['op_area'])?$_POST['op_area']:null; // recup donnee formulaire 3
?>
<?php 
$_SESSION["category"] = $idc;
$_SESSION["under_categ"] = $iduc; ?>
<?php 
// $serveur = "localhost";
// $admin   = "*******";
// $mdp     = "*******";
// $base    = "*******";
$connexion = mysql_pconnect("localhost", "*******", "*******") or die("Impossible to connect : " . mysql_error());
mysql_select_db("carbosphere");
// search for Table name
$get_tablename = mysql_query("SELECT * FROM category WHERE id_category = '". $idc . "'"); 
	if (!$get_tablename) {
	echo 'Impossible to execut this request 1 : ' . mysql_error(); // ERROR TO CORRECT
	exit;}
$row_t = mysql_fetch_row($get_tablename);
$id_table = $row_t[2]; // la valeur du champ id_table 
//echo $id_table;
// search for under category name
$get_under_categ = mysql_query("SELECT * FROM under_categ WHERE id_under_categ = '". $iduc. "'");
	if (!$get_under_categ) {
	echo 'Impossible to execut this request 2 : ' . mysql_error();
	exit;}
$row_uc = mysql_fetch_row($get_under_categ);
$name_undercateg = $row_uc[1]; // la valeur du champ under_categ
// echo $name_undercateg;
// search for operating area name
$get_op_area = mysql_query("SELECT * FROM op_area WHERE id_op_area = '". $idop. "'");
	if (!$get_op_area) {
	echo 'Impossible to execut this request 3 : ' . mysql_error();
	exit;}
$row_op = mysql_fetch_row($get_under_categ);
$name_op_area = $row_op[1]; // la valeur du champ under_categ
// echo $name_op_area;

?>
Category: <?php echo $idc ?> Under_categ: <?php echo $iduc ?> Op_area: <?php echo $idop ?> // Category: <?php echo $id_table ?> Under_categ: <?php echo $name_undercateg ?> Op_area: <?php echo $name_op_area ?></strong></div>
</div>

<?php
$nombreDeMessagesParPage = 14;
$nb = mysql_query("SELECT COUNT(*) AS nbr FROM " . $id_table . " WHERE under_categ_all = '" . $name_undercateg . "'"); // On récupère le nombre total de messages
	if (!$nb) {
	echo 'Impossible to execut this request 5 : ' . mysql_error();
	exit;}
$donnees = mysql_fetch_array($nb);
$totalDesMessages = $donnees['nbr']; // echo "$totalDesMessages";
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage); // On calcule le nombre de pages à créer
	// Puis on fait une boucle pour écrire les liens vers chacune des pages
	echo 'Page : ';
	for ($i = 1 ; $i <= $nombreDePages ; $i++)  { echo '<a href="Search.php?page=' . $i . '">' . $i . '</a> '; }?> nb: <?php echo $totalDesMessages ?> </strong></div>
ca fait 2 semaines que je galere sur le passage des ces 2-3 variables, je commence a craquer:

Message d'erreur:
Impossible to execut this request 5 : 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 'WHERE under_categ_all = ''' at line 1

:twisted:

HELP! HELP!

ViPHP
ViPHP | 1996 Messages

30 mars 2009, 09:16

Fais un
 echo "SELECT COUNT(*) AS nbr FROM " . $id_table . " WHERE under_categ_all = '" . $name_undercateg . "'";
Pour savoir si les variabels sont bien passées.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 254 Messages

30 mars 2009, 12:17

Tu remplis tes variables avec les variables de SESSION mais ensuite tu fais le test avec les variables POST et si POST n'est pas définie, tu vide la variable, résultat elles arrivent vides dans la requête, la requête plante CQFD

Ce qu'il te faut c'est un seul traitement de remplissage de tes variables, par POST ou SESSION selon les cas

Je te montre un exemple de traitement pour une variable, et en mode plus lisible que le mode ternaire, ceci pour remplir la variable $idc (il faut donc faire pareil pour les deux autres variables)
if (isset($_POST['categorie']) && $_POST['categorie']!="" )
{
     // ici on vient de la sélection validée par un formulaire, les variables POST sont censée être remplies, on affecte donc nos variables, et on les sauvegarde en session
     $idc = $_POST['categorie'];
     $_SESSION['categorie'] = $idc;
}
else
{
     // ici on vient d'un clic sur la pagination, les variables POST sont vides car on n'a pas validé de formulaire, juste cliqué sur un lien, par contre les variables de SESSION doivent être remplies
     if (isset($_SESSION['categorie']) && $_SESSION['categorie']!="")
          $idc = $_SESSION['categorie'];
     else
          //MESSAGE D'ERREUR !! CE CAS LA NE DEVRAIT JAMAIS ARRIVER
}

Eléphanteau du PHP | 12 Messages

30 mars 2009, 22:34

waouhwaouhwaouh!!!

SU-PER!

C'est exactement ce que je cherchais!

Merci beaucoup pour votre temps! :D

C'est genial et resolu!! :!:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]