Retour en page précèdente

Eléphant du PHP | 167 Messages

06 juin 2013, 14:32

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.

Mammouth du PHP | 619 Messages

06 juin 2013, 14:34

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

Eléphant du PHP | 167 Messages

06 juin 2013, 14:46

Re,

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

Mammouth du PHP | 619 Messages

06 juin 2013, 14:53

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

Eléphant du PHP | 167 Messages

06 juin 2013, 15:12

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é...

Mammouth du PHP | 619 Messages

06 juin 2013, 15:23

Il faut pas revenir en arriere avec le navigateur mais avec une redirection qui va te mettre sur la bonne page

Petit nouveau ! | 7 Messages

06 juin 2013, 15:28

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

Mammouth du PHP | 619 Messages

06 juin 2013, 15:36

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

Petit nouveau ! | 7 Messages

06 juin 2013, 15:53

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 :)

Mammouth du PHP | 619 Messages

06 juin 2013, 15:57

Ok désolé j'ai mal compris le message :)

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

Eléphant du PHP | 167 Messages

06 juin 2013, 16:08

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.

Mammouth du PHP | 619 Messages

06 juin 2013, 16:23

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
}

Eléphant du PHP | 167 Messages

06 juin 2013, 16:39

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>

 

Mammouth du PHP | 619 Messages

06 juin 2013, 17:02

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

Eléphant du PHP | 167 Messages

06 juin 2013, 17:12

Re,

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