Filtrage multiple (avec plusieurs input)

Résolu
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009 - 31 oct. 2009 à 17:30
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 - 2 nov. 2009 à 14:57
Bonjour,
j'ai beau chercher je bloque toujours

voici mon code sur 1 recherche (et ça marche)

******************

[newabs.php Revenir à la page des modifications globales]
<form action= "newabs.php" method="post">

">



</form>

<table border="1">
<tr>
<td width=''>NOM</td>
<td width=''>PRENOM</td>
<td width=''>CLASSE</td>
<td width=''>JUSTIFICATION</td>
<td width=''>Justifiée & légitime ?</td>
<td width=''> Quand </td>
<td width =''>de</td>
<td width=''>A</td>
<td width=''>Total</td>
<td width=''>Numéro</td>
</tr>

<?php

if (isset($motclef) )
{
$dateencours=$motclef;
$clause = " WHERE elenom like '$motclef%' or Numero like '$motclef%' or divcod like '$motclef%' ";
}
$orderby = " ORDER BY elenom";
$sql = "SELECT * FROM ges_abs " . $clause . $orderby;
$resultat = mysql_query ($sql);
echo $sql;
echo '';

while ($eleve = mysql_fetch_array ($resultat))

{
et suite du code bien sûr...

******************
le sql donne:
SELECT * FROM ges_abs WHERE elenom like 'vei%' or Numero like 'vei%' or divcod like 'vei%' ORDER BY elenom
et cela m'affiche bien tous les noms qui commencent par vei ok MAIS[b]
j'aimerai aussi avoir les noms qui commencent par adj par ex
J'avais pensé à mettre deux input mais cela ne fonctionne pas...
/b
merci pour l'aide




pasbonte

17 réponses

cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
2 nov. 2009 à 08:34
Merci phpanonyme, sympa cela marche !
Merci d'avoir passé qq minutes sur mon problème !



pasbonte
3
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 oct. 2009 à 20:03
Slt,

humm...pour commencer ton codage est moche présenté tel qu'il est !

humm...
if (isset($motclef) )
{
$dateencours= $motclef;
$clause = " WHERE elenom like '$motclef%' or Numero like '$motclef%' or divcod like '$motclef%' ";
}
$orderby = " ORDER BY elenom";
$sql = "SELECT * FROM ges_abs " . $clause . $orderby;
$resultat = mysql_query ($sql);
echo $sql;
echo '';

Je ne vois pas l'intérêt de couper ici la requete !
$sql = "SELECT * FROM ges_abs WHERE elenom like '$motclef%' or Numero like '$motclef%' or divcod like '$motclef%'";

C'est mieux dans une seule requete, non?

Donc, pour revenir à ta demande...essaye :

$sql = "SELECT * FROM ges_abs WHERE ( elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%')";


Donc ici il te faut crée, ton deuxième input avec pour name ="motclef2".

En espérant t'avoir aider ;) !
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 oct. 2009 à 20:07
Petite correction il te faut englober le WHERE donc dans le code que je t'ai fournit il te faut ajouter des parenthèses après WHERE
(
et avant ORDER BY
)
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
31 oct. 2009 à 21:21
merci pour ce début de réponse mais cela ne va pas...
[newabs.php Revenir à la page des modifications globales]
<form action= "newabs.php" method="post">

">
">



</form>


<table border="1">
<tr>
<td width=''>NOM</td>
<td width=''>PRENOM</td>
<td width=''>CLASSE</td>
<td width=''>JUSTIFICATION</td>
<td width=''>Justifiée & légitime ?</td>
<td width=''> Quand </td>
<td width =''>de</td>
<td width=''>A</td>
<td width=''>Total</td>
<td width=''>Numéro</td>
</tr>

<?php
//SELECT `ges_abs`.`elenom`, `ges_abs`.`elenom` FROM ges_abs WHERE ((`elenom` like 'adj%') OR (`elenom` like 'pru%')) //
// $sql = "SELECT * FROM ges_abs WHERE (elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%')";
if (isset($motclef1) )
{
$dateencours=$motclef1;
// SELECT `ges_abs`.`elenom`, `ges_abs`.`elenom` FROM ges_abs WHERE ((`elenom` like 'adj%') OR (`elenom` like 'pru%'))
// $clause = " WHERE elenom like '$motclef%' or Numero like '$motclef%' or divcod like '$motclef%' ";
// lebon $clause = " WHERE ((`elenom` like '$motclef%') OR (`elenom` like '$motclef1%')) ";
$clause = " WHERE ((elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%'))";
}
$orderby = " ORDER BY elenom";
//$sql = "SELECT * FROM ges_abs WHERE ((elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%'))";
$sql = "SELECT * FROM ges_abs " . $clause . $orderby;
$resultat = mysql_query ($sql);
echo $sql;
echo '';

while ($eleve = mysql_fetch_array ($resultat))

{ suite du code bine sûr...


pasbonte
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 oct. 2009 à 21:42
1. Pour commencer je te recommanderais d'utiliser $_POST[] ou $_GET[] au lieu de $_REQUEST[] pour ton formulaire
http://php.net/manual/fr/reserved.variables.request.php
http://www.php.net/manual/fr/reserved.variables.get.php
http://www.php.net/manual/fr/reserved.variables.post.php


2. Tu n'a pas défini comme je te l'ai dit les input :
">
">
PAS BON!


">
">
ou
">
">
C'est mieux!

3. Soit plus précis, dans ta demande, et argumente ce qui ne va pas
merci pour ce début de réponse mais cela ne va pas...
???

4.Je fais l'effort de mettre propre mes réponses essaie de faire de même, merci !
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
31 oct. 2009 à 21:57
Salut,

Les input peuvent aussi se présenter sous la forme de tableaux, ce qui facilite leur traitement par la suite et ne limite pas leur nombre dans le code. Si on a d'abord 3 champs filtres, on va gérer les 3 variables correspondantes dans le code. Si on veut en rajouter un, on doit rajouter son traitement spécifique dans le code. Avec des tableaux, il n'est pas nécessaire de modifier le code, ou très peu.




Ce qui se gère facilement en PHP puisque $_POST['motclef'] sera un tableau PHP sur lequel il suffit d'itérer.

Concernant la mise au propre des réponses, il existe aussi une balise permettant de faire des liens ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
31 oct. 2009 à 22:11
bonsoir
je sais que mon code est loin d'être bien ficelé mais je ne suis qu'un amateur et pressé en plus...
[abs_index.php Accueil]



[newabs.php Revenir à la page des modifications globales]

<form action= "newabs.php" method="post">
 
"> 
">


</form>


<table border="1">
<tr>
<td width=''>NOM</td>
<td width=''>PRENOM</td>
<td width=''>CLASSE</td>
<td width=''>JUSTIFICATION</td>
<td width=''>Justifiée & légitime ?</td>
<td width=''> Quand </td>	
<td width =''>de</td>
<td width=''>A</td>
<td width=''>Total</td>	  
<td width=''>Numéro</td>
</tr>

<?php 
//SELECT `ges_abs`.`elenom`, `ges_abs`.`elenom` FROM ges_abs WHERE ((`elenom` like 'adj%') OR (`elenom` like 'pru%'))  //
// $sql = "SELECT * FROM ges_abs WHERE (elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%')";
if (isset($motclef1) )
{
$dateencours=$motclef1;
// SELECT `ges_abs`.`elenom`, `ges_abs`.`elenom` FROM ges_abs WHERE ((`elenom` like 'adj%') OR (`elenom` like 'pru%'))
// $clause = " WHERE elenom like '$motclef%' or Numero like '$motclef%' or divcod like '$motclef%' ";
// lebon $clause = " WHERE ((`elenom` like '$motclef%') OR (`elenom` like '$motclef1%')) ";
$clause = " WHERE ((elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%'))";
}
$orderby = " ORDER BY elenom";
//$sql = "SELECT * FROM ges_abs WHERE ((elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%'))";
$sql = "SELECT * FROM ges_abs " . $clause . $orderby;
$resultat = mysql_query ($sql);
echo $sql;
echo '';

J'ai bien fait les corrections mais toujours rien (je m'explique...)
echo $sql; ne donne même plus la requête... je craque...
je pense qu'il faut allez vers le isset mais je ne vois pas...
en ce qui concerne les tableaux alors là désolé, je ne suis pas du niveau...

Concernant la mise au propre des réponses, il existe aussi une balise permettant de faire des liens ;)
je ne comprends pas
merci en tout cas




pasbonte
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
31 oct. 2009 à 22:13
ha oui j'oubliais:
j'ai aussi essayé les get

value="<?php echo $_GET['$motclef1%']; ?


pasbonte
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
31 oct. 2009 à 22:16
je remets le code sans les commentaires:
<html> 



[abs_index.php Accueil]


[newabs.php Revenir à la page des modifications globales]

<form action="newabs.php" method="post">
 
"> 
">

</form>
NOM,
PRENOM,
CLASSE,
JUSTIFICATION,
Justifiée & légitime ?,
Quand,
de,
A,
Total,
Numéro,

<?php

if (isset($motclef1) )
{
$dateencours=$motclef1;
// lebon $clause = \" WHERE ((`elenom` like '$motclef%') OR (`elenom` like '$motclef1%')) \";
$clause = \" WHERE ((elenom like '$motclef1%' AND elenom like '$motclef2%') or (Numero like '$motclef1%' AND Numero like '$motclef2%') or (divcod like '$motclef1%' AND divcod like '$motclef2%'))\";
}
$orderby = \" ORDER BY elenom\";

$sql = \"SELECT * FROM ges_abs \" . $clause . $orderby;
$resultat = mysql_query ($sql);
echo $sql;
echo '';

while ($eleve = mysql_fetch_array ($resultat))

{

// début du code affichage des sanctions
{
$total=$eleve['Heures1bis']-$eleve['Heures1'];
//echo $total;
echo ''.$eleve['id'].'';
echo\"----
".$eleve['elenom'].", \";
echo\"".$eleve['elepre'].", \";
echo\"".$eleve['divcod'].", \";
echo\"".$eleve['JUSTIFICATION'].", \";
echo\"".$eleve['ETATJUSTIFICATION'].", \";
echo\"".$eleve['QUAND1'].", \";
echo\"".$eleve['Heures1'].", \";
echo\"".$eleve['Heures1bis'].", \";
echo\"".$total.", \";
echo\"".$eleve['Numero'].", \";
echo\", \";
$id10=$eleve['elenoet'];
$id11=$eleve['Numero'];
echo \"<TD> MODIFIER\";
}
}

?>

</form>
 


</html>



pasbonte
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 oct. 2009 à 22:16
Les input peuvent aussi se présenter sous la forme de tableaux, ce qui facilite leur traitement par la suite et ne limite pas leur nombre dans le code. Si on a d'abord 3 champs filtres, on va gérer les 3 variables correspondantes dans le code. Si on veut en rajouter un, on doit rajouter son traitement spécifique dans le code. Avec des tableaux, il n'est pas nécessaire de modifier le code, ou très peu.

Oui merci je le sais! seulement je me dis essayons d'aller au plus simple vu comment rien que la requete sql a été découper pour je ne sais quelle raison, d'ailleurs je la connais toujours pas!

sinon c'est vrai qu'on aurai pu faire par exemple:
foreach($_POST as $motclef){...}
Enfin, bon bref
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 oct. 2009 à 22:33
Remplace les AND par OR..

si tu fais echo $sql, ça va te renvoyé seulement $sql en format texte
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
1 nov. 2009 à 13:29
bonjour
même avec or cela ne va pas.
je continue mes recherches



pasbonte
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
1 nov. 2009 à 15:16
[abs_index.php Accueil]



[newabs.php Revenir à la page des modifications globales]

<form action= "newabs.php" method="post">
 
"> 
">


</form>


<table border="1">
<tr>
<td width=''>NOM</td>
<td width=''>PRENOM</td>
<td width=''>CLASSE</td>
<td width=''>JUSTIFICATION</td>
<td width=''>Justifiée & légitime ?</td>
<td width=''> Quand </td>	
<td width =''>de</td>
<td width=''>A</td>
<td width=''>Total</td>	  
<td width=''>Numéro</td>
</tr>

if (isset($_POST['motclef1')) or isset($_POST['motclef2']))
{
$sql = mysql_query("SELECT * FROM ges_abs WHERE ((elenom like '$motclef1%' OR elenom like '$motclef2%') or (Numero like '$motclef1%' OR Numero like '$motclef2%') or (divcod like '$motclef1%' OR divcod like '$motclef2%')) ORDER BY elenom ASC") or die('Erreur de requete '.mysql_error());
$resultat =  mysql_num_rows($sql);

if($resultat>0)
{
while ($eleve = mysql_fetch_array ($sql))
{
...
}
}
else
{
echo "Il n'y a pas de résultat trouvée";
}
}
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
1 nov. 2009 à 15:24
Pouff désolé j'ai tapé sa à la va vite
Corrige :
if (isset($_POST['motclef1'])) or isset($_POST['motclef2']))
{

$sql = mysql_query("SELECT * FROM ges_abs WHERE ((elenom like '".$_POST['motclef1']."%' OR elenom like '".$_POST['motclef2']."%') or (Numero like '".$_POST['motclef1']."%' OR Numero like '".$_POST['motclef2']."%') or (divcod like '".$_POST['motclef1']."%' OR divcod like '".$_POST['motclef1']."%')) ORDER BY elenom ASC") or die('Erreur de requete '.mysql_error());
$resultat =  mysql_num_rows($sql);

if($resultat>0)
{
while ($eleve = mysql_fetch_array ($sql))
{
...
}
}
else
{
echo "Il n'y a pas de résultat trouvée";
}
}
0
cs_pasbonte Messages postés 18 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 novembre 2009
1 nov. 2009 à 17:00
MERCI
j'ai simplifié le code..
mais maintenant autre problème: si j'entre une seule condition (motclef1)=adj mais motclef2 est vide) il m'affiche tout...une idée pour contourner la chose ?
J'avance avec votre aide merci phpanonyme !
avec un petit changement ça marche:
<html> 


[abs_index.php Accueil]

[newabs.php Revenir à la page des modifications globales]
<form action="newabs.php" method="post">
 
"> 
">


</form>

NOM,
PRENOM,

<?php

if ((isset($_POST['motclef1'])) or isset($_POST['motclef2']))
{
$sql = mysql_query(\"SELECT * FROM ges_abs WHERE ((elenom like '\".$_POST['motclef1'].\"%' OR elenom like '\".$_POST['motclef2'].\"%')
or (Numero like '\".$_POST['motclef1'].\"%' OR Numero like '\".$_POST['motclef2'].\"%')
or (divcod like '\".$_POST['motclef1'].\"%' OR divcod like '\".$_POST['motclef1'].\"%')) ORDER BY elenom ASC\")
or die('Erreur de requete '.mysql_error());

$resultat =  mysql_num_rows($sql);
//echo $sql;
if($resultat>2)
{
while ($eleve = mysql_fetch_array ($sql))
{

echo ''.$eleve['id'].'';
echo\"----
".$eleve['elenom'].", \";
echo\"".$eleve['elepre'].", \";
echo\", \";
$id10=$eleve['elenoet'];
$id11=$eleve['Numero'];

echo \"<TD> MODIFIER\";
}
}
}
?>
</form>
 

</html>


pasbonte
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
1 nov. 2009 à 17:40
<html> 


[abs_index.php Accueil]

[newabs.php Revenir à la page des modifications globales]

1) Rechercher un élève par le nom (ou tapez les 3 premières lettres), par le numéro de l'absence ou par la classe OU cliquez sur ce bouton pour avoir TOUS les élèves
'
<form action= "newabs.php" method="post">
 
"> 
">



</form>

<table border="1">
<tr>
<td width=''>NOM</td>
<td width=''>PRENOM</td>
</tr>


<?php 


if($_POST['submit']=="rechercher")
{
$sql1= "SELECT * FROM ges_abs WHERE (elenom like '".$_POST['motclef1']."%' or Numero like '".$_POST['motclef1']."%' or divcod like '".$_POST['motclef1']."%') ORDER BY elenom ASC"; // Si motclef1 uniquement

$sql2= "SELECT * FROM ges_abs WHERE (elenom like '".$_POST['motclef2']."%' or Numero like '".$_POST['motclef2']."%' or divcod like '".$_POST['motclef2']."%') ORDER BY elenom ASC"; // Si motclef uniquement

$sql3= "SELECT * FROM ges_abs WHERE ((elenom like '".$_POST['motclef1']."%' OR elenom like '".$_POST['motclef2']."%') 
or (Numero like '".$_POST['motclef1']."%' OR Numero like '".$_POST['motclef2']."%')
or (divcod like '".$_POST['motclef1']."%' OR divcod like '".$_POST['motclef2']."%')) ORDER BY elenom ASC"; // Si motclef1 et motclef2




// Ici on va récupérer la requete selon le cas
if ((isset($_POST['motclef1'])) && empty($_POST['motclef2'])) // Si motclef1 uniquement
{
$sql = mysql_query($sql1) or die('Erreur de requete '.mysql_error());
}
elseif((empty($_POST['motclef1'])) && isset($_POST['motclef2']))// Si motclef uniquement
{
$sql = mysql_query($sql2) or die('Erreur de requete '.mysql_error());
}
else // Si motclef1 et motclef2
{
$sql = mysql_query($sql3) or die('Erreur de requete '.mysql_error());
}

// Traitement
$resultat =  mysql_num_rows($sql);
//echo $sql;
if($resultat>2)
   {
while ($eleve = mysql_fetch_array ($sql))
  		{ 
  
echo ''.$eleve['id'].''; 
echo"<tr><td> ".$eleve['elenom']." </td>";
echo"<td>".$eleve['elepre']."</td>";
echo"<td></td>";
$id10 =$eleve['elenoet'];
$id11=$eleve['Numero']; 

echo "<TD> MODIFIER";
    	} 	
    }                            
}
else
{
echo "Veuillez enter un ou plusieurs mots-clefs";
}
?> 
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
2 nov. 2009 à 14:57
OK, pas de problème
0
Rejoignez-nous