Page 1 sur 2

Retour en page précèdente

Posté : 06 juin 2013, 14:32
par NUAGE
Bonjour,

J'ai un formulaire de recherche comme ceci :

      <?php
	require("connect.php");
	$dsn="mysql:dbname=".BASE.";host=".SERVER;
    try{
      $connexion=new PDO($dsn,USER,PASSWD);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit();
    }

$sql="SELECT * from Etablissement order by nomEtablissement";

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">

          <?php
        foreach ($connexion->query($sql) as $row){

           echo "<option value=".$row['idEtablissement'].">".$row['nomEtablissement']."</option>";
           
                }
?>
        </select>
        <input type="submit" value="Rechercher">
       
        </form>
<?php
}  
//la parti du haut fonctionne aucun probleme    
?>

<?php
 
$where="";//initialise la variable $where  

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}//si le champ dpt n'est pas vide alors $where prend cette condition
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}//si le champ nature n'est pas vide alors $where prend cette condition
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}//si le champ checkbox n'est pas vide alors $where prend cette condition
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}//on efface le and et l'espace de fin
;
$sql="SELECT * from Etablissement $where order by nomEtablissement";//on prepart la requete avec ou sans condition
if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        //on affiche le formulaire
                echo'
   	<form action="" method="POST">

   	<p>Département</p>
 
 	<input type="checkbox" name="checkbox[]"  value="75">75
	<input type="checkbox" name="checkbox[]"  value="92">92
	<input type="checkbox" name="checkbox[]"  value="95">95
	<input type="checkbox" name="checkbox[]"  value="98">98

    <p>Nature</p>
  	<input type="radio" name="nature"value="1">Université
  	<input type="radio" name="nature" value="2">Ecole d\'ingénieur        
             
    <input type="submit" name="valide" value="Rechercher">  

	</form>';

   if(isset($_POST['valide'])){  
     echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";//on prepart l'affichage des donnee
     foreach ($connexion->query($sql) as $row){//on boucle sur la requete

                 echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];//on liste les resultats
         }
   echo "</table>";  
   }
     
}      
 ?>

</body>
</html>

J'ai comme résultat les établissements en lien cliquable du coup quand je clique sur l'établissement, je vais sur une autre page qui affiche tout les étudiants de cet établissement. Une fois que je clique sur l'étudiant j'ai ses informations. Ce que je voudrais c'est retourner à la page de recherche en gardant les résultats.
J'ai essayé avec "location" mais ça me remet directement à la page de recherche mais j'ai pas les infos de l'étudiant, y a t une autre façon vu que j'ai plusieurs pages.

Merci pour votre aide.

Re: Retour en page précèdente

Posté : 06 juin 2013, 14:34
par ghost5922
Bonjour,

tu peu sois faire
un formulaire pour revenir en arriére avec les informations
tu peux garde les informations en session
il doit en avoir d'autre mais avec ça tu dois pouvoir le faire

Re: Retour en page précèdente

Posté : 06 juin 2013, 14:46
par NUAGE
Re,

Merci de me répondre.
Du coup avec les sessions, je met quel champ en session ?

Re: Retour en page précèdente

Posté : 06 juin 2013, 14:53
par ghost5922
Re,

ben ce que tu souhaite gardes

$_SESSION['infos']==$mavar;


et quand tu en as besoin echo $_SESSION['infos'];

si tu as plusieurs informations

$_SESSION['infos']==array('id_x'=>$var1,'id_y'=>$var2);

et quand tu en as besoin $_SESSION['infos']['id_x']; et $_SESSION['infos']['id_y'];

c'est juste pour dire que tu as l'informations sur n'importe quel page

oublie pas d'efface le contenu de la session['infos'] quand tu valides les infos et que tu en as plus besoin

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:12
par NUAGE
Avec ceci :

session_start();
$var1=isset($_POST['nature']);
$var2=isset($_POST['dpt']);
$_SESSION['where']=array('nature'=>$var1, 'dpt'=>$var2);

Quand je vais sur la page 3, et que je veux revenir sur la première, je passe bien par la deuxième et puis quand j'arrive sur la première, je dois rechargé la page car le document à expiré...

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:23
par ghost5922
Il faut pas revenir en arriere avec le navigateur mais avec une redirection qui va te mettre sur la bonne page

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:28
par ProgDez
Bonjour,

@ghost
== pour une affectation ? hmmm

Plus simplement, quand vous faites une recherche vous envoyez un formulaire, formulaire qui vous être d'accord avec moi vous retourne une liste d'établissement et ensuite une liste d'élèves par établissement.

Quels outils pour le retour en arrière. l'historique.

Exemple :

Code : Tout sélectionner

<a href="javascript:history.go(-1);return false;">Retour</a>
Vous permet de retourner à l'avant dernière entrée de votre historique donc votre page précédente.

Oui, mais soucis! si c'est un formulaire, cela vous va vous contraindre à répondre à une dialogbox du navigateur qui vous demandera si vous souhaitez renvoyer les informations envoyées lors du lancement de votre recherche.

Comment faire ? vous pouvez faire en sorte de stocker les valeurs de vos recherches avec une dates de péremption (et oui il faut garder nos données à jours) dans des sessions par exemple, sous forme de tableau, ça ira très bien.

Donc dans le gros du concept :
- Si vous arrivez sur la page et que votre variable n'est pas set (isset($mavar)) vous affichez votre champ de recherche standard.
- Si vous arrivez sur la page et que votre variable est set (isset($mavar)) vous utilisez cette variable pour afficher les résultats.
- Si ma var est set mais que la date de péremption est dépassée, il faut mettre à jour les données correspondantes et afficher les résultats.

La je vous donne ma vision des choses vous pouvez bien évidemment l'adapter.

Pour les sessions : $_SESSION['votre_clef'] = array( ... mes data .... );

Et du coups un foreach($_SESSION['votre_clef'] as $key => $value) et vous pouvez ainsi parcourir facilement vos données.

Sinon, vous avez toujours la possibilité de stocker dans un $_GET via transmission de paramètre dans l'url l'objet de votre recherche et relancer la recherche si se param est set (mais bon refaire N fois les requêtes pour toutes vos données c'est pas super opti.)

Donc à vous de voir !

Voilà,
Cordialement

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:36
par ghost5922
Bonjour ProgDez,

oui cela et possible avec un formulaire non pas comme vous l'expliquez mais plutôt

1 ) page de recherche qui envoi sur le seconde formulaire
2) 2eme formulaire on remets les premiers informations en hidden et on ajoute les nouvelle information
3) on a tous les informations que l'on souhaite mais on veux revenir sur la page recherche rien n'empeche d'envoye le formulaire a la page recherche avec un name au submit et sur la page recherche vérifie si on a déjà envoyé les données :)

mais bon je le dis il a plusieurs façons de faire j'ai jamais dis que la mienne été la mieux :)

après je répond comme je peux si vous avez une meilleurs solution a donnée je pense qui sera heureux de la connaitre

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:53
par ProgDez
Le hidden peut effectivement être une solution pour la transmission descendante, ce que j'explique précédemment pour faire le chemin inverse (sans justement avoir à refaire les requêtes) ;)

Il faudrait avoir des éclaircissements de la part de l'intéressé, sur la structure et un scénario de recherche il est difficile de proposer une solution qui répondra à toutes les problématiques sans avoir une vue d'ensemble !

Voilà tout :)

Re: Retour en page précèdente

Posté : 06 juin 2013, 15:57
par ghost5922
Ok désolé j'ai mal compris le message :)

en effet quand on a plus de détail ca aide beaucoup ^^

Re: Retour en page précèdente

Posté : 06 juin 2013, 16:08
par NUAGE
Re,

Pour plus de précisions, j'ai un formulaire de recherche avec une déroulante, des checkbox et radio, comme vous pouvez le voir dans le code que j'ai posté.
Sinon, quand je choisi mes critères, j'ai des établissements qui s'affichent sur la même page. Ensuite en cliquant sur un établissement, je vais sur autre page et là j'ai la liste de ses étudiants. En cliquant sur un étudiant pour avoir ses informations, je vais sur autre dernière page qui m'affiche ses informations. C'est sur cette page de cette page que je veux retourner à la toute première où j'ai saisi mes critères, tout en les gardant d'afficher.

J'espère que c'est plus clair.

Re: Retour en page précèdente

Posté : 06 juin 2013, 16:23
par ghost5922
ok, je comprend mieux tu moins je pense ^^

donc sur la premier page tu peu déjà faire


session_start();

$_SESSION['where']=array('premiercondition','secondecondition');

et a chaque fois que tu veux ajouter des conditions tu fais cela

a la fin tu reviens sur la premier page puis tu fais un

if(isset($_SESSION['where']){
un foreach pour préparer la requête
}

Re: Retour en page précèdente

Posté : 06 juin 2013, 16:39
par NUAGE
Re,

Alors si j'ai bien compris, ça donne ceci mais j'ai pas compris pour le foreach
<?php
 
$where="";//initialise la variable $where  

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}//si le champ dpt n'est pas vide alors $where prend cette condition
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}//si le champ nature n'est pas vide alors $where prend cette condition
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}//si le champ checkbox n'est pas vide alors $where prend cette condition
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}//on efface le and et l'espace de fin
session_start();

$_SESSION['where']=array('dpt','nature');
if(isset($_SESSION['where']){
$sql="SELECT * from Etablissement $where order by nomEtablissement";//on prepart la requete avec ou sans condition

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        //on affiche le formulaire
                echo'
   	<form action="" method="POST">

   	<p>Département</p>
 
 	<input type="checkbox" name="checkbox[]"  value="75">75
	<input type="checkbox" name="checkbox[]"  value="92">92
	<input type="checkbox" name="checkbox[]"  value="95">95
	<input type="checkbox" name="checkbox[]"  value="98">98

    <p>Nature</p>
  	<input type="radio" name="nature"value="1">Université
  	<input type="radio" name="nature" value="2">Ecole d\'ingénieur        
             
    <input type="submit" name="valide" value="Rechercher">  

	</form>';

   if(isset($_POST['valide'])){  
     echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";//on prepart l'affichage des donnee
     foreach ($connexion->query($sql) as $row){//on boucle sur la requete

                 echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];//on liste les resultats
         }
   echo "</table>";  
   }
     
}    
}  
 ?>

</body>
</html>

 

Re: Retour en page précèdente

Posté : 06 juin 2013, 17:02
par ghost5922
Ce que tu veux garde c'est le $where ?

si oui il suffi de vérifié que la session et creer et de mettre la valeur
session_start();


if(!isset($_SESSION['where'])){
	$_SESSION['where']=$where;
}
if(isset($_SESSION['where'])){
	$where=	$_SESSION['where'];
} 
donc a teste et a optimise

Re: Retour en page précèdente

Posté : 06 juin 2013, 17:12
par NUAGE
Re,

Si j'ai bien compris ce code je le met dans le premier formulaire mais dans le dernier formulaire je dois mettre quoi ?