probleme avec la persistance d'une variable

Eléphant du PHP | 168 Messages

23 nov. 2009, 17:04

Voilà, je me suis mis (doucement) à php il y a quelques semaines. Aujourd'hui j'ai un petit problème quand à la valeur d'une variable. Mon code:
if ($id==1)
{

	if ($bool==0)
	{
		
		$req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville asc";
		
		$bool = 1;
	}
	else
	{
		$req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville desc";
		$bool = 0;
		
	}
}
Ici il s'agit de faire un affichage triée $id permet de définir sur quel critère je veux faire l'affichage; par pas problème je récupère la valeur avec $_GET['id'']; mais $bool qui devrait permettre de faire l'affichage croissant ou décroissant ne garde jamais sa valeur; j'ai bien essayé en la déclarant static mais ça ne marche pas. Quelqu'un peut m'aider?

Mammouth du PHP | 985 Messages

23 nov. 2009, 17:15

Tu t'es trompé de balises, tu as utilisé les balises html et non Php pour entourer ton code.

Sinon, peux-tu mettre le code ou tu définis $bool?

Et préciser aussi si tu le définis dans le même fichier ou un dans autre fichier...

(au pire met le code aussi ou tu définis $id)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 168 Messages

23 nov. 2009, 17:30

en fait j'ai essayé de l'initialiser sur plusieurs pages mais ça ne marche jamais.
Voilà comment ça se passe: l'utilisateur clique sur un lien liste de biens qui est dans menu.php:
<?php include_once 'session.php';
 ?>
<link rel="stylesheet" type="text/css" href="menu/styleMenu.css" />
<link rel="script" type="text/javascript" href="menu/scriptMenu.js" />
<div id="menuHorizontal">

            <li><a href="#"><span>vendre</span></a>
            <ul>
                <li><a href="#"><span>ajouter un bien</span></a></li>
                <li><a href="./affichagebiens.php"><span>liste des biens</span></a></li>
            </ul>
        </li>
		
le code de affichagebiens.php:
<?php
session_start();
include_once('session.php');
?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page d'accueil</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    </head>    <body>
	
       
        <div id="wrap">
            <div class="en-tete">
                <?php include 'en-tete/en-tete.php';?>
            </div>

            <div class="menu">
                <?php include_once('menu/menu.php');?>
            </div>

            <div class="menu_gauche">
                <?php require_once 'jeteste.php';
                include 'menu_gauche/recherche.php';?>
            </div>

            <div class="corps">
               <?php
			   $id = $_GET["id"];
			   static $bool;
			   include 'tri.php';
			   include_once 'affichage.php'; ?>
            </div>

            <div class="pied">

            </div>
        </div>
    </body>
</html>

Mammouth du PHP | 985 Messages

23 nov. 2009, 17:47

Ok donc il y a deux méthodes pour récupérer une variable dans une autre page.
La méthode $_GET et la méthode $_POST.

Tu utilises déjà la méthode $_GET pour la variable $id: $id = $_GET['id'];

Il faut en créer une autre avec la variable $bool, donc $bool = $_GET['bool'];

Ensuite il te faut deux liens:
ton lien $id doit être un peu comme ceci ?id=1

Donc deux liens dans tes autres pages:
Un lien avec ?id=1&bool=1
un autre avec ?id=1&bool=0

Donc dans ton fichier:
Exemple:
$id = $_GET['id'];
$bool = $_GET['bool'];

// on ajoute un isset() pour vérifier si la variable est définit pour éviter certaines erreurs Php

if (isset($id) && $id == 1)
{

   if (isset($bool) && $bool == 0)
   {
      
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville asc";
   }
   elseif (isset($bool) && $bool == 1)
   {
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville desc"; 
   }
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 168 Messages

23 nov. 2009, 17:54

oui, mais non. Je suis désolé j'ai peut-être pas été très complet, en fait lors de l'affichage l'entête est un lien, donc si je passe $bool en paramètre ce sera comme ça:
bool=$bool puisque je ne connais pas la valeur de bool à transmettre. La valeur de $bool doit changer à chaque fois qu'on clique sur le lien, tu comprends? Tu crois pouvoir m'aider? :priere:

Mammouth du PHP | 985 Messages

23 nov. 2009, 18:01

Dans ce cas, enregistre la valeur de $bool dans un cookie avec la fonction setcookie() après chaque requête et vérifie la valeur du cookie avant chaque requête :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 168 Messages

23 nov. 2009, 18:04

ok je vais essayer ça.
Mais comment faire si l'utilisateur n'autorise pas les cookies?

Mammouth du PHP | 985 Messages

23 nov. 2009, 18:14

$bool = $_COOKIE['bool'];
$id = $_GET['id'];

if (isset($id) && $id == 1)
{

   if (isset($bool) && $bool == 0)
   {
      
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville asc";
      
      setcookie('bool', 1);
   }
   elseif (isset($bool) && $bool == 1)
   {
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville desc";

      setcookie('bool', 0);
      
   }
}
Cela n'existe quasiment plus des utilisateurs qui n'acceptent pas les cookies.
Et pour ceux qui persistent à ne pas les accepter, ils sont habitués a naviguer sur des sites qui ne fonctionnent pas sans cookies...

Sinon il existe des scripts javascripts et même Php pour vérifier si l'utilisateur accepte les cookies.
Dans ce cas, tu peux lui signaler...

Quand tout sera ok, penses a marquer résolut :wink:

[EDIT]
Il te faut une valeur par défaut car au départ l'utilisateur ne possède aucun cookie.

Donc (exemple: ici $bool a comme valeur par défaut: 0):
$bool = $_COOKIE['bool'];
$id = $_GET['id'];

if (isset($id) && $id == 1)
{
   if (!isset($bool) || $bool == 0)
   {
      
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville asc";
      
      setcookie('bool', 1);
   }
   elseif ($bool == 1)
   {
      $req = "select * from biens inner join localisation on biens.local_id = localisation.local_id where util_id = 2 order by local_ville desc";

      setcookie('bool', 0);
      
   }
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 168 Messages

23 nov. 2009, 18:43

ok ton code marche mais je comprends rien. J'étais parti à ma sauce en utilisant les cookie, je récupérai en faisant $_cookie et tout mais mon code n'était pas tout à fait pareil, j'avais pas fait de isset et ça ne marchait pas. De plus la valeur changeait une fois de 0 à 1 mais après elle ne bougeait plus.
En tout cas avec ton code ça marche merci beaucoup. :D

Mammouth du PHP | 985 Messages

23 nov. 2009, 19:09

if (isset($id) && $id == 1)
-> Si l'url contient ?id= et que id == 1
if (!isset($bool) || $bool == 0)
-> Si aucun cookie (bool) ou que le cookie (bool) a comme valeur: 0
elseif ($bool == 1)
-> sinon si cookie (bool) a comme valeur: 1

(plus besoin de faire de isset() car on est certain que l'utilisateur possède le cookie(bool) sinon le script se serait arrêté au premier if)

Fonction isset(): http://php.net/manual/fr/function.isset.php

(Il est important de faire des isset() car si jamais Php test la variable et que la valeur n'est pas définit pour une raison ou une autre -> Php affichera une erreur de type Notice.
Par exemple, si l'utilisateur ne possède pas de cookie ou que l'url est appelée directement sans ?id=)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.