Page 1 sur 1

checkbox et recuperation d'infos suite a une recherche

Posté : 31 janv. 2007, 17:13
par ptitof54
Bonjour,

j'apprends le php/Mysql et je bute sur un exercice :

1 - j'ai crée un formulaire en php qui me permet de stocker des infos dans une base
c'est une page de donnée pour des offres d'emplois.
les champs sont nom societe, poste,secteur, region,etc.. cela fonctionne .

2-une fois plusieurs infos rentré je dois faire une recherche sur 3 criteres :

par secteur
par region
par type de contrat (cdd ou cdi)

le code est le suivant :

Code : Tout sélectionner

<form method="post" action="afficher.php"> <TABLE cellSpacing=0 cellPadding=0 border=1 width="425" bgcolor="#CCCCCC"> <TBODY> <TR> <TD vAlign=top colSpan=3> <b>Rechercher par :</b><BR> <P ><B>Secteur d'activité : </B></P> </TD> </TR> <TR> <TD colSpan=3> <SELECT name=Secteur> <OPTION value=0 selected>Choisissez un secteur d'activité... <?php $requete = mysql_query ("SELECT categorie FROM secteurs", $MyCONN) or die ("Erreur : Requete invalide"); $num = mysql_numrows($requete); if ($num<>0) { $i=0; while ($i<$num) { $categorie = mysql_result($requete, $i, "categorie"); echo "<OPTION value="; echo $i+1; echo " >".$categorie."</OPTION>"; $i++; } } ?> </SELECT> </TD> </TR> <TR> <TD vAlign=top colSpan=3> <P ><B>Région : </B></P> </TD> </TR> <TR> <TD colSpan=3> <SELECT name=region> <OPTION value=0 selected>Choisissez une région... <?php $requete = mysql_query ("SELECT region FROM regions", $MyCONN) or die ("Erreur : Requete invalide"); $num = mysql_numrows($requete); if ($num<>0) { $i=0; while ($i<$num) { $region = mysql_result($requete, $i, "region"); echo "<OPTION value="; echo $i+1; echo " >".$region."</OPTION>"; $i++; } } ?> </SELECT> </TD></tr> <TR> <TD class=rvtop vAlign=top colSpan=3> <P class=rubrique><B>CONDITIONS</B></P> <P></P></TD></TR> <TR> <TD class=rvtop vAlign=top>&nbsp; </TD> <TD colSpan=2> <P ><B>Type de contrat : </B></P><INPUT type=checkbox value=1 name=TypeContrats[]> <SPAN class=rubriqueN>CDD </SPAN>&nbsp; <INPUT type=checkbox value=2 name=TypeContrats[]> <SPAN class=rubriqueN>CDI </SPAN>&nbsp; <P></P></TD></TR> <TR> <TD colSpan=3 align=center> <p>&nbsp;</p><p><input type="submit" name="Submit3" value=" Rechercher "> </p></TD> </TR> </TBODY> </TABLE> </form>
2 problemes se pose alors a moi

le resultat depend du choix dans le formulaire si tout est selectionné un seul ou 2 champ et l'internaute peu selectionner plusiers regions (checkbox).

1 - je ne vois vraiment pas comment recuperer les infos provenant des checkbox
2- je n'arrive pas à demarrer mes requetes qui dependent des criteres de selection.

Voila j'espere que cela est clair et que quelqu'un pourra me guider
Merci d'avance
Christophe

Posté : 31 janv. 2007, 17:33
par Ryle
Pour construire ta requête en fonction de paramètres variables, il te suffit de découper la requête comme une chaine de caractère que tu complètes en fonction des paramètres sélectionnés :
$sql = " SELECT ... FROM ... WHERE ...";
if($condition1) {
  $sql .= " AND ... ";
}
if($condition2) {
  $sql .= " AND ... ";
}
...
Pour tes cases à cocher, tu vas récupérér côté php un tableau $_POST['TypeContrats'] qui contiendra les value des cases qui ont été cochées.
Tu peux à partir de la utiliser la fonction implode() de php par exemple pour intercaler des virgules entre chaque valeur (2,5,7) et l'utiliser dans un critere du genre : AND type_contrat IN (2,5,7) :)

Posté : 31 janv. 2007, 21:52
par ptitof54
merci je vais essayer avec tout ça

champ separe par des virgules dans une table

Posté : 06 févr. 2007, 12:41
par ptitof54
Bon... ca avance plutot bien

Dernier petit souci

etape n°1 j'ai donc la possibilité via un formulaire et des checkbox de selectionner plusieur regions, une fois validées je peux donc avoir dans ma table un champ avec plusieurs élément separé par des virgules du genre : Aquitaine,Lorraine,Picardie

Etape n°2 a partir d'une recherche multicritère je peux demander une recherche par region si dans mon champ il n'y a qu'un element qui correspond a ma requete pas de probleme il m'affiche mon resultat. Par contre si il y a plusieurs element alors la il ne le voit pas.

Je ne vois pas comment tester un champ avec plusieurs elements pour afficher mon resultat.

mon code pour afficher mes resultats est le suivant :

Code : Tout sélectionner

<?php $categorie = $_POST["Secteur"]; $region = $_POST["region"]; $type_contrat = implode(', ',$_POST['TypeContrats']); $requete = " SELECT id_contrat,id_secteur,region FROM poste,contrat WHERE poste.id_poste=contrat.id_poste"; if($categorie!="") { $requete .= " AND id_secteur='$categorie' "; } if($region!="0") { $requete .= " AND region='$region'"; } if($type_contrat!="") { $requete .= " AND type_contrat IN($type_contrat)"; } $result = mysql_query($requete); $num = mysql_numrows($result); if ($num<>0) { $i=0; while ($resultat = mysql_fetch_array($result)) { echo "<p><a href=\"#\" onclick=\"Ouvrir('consulter.php?id_contrat=".$resultat[0]."&id_secteur=".$resultat[1]."');\">intitulé de l'annonce : </a></p>"; } } else echo "<p><b>Aucune annonce ne correspond à vos critères </b></p>"; echo "<p><a href=\"consultation.php\"> >> Faire une nouvelle recherche</a></p>"; mysql_close($MyCONN);
Merci d'avance
Christophe