Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/06/2006, 00h53   #1
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
Par défaut [Conception] soucis avec mon code de recherche par un ou plusieurs critères

salut à tous!!

j'ai fait un petit moteur de recherche en fonction de certain critère (dimension, echelle et indice), sous form de liste déroulante.

le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
if (isset ( $_POST['dimension']))
{
$dimension = $_POST['dimension'];
} else {"";}
 
if (isset($_POST['echelle']))
{
$echelle = $_POST['echelle'];
}
else {"";}
 
if (isset($_POST['indice']))
{
$indice = $_POST['indice'];
}
else {"";}
 
 
if (isset ($dimension) && isset($echelle))
 {
 
$aff = "SELECT num FROM cn WHERE dimension = '".$dimension."' AND echelle = '".$echelle."'";
   //echo $aff."<br>";
$numaff = mysql_query($aff) or die (mysql_error());
.......
}
 
 
if (isset ($dimension))
 {
  $aff1 = "SELECT num FROM cnn WHERE dimension = '".$dimension."'";
   $numaff1 = mysql_query($aff1) or die (mysql_error());
........
}
 
if (isset ($echelle))
 {
  $aff2 = "SELECT num FROM cn WHERE echelle = '".$echelle."'";
   $numaff2 = mysql_query($aff2) or die (mysql_error());
........
}
 
if (isset($indice))
{
$ind = "SELECT num FROM cn WHERE nom LIKE '%".$indice."'";
$querind = mysql_query($ind) or die (mysql_error());
.........
}

donc j'aimerais faire des recherches en fonction de 1 ou plusieurs critères la condition if (isset ($dimension) && isset($echelle),recherche pour les 2 criteres et aussi les autres condtions if(isset ($dimension)) et if(isset ($echelle))
si je cherche en fonction de l''echelle' j'ai aussi le résultat de 'indice' qui s'affiche alors que je n'ais pas demandé à faire de recherche par indice et vis à vis de mon code je ne vois pas où est le problème

si vous pouvez m'aider..
merci
+++++
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h01   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Pour ta question de multi critère je te dirais de prendre exemple sur la solution donné dans ce sujet : Recherche avec plusieurs critères

Et sinon pour la liste déroulante, tu as une seule ou plusieurs ??

Et pour tes tests je te conseillerais la rapidité lol :
Code :
$dimension = isset($_POST['dimension'])?($_POST['dimension']):("");
ou encore tu fais juste :
Code :
1
2
3
4
if (isset ( $_POST['dimension']))
{
$dimension = $_POST['dimension'];
}
et après si tu dois tester ton dimension tu fais un
qui te dira si ta variable est vide ou si elle contient quelque chose
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h06   #3
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
oui j'ai plusieurs liste déroulante

mais isset et empty c'est pas la meme chose?
enfin isset = savoir si elle existe
mais si elle existe c'est qu'elle est "pleine"

?
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h11   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Donc c'est normal que tu entres dans plusieurs if si tu as plusieurs select dans un même form.

isset ca teste pour voir si elle est envoyé.Et ce peut importe son contenu puisque c'est un champ d'un formulaire.
Citation:
bool empty ( mixed var )
Détermine si une variable contient une valeur non nulle.
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h21   #5
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
et je voulais savoir aussi comment faire pour par exemple :
je prends comme critere la dimension et l'echelle, ca me donne comme résultat ce que je veux et ayant comme dimension ce que jai demandé et comme echelle, ce que j'ai demandé et que ca ne me donne pas le résultat de la dimension choisie seule ni de l'echelle seule
par exemple :
1 ==> dimension 100, echelle 1/50
2 ==> dimension 100, echelle 1/100
3 ==> dimension 100, echelle 1/50

je selectionne dimension 100 et echelle 1/50
donc comme résultats j'ai 1 et 3

mais au lieu de ça j'ai :
1 ET 3 (isset($dimension)) && (isset ($echelle))
1, 2, ET 3 (isset($dimension))
1 ET 3 (isset($echelle))

jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h27   #6
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Hmmmm tu peux la refaire moins vite stp
J'ai pas trop compris
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h45   #7
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
huumm oki

alors il y a 3 criteres :
dimension, echelle, et indice

1 ==> dimension 100, echelle 1/50
2 ==> dimension 100, echelle 1/100
3 ==> dimension 100, echelle 1/50

je fais une recherche pour les 2 criteres en meme temps (dimension et echelle)
je veux rechercher pour dimension 100 ET echelle 1/50
donc j'ai comme résultat de la requete SELECT num_plan FROM plan WHERE dimension = '".$dimension."' AND echelle = '".$echelle."': 1 et 3

mais en plus j'ai le résultat de la requete SELECT num_plan FROM plan WHERE dimension = '".$dimension."' et celui de la requete SELECT num_plan FROM plan WHERE echelle = '".$echelle."'

normal mais comment l'eviter?

car j'aimerais faire une recherche en fonction de 1 critère, 2 ou 3
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 01h48   #8
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
ok je vois tu peux me dire quel est le critère obligatoire ? s'il y en a un
Aussi quand tu choisis pas l'un des trois critères c'est quoi la valeur par défaut ?

Bon j'ai fait très simple lol (sans trop réflechir)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$dimension = isset($_POST['dimension'])?($_POST['dimension']):("");
$echelle = isset($_POST['echelle'])?($_POST['echelle']):("");
$indice = isset($_POST['indice'])?($_POST['indice']):("");
 
if (!empty($dimension) && !empty($echelle))
{
 
$aff = "SELECT num FROM cn WHERE dimension = '".$dimension."' AND echelle = '".$echelle."'";
   //echo $aff."<br>";
$numaff = mysql_query($aff) or die (mysql_error());
.......
}
 
 
if (!empty($dimension))
 {
  $aff1 = "SELECT num FROM cn WHERE dimension = '".$dimension."'";
   $numaff1 = mysql_query($aff1) or die (mysql_error());
........
}
 
if (!empty($echelle))
 {
  $aff2 = "SELECT num FROM cn WHERE echelle = '".$echelle."'";
   $numaff2 = mysql_query($aff2) or die (mysql_error());
........
}
 
if (!empty($indice))
{
$ind = "SELECT num FROM cn WHERE nom LIKE '%".$indice."'";
$querind = mysql_query($ind) or die (mysql_error());
.........
}
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h04   #9
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
Code :
1
2
3
4
5
6
7
8
9
10
 
<tr><td>Dimension</td>
<td>
<SELECT name='dimension' size='1'>
<option value='0' selected>-------------
<OPTION>50*50
<OPTION>100*100
<OPTION>150*150
<OPTION>200*200
</SELECT></td></tr>
c'est ma liste deroulante qui permet de choisir le critere 'dimension'
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h07   #10
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
ah ca change tout alors lol :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$dimension = isset($_POST['dimension'])?($_POST['dimension']):("");
$echelle = isset($_POST['echelle'])?($_POST['echelle']):("");
$indice = isset($_POST['indice'])?($_POST['indice']):("");
 
if ((!empty($dimension)&&($dimension!=0)) && (!empty($echelle) && $echelle!=0))
{
 
$aff = "SELECT num FROM cn WHERE dimension = '".$dimension."' AND echelle = '".$echelle."'";
   //echo $aff."<br>";
$numaff = mysql_query($aff) or die (mysql_error());
.......
}
 
 
if ((!empty($dimension)&&($dimension!=0)))
 {
  $aff1 = "SELECT num FROM cn WHERE dimension = '".$dimension."'";
   $numaff1 = mysql_query($aff1) or die (mysql_error());
........
}
 
if ((!empty($echelle) && $echelle!=0))
 {
  $aff2 = "SELECT num FROM cn WHERE echelle = '".$echelle."'";
   $numaff2 = mysql_query($aff2) or die (mysql_error());
........
}
 
if (!empty($indice))
{
$ind = "SELECT num FROM cn WHERE nom LIKE '%".$indice."'";
$querind = mysql_query($ind) or die (mysql_error());
.........
}
Je suppose qu'ils ont quand même un value les 50*50 et cie
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h13   #11
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
VOICI les résultats que j'obtiens si je choisi comme criteres (en meme temps) dimension 100 et echelle 1/50 et je fais ce que tu me dis

==> requete dimension && echelle (1 et 2 ont la dimension 100 et l'echelle 1/50)
N°1 DIM + ECHE

N°2 DIM + ECHE

==> requete dimension (1 et 2 ont la dimension 100)
N°1 DIM

N°2 DIM

==> requete echelle (1, 2 et 5 ont l'echelle 1/50)
N°1 ECHE

N°2 ECHE

N°5 ECHE


j'ai donc 7 résultats de 3 requetes alors que je devrais en avoir que 2 de la 1ere requete avec dimension && echelle
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h17   #12
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
ok et avec ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
 
$dimension = isset($_POST['dimension'])?($_POST['dimension']):("");
$echelle = isset($_POST['echelle'])?($_POST['echelle']):("");
$indice = isset($_POST['indice'])?($_POST['indice']):("");
 
if ((!empty($dimension)&&($dimension!=0)) && (!empty($echelle) && $echelle!=0))
{
 
$aff = "SELECT num FROM cn WHERE dimension = '".$dimension."' AND echelle = '".$echelle."'";
   //echo $aff."<br>";
$numaff = mysql_query($aff) or die (mysql_error());
.......
}
 
 
if ((!empty($dimension)&&($dimension!=0)) && $dimension == 0)
 {
  $aff1 = "SELECT num FROM cn WHERE dimension = '".$dimension."'";
   $numaff1 = mysql_query($aff1) or die (mysql_error());
........
}
 
if ((!empty($echelle) && $echelle!=0) && $echelle == 0)
 {
  $aff2 = "SELECT num FROM cn WHERE echelle = '".$echelle."'";
   $numaff2 = mysql_query($aff2) or die (mysql_error());
........
}
 
if (!empty($indice))
{
$ind = "SELECT num FROM cn WHERE nom LIKE '%".$indice."'";
$querind = mysql_query($ind) or die (mysql_error());
.........
}
 
 
 
?>
Là ca devrait aller je pense
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h21   #13
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
parce que si je choisis les 2 criteres dimension et echelle, donc dimension et echelle sont renseignés ce qui provoque forcement les requetes SELECT num_plan FROM plan WHERE dimension = '".$dimension."' et SELECT num_plan FROM plan WHERE dimension = '".$echelle."'

:s
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h26   #14
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Tu as testé le dernier code ?
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h28   #15
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
bon, ça marche mais pas vraiment
en faites j'arrive donc à n'avoir que le resultat pour les 2 criteres en meme temps
mais si je cherche avec seulement l'echelle et seulement la dimension ça ne me donne pas de résultats ...

:s
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h33   #16
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
bon on va tester un truc :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
if($dimension != 0 && $echelle != 0)
{
 
}
else if ($dimension != 0 && $echelle == 0)
{
 
}
else if ($echelle != 0 && $dimension == 0)
{
 
}
je te laisse remplir les trous
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h40   #17
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
yes té un boss KEROD
jte fais un bisou pour la peine lol
en tout cas j'avoue que c'est bien pensé !!

merci beaucoup d'avoir donné un peu de ton temps pour m'aider
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h43   #18
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
De rien, mais j'avais remarqué la petite erreur depuis l'autre code donc c'est pas un exploit

Sinon moi je vais retour sur mon C# lol
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2006, 02h59   #19
Invité de passage
 
Inscription : juin 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 14
Points : 1
Points : 1
mais si!! tu es fort c'est tout !!
bon courage avec le C
jolipepage75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h22.


 
 
 
 
Partenaires

Hébergement Web