case a cocher et multi critere...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : case a cocher et multi critere...

par fersayn » 27 mars 2006, 16:43

ca y est, ca marche!!!!

:lol:

par Truc » 27 mars 2006, 15:09

parce qu'il manque les apostrophes (code de mon post précédent), là la requte recherche un champ nomé 'HOPITAL' et non une chaine de caratères.

par fersayn » 27 mars 2006, 15:07

j'ai testé dans phpadmin:

et voici, ce qu'il me retourne à la rquete:
SELECT * FROM recherchehopitaux WHERE 1=1  AND dept LIKE '01'  AND type IN (HOPITAL)
a échoué : Unknown column 'HOPITAL' in 'where clause'

on dirait qu'il le comprend a l'envers.

par Truc » 27 mars 2006, 14:59

as tu testé cette requete dans phpmyadmin, par exemple ?

Dans la requete il y a ceci " type IN (HOPITAL)" ce qui signifi que le champ nomé "type" doit contenir "HOPITAL" pour que la requête retourne un résultat.

tu peux aussi avoir ceci (en fonction du nombre de cases cochées):
AND type IN ('HOPITAL','truc','machin')
dans ce cas la requête retourne toutes les données dont le champ "type" contient soit HOPITAL,truc ou machin la construction est donc bonne.

Par contre il manque des apostrophes pour préciser une chaine de caractères.
$sql .= " AND type IN ('";
    $sql .= implode("','",$tabcheckbox);
    $sql .= "')"; 

par Invité » 27 mars 2006, 14:48

tout d'abord merci pour ton aide...

voici la requete généré:
SELECT * FROM recherchehopitaux WHERE 1=1 AND dept LIKE '01' AND type IN (HOPITAL)
ce que je veux obtenir c: AND (HOPITAL) IN type

par Truc » 27 mars 2006, 14:36

tu exécutes le contenu de la varaible $SQL:
$SQL = "SELECT * FROM recherche WHERE 1=1 "
donc séléction sur toute la base, au lieu de $sql (en minuscule)

par Invité » 27 mars 2006, 14:32

Je ne comprends plus. je suis perdu...

par Truc » 27 mars 2006, 14:07

attention aux erreurs d'inattention :wink:
mysql_query($SQL);
et
$sql .= " AND nom LIKE '%".$nom."%' ";

par Invité » 27 mars 2006, 13:13

j'y suis presque!!

la requete est bonne par contre, il me sort tout les résultas de la base??

par Truc » 27 mars 2006, 13:05

il manque un ";" à la ligne juste au dessus :wink:

par Invité » 27 mars 2006, 13:01

voici ce que j'ai fait par contre il y une erreur:
<?php 
  include('connexion.php'); 
// vérifions que la variable a été transmise 
$tabcheckbox = (isset($_POST['checkbox'])) ? $_POST['checkbox'] : null; 
$nom         = (isset($_POST['name']))    ? $_POST['name']     : null; 
$dept        = (isset($_POST['dept']))    ? $_POST['dept']     : null; 
$SQL = "SELECT * FROM recherche WHERE 1=1 " 
if (!empty($nom)) 
{ 
    $sql .= " AND nom LIKE '%".$nom."%' "; 
} 

if (!empty($dept)) 
{ 
    $sql .= " AND dept LIKE '%".$dept."%' "; 
} 

if (!empty($tabcheckbox)) 
{ 
    $sql .= " AND type IN ("; 
    $sql .= implode(",",$tabcheckbox); 
    $sql .= ")"; 
} 

echo $sql; 

echo $date; 
echo "<BR><BR><BR>\n"; 

echo "<BR><BR>\n"; 

$result = mysql_query($SQL) or die("La requête <BR><PRE>$SQL</PRE>a échoué : ".mysql_error()); 

//j'ai defini une variable $i pour afficher 5 enregistremnt par ligne 
echo "<TABLE border =\"0\" width=\"100%\" CELLPADDING=\"0\" cellspacing=\"0\">"; 

//initialiser la variable $i a 0 
$i=0; 
while($row = mysql_fetch_row($result)) 
{ 
    if ($i==0) 
     { 
       echo "<TR>"; 
     } 

   //on incremente la variable 
  $i=$i+1; 

   //$row[numero du champ a afficher] 
   echo " <br>$row[1] <br><br>$row[2]<br><br> $row[3]<br><br> $row[4]<br><br> $row[5]<br><br> $row[6]<br><br> <i><b><u>Produits :</i></b></u>$row[7]</td><br><br>"; 
  if ($i==5) 
  { 
  echo "</TR>"; 
  $i=0; 
  } 
} 
echo"</table>";    
?> 
et il me dit:

parse error, unexpected T_IF in /var/www/data/lri/G/M/L/A/GMLA58RP/docs/search.php on line 8

pour cette ligne:
if (!empty($nom)) 

merci

par Truc » 26 mars 2006, 23:48

sur la bonne voie oui...
proposition:
<?php
// vérifions que la variable a été transmise
$tabcheckbox = (isset($_POST['checkbox'])) ? $_POST['checkbox'] : null; 
$nom         = (isset($_POST['name']))    ? $_POST['name']     : null; 
$dept        = (isset($_POST['dept']))    ? $_POST['dept']     : null; 


$SQL = "SELECT * FROM recherche WHERE 1=1 "

if (!empty($nom)) 
{
	$sql .= " AND nom LIKE '%".$nom."%' ";
}

if (!empty($dept)) 
{
	$sql .= " AND dept LIKE '%".$dept."%' ";
}

if (!empty($tabcheckbox)) 
{
	$sql .= " AND type IN (";
	$sql .= implode(",",$tabcheckbox);
	$sql .= ")";
}

echo $sql;
la dernière ligne sert de test d'affichage pour tester la requete générée dans phpmyadmin par exemple.

par fersayn » 26 mars 2006, 23:26

suis-je sur la bonne voix??

voici mon php:

<?php 
// vérifions que la variable a été transmise 
$tabcheckbox = (isset($_POST['checkbox']))?$_POST['checkbox']:null; 

echo "Voici les langages que vous avez choisi :<br>"; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabcheckbox)) { 
    foreach($tabcheckbox as $cle => $valeur) { 
//ici je crée un variable appellé $max qui récupere la valeur de la case a coché
       $max=$cle.' : '.$valeur.'<br>'; 
    } 
//maintenant que j'ai ma valeur de case a coché je construit une requete sql avec ma valeur et mes 2 autres champs du formulaires

if ($_POST[name]) { 
     $SQL = "SELECT * FROM recherche WHERE nom LIKE '%". $_POST[name] ."%' and type ='$max'"; 
    $h = $_POST[name]; 
} 
else { 
        $SQL = "SELECT * FROM recherche WHERE dept LIKE '%". $_POST[dept] ."%' and type ='$max'"; 
    $k = $_POST[dept]; 
} 

echo $date; 

echo "<BR><BR><BR>\n"; 

echo "Vous recherchez :  <EM>$h</EM>.\n"; 
echo "Vous recherchez :  <EM>$k</EM>.\n"; 

echo "<BR><BR>\n"; 

par Truc » 26 mars 2006, 19:03

avec le tuto sur la récupération des cases a cocher et CELUI-CI pour les requetes dynamiques tu devrais arriver à tes fins :wink:

Fait quelques essais, si tu n'y arrives pas reviens nous voir avec ce que tu auras testé

par Invité » 26 mars 2006, 18:34

ok, voila pour le formulaire:

Code : Tout sélectionner

<BODY> <CENTER> rechercher un &eacute;tablissement: <form name="form1" method="post" action="search.php"> <table width="75%" border="0"> <tr> <td width="47%" valign="top"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AA"> AA </font></td> <td width="53%" valign="middle"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AB"> AB</font></td> </tr> <tr> <td width="47%" valign="top"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AC"> AC</font></td> <td width="53%" valign="middle"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AD"> AD</font></td> </tr> <tr> <td width="47%" height="23" valign="top"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AE"> AE</font></td> <td width="53%" height="23" valign="middle"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AF"> AF</font></td> </tr> <tr> <td width="47%" valign="top"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AG"> AI</font></td> <td width="53%" valign="middle"> <font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AH"> AJ</font></td> </tr> <tr> <td width="47%" valign="top" height="2"><font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AI"> AK </font></td> <td width="53%" valign="middle" height="2"><font face="Arial, Helvetica, sans-serif" size="1"> <input type="checkbox" name="checkbox[]" value="AJ"> AL</font></td> </tr> </table> <p>Entrer un nom: <input type="text" name="name"> </p> <p> Entrer un d&eacute;partement: <input type="text" name="dept"> <input type="submit" value="Rechercher" name="submit2"> </p> </FORM> </CENTER> </BODY>
et voici pour le script, comment lui dire:

losque qu'une case est coché et un dept remplie:

la requete doit dire:

par ex : recherche dans la table tous les établissements de type'A' dans le 01
'la valeur de la case coché'

je ne sais pas comment concaténé ma requete.

j'avais pensé:
if ([checkbox==checked]){ 
$SQL="SELECT * FROM recherche WHERE type ='HOPITAL' and nom LIKE '%". $_POST[name] ."%' or dept LIKE '%". $_POST[dept] ."%'"; 
merci pour votre aide...