PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-06-2011 13:10:06

matsay81
Membre
Inscription : 09-06-2011
Messages : 4

Formulaire de recherche avec case à cocher

Bonjour j'ai un petit souci sur un formulaire de recherche avec case à cocher.

Voilà j'ai un formulaire du genre :


<table width="710" align="left" cellpadding="5" style="font-family:Verdana, Geneva, sans-serif; font-size:10px;">
<form action="resultat.php" name="recherche_avance" method="post" enctype="multipart/form-data">
  <tr>
    <td>
      <table style="border:1px solid #CCCCCC;" width="100%" cellspacing="3" cellpadding="0" class="cadre" align="center">
        <tr height="40" class="tdPseudo" valign="middle"  style="font-size:14px; background-color:#666;">
          <td colspan="8" align="center"><strong>Vous cherchez</strong></td>
        </tr>
        <tr>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Couple" >
          </td>
          <td align="left" nowrap>
            <img src="images/couple.png" width="13" height="14" />
            Couples
          </td>
          <td width="20">
            <input type="checkbox" name="chrc[]" id="Femme" value="Femme" >
          </td>
          <td align="left" nowrap>
      <img src="images/femme.png" width="13" height="14" />
            Femmes
          </td>

          <td width="20">
            <input type="checkbox" name="chrc[]" value="Homme" >
          </td>

          <td align="left" nowrap>
          <img src="images/homme.png" width="13" height="14" />
            Hommes
          </td>
          <td>
            <input type="checkbox" name="chrc[]" id="Trans" value="Trans" >
          </td>
          <td align="left">
          <img src="images/trans.png" width="13" height="14" />
            Trans/Trav
          </td>
        </tr>
        <tr>
          <td width="20" height="22">
            <input type="checkbox" name="chrc[]" value="Couple dont F bi" >
          </td>
          <td align="left" nowrap>
           <img src="images/couple.png" width="13" height="14" />
            Couples F bi
          </td>
          <td width="20">
            <input type="checkbox" name="chrc[]" id="Femme_bi" value="Femme bi" >
          </td>
          <td align="left" nowrap>
          <img src="images/femme.png" width="13" height="14" />
            Femmes bi
          </td>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Homme bi" >
          </td>
          <td align="left" nowrap>
          <img src="images/homme.png" width="13" height="14" />
            Hommes bi
          </td>
          <td colspan="2"> 
          </td>
        </tr>
        <tr>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Couple dont H bi" >
          </td>
          <td align="left" nowrap>
          <img src="images/couple.png" width="13" height="14" />
            Couples H bi
          </td>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Femme Homo" >
          </td>
         <td align="left" nowrap>
         <img src="images/femme.png" width="13" height="14" />
            Femmes homo
          </td>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Homme homo" >
          </td>
          <td align="left" nowrap>
          <img src="images/homme.png" width="13" height="14" />
            Hommes homo
          </td>
          <td colspan="2"> 
          </td>
        </tr>
        <tr>
          <td width="20">
            <input type="checkbox" name="chrc[]" value="Couple les 2 bi" >
          </td>
          <td align="left" nowrap>
          <img src="images/couple.png" width="13" height="14" />
            Couples les 2 bi
          </td>
          <td colspan="2"> 
          </td>
          <td colspan="2"> 
          </td>
        </tr>
      </table>
    </td>
  </tr>
.....
</table>

 

Puis donc une fois validé je vais sur ma page résultat où je récupères mes données, jusque là pas de souci.

Ce sont des cases à cocher donc je construit ma requête en fonction et je crée une session pour garder ma requête en mémoire.


 // On initalise la requête et on valide le "WHERE" avec 1=1 qui renvoi tjrs "TRUE"      
  $query = "SELECT * FROM users WHERE 1=1";
  $and = ' AND ';

    // On parcourt le tableau cherche
  $query.=" AND sexe LIKE ";
  If (!isset ($_POST['chrc']))
  {
  $_POST['chrc'] ='';
  }
  else
  {
  $chrc[]=$_POST['chrc'];
  $chiffre = count($chrc)-1;
  for($i=0;$i<$chiffre;$i++)
    {
    if($i>0) $query.=" or ";
    $query.="  '%".$chrc[$i]."%' ";
    echo '<input type="texte" name="chrc[]" value="'.$chrc[$i].'">';
    }
  }
...
        $_SESSION['requete'] = $query;
  $requete = mysql_query($query) or die ("Requête invalide");
  $total = mysql_num_rows($requete);
  $query .= ' limit ' .$limite. ','.$nombre;
  $requete = mysql_query($query) or die ("Requête invalide"); 

 

le problème vient du fait que je veux mettre mon résultat sur plusieurs pages et là je bloque.

J'ai pris l'exemple du site avec la création d'une session pour garder en mémoire ma requête et là ça marche presque...

Effectivement quand je clique sur suivant ça marche et dès que je clique sur précédent il me perd ma session et me trouve plus la page.

Avez-vous une idée pour m'aider à avancer cela fait des jours que je bloque là dessus !

Merci

Hors ligne

#2 09-06-2011 17:20:54

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Formulaire de recherche avec case à cocher

Bonjour,

Si revenir à la page précédente en HTML ne pose aucun soucis il en est autrement en PHP et nécessite des techniques de programmation avancées, notamment la mise en cache des pages consultées et des variables passées au navigateur. En l'occurence pour débuter, passer les variables en GET dans l'URL peuvent aider pour se familiariser avec ces techniques, qui consistent en résumé, à 1) mémoriser l'adresse de la page précédente consultée (ou des X pages précédentes), 2) réinjecter les variables d'appel contextuelles (si par exemple il s'agit d'une page de sortie de saisie de formulaire).

PS: Le principe est quelque part évident: La programmation PHP et la navigation en PHP sont par définition dynamiques et par conséquent imprévisibles pour le navigateur. Ce qui est normal car elle dépends de la nature et du type de l'intervention de l'utilisateur sur chaque page pour pouvoir afficher la suivante. Dans l'autre sens c'est pire car dans l'absolu, plusieurs causent différentes peuvent produire parfois le même effet.

++

Dernière modification par Jc (09-06-2011 17:31:46)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 10-06-2011 09:01:37

matsay81
Membre
Inscription : 09-06-2011
Messages : 4

Re : Formulaire de recherche avec case à cocher

C'est à dire que dois-je faire pour qu'il puisse me garder ma session requête sachant que il ne change pas réellement de page il fait un post sur la même page.

Et pour des raisons évidente de sécurité je ne peux pas passer ma variable requête par l'url donc avez vous une solution à me proposer, je ne suis pas encore un spécialiste du php, je me débrouille pas trop mal mais là je suis un peu perdu !
Merci

Hors ligne

#4 10-06-2011 09:10:14

matsay81
Membre
Inscription : 09-06-2011
Messages : 4

Re : Formulaire de recherche avec case à cocher

Une solution serait donc de passer ma requête par un fichier ! cela serait-il une bonne solution ?

Hors ligne

#5 10-06-2011 09:32:28

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Formulaire de recherche avec case à cocher

matsay81 a écrit :

J'ai pris l'exemple du site avec la création d'une session pour garder en mémoire ma requête et là ça marche presque...

Effectivement quand je clique sur suivant ça marche et dès que je clique sur précédent il me perd ma session et me trouve plus la page.

J'imagine que la cible de précédent ne commence pas par session_start(), sinon, il n'y a pas de raison pour que les variables de session soient transmises avec suivant et pas avec précédent.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 10-06-2011 09:43:12

matsay81
Membre
Inscription : 09-06-2011
Messages : 4

Re : Formulaire de recherche avec case à cocher

Voici la fonction, c'est celle du site :


function displayNextPreviousButtons($limite,$total,$nombre,$page) {
$limiteSuivante = $limite + $nombre;
$limitePrecedente = $limite - $nombre;
echo  '<table><tr>'."\n";
if($limite != 0) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="GET">'."\n";
        echo  '<input type="submit" value="précédents">'."\n";
        echo  '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
}
if($limiteSuivante < $total) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="GET">'."\n";
        echo  '<input type="submit" value="suivants">'."\n";
        echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
           
}
echo  '</tr></table>'."\n";
}
 

Que ce soit sur suivant ou sur précédent il renvoi sur la même page donc je ne comprend pas.
Déroulement de l'opération recherche :
1 - il clique sur les cases à cocher (page recherche),
2 - il arrive sur la page résultat avec les 20 premiers résultat au début du chargement pas de session, une fois la page chargé il crée une session avec la requête
3 - il clique sur suivant, même page résultat avec les x résultats suivant et après vérification ma requête est toujours existente
4- il clique sur précédent, toujours même page, et là il ne connait plus la session requête et donc plus de résultats !!!

Sur ma page résultat, j'ai une session_start(), il faut aussi savoir que j'ai une autre session qui est celle du membre connecté puisque il faut être membre pour pouvoir faire une recherche.
Et que j'ai une div qui se rafraîchit toute les 60 seconde pour vérifier si il n'y a pas d'autre membre connecté.
Donc une autre page où j'ai une session_start (), est ce que cela ne peux pas rentrer en conflit ?

Dernière modification par matsay81 (10-06-2011 09:46:24)

Hors ligne

#7 10-06-2011 19:57:27

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Formulaire de recherche avec case à cocher

Bonjour,

J'ai deux conseils importants à te donner.
1) Prends du temps pour savoir comment les sessions fonctionnent vraiment
2) commence par un tuto simple sur la mise en cache PHP comme par exemple celui-ci Tuto mise en cache PHP ,puis celui ci.

++

Dernière modification par Jc (10-06-2011 20:07:18)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums