Filtrage multiple (avec plusieurs input) [Résolu]

Signaler
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009
-
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
-
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

Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

Merci phpanonyme, sympa cela marche !
Merci d'avoir passé qq minutes sur mon problème !



pasbonte
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
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 ;) !
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
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
)
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

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
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
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 !
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
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à ;)
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

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
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

ha oui j'oubliais:
j'ai aussi essayé les get

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


pasbonte
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

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
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
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
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
Remplace les AND par OR..

si tu fais echo $sql, ça va te renvoyé seulement $sql en format texte
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

bonjour
même avec or cela ne va pas.
je continue mes recherches



pasbonte
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
[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";
}
}
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
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";
}
}
Messages postés
18
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
22 novembre 2009

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
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
<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";
}
?> 
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
OK, pas de problème