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/07/2006, 09h18   #1
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
Par défaut [SQL] problème requete multicritère

bonjour, je voudrais créer une requete multicritère pour un site, donc j'ai plusieurs champs dans un formulaire:

3 boites déroulantes et 2 cases à cocher

voici le lien ou vous pouvez voir ce formulaire

http://www.clef-immo.be/accueil.php

je ne sais pas comment m'y prendre pour créer cette requête, je ne vous demande pas de faire la requete à ma place mais un lien ou un tuto parlant de cela.

il faut savoir que les list box peuvent avoir "sans importance".

merci pour votre aide
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 09h21   #2
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Tu commences une requête en mettant

Code :
SELECT champs FROM table WHERE 1
Ensuite tu testes les champs à ajouter (tu regardes si tes combos sont différentes de "Sans importance"), si il faut ajouter une condition tu ajoutes simplement à la requête pour chacune d'entre elles

Et après tu exécutes ta requête et le tour est joué
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 09h27   #3
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
oulala

bon je suis débutant en php alors je ne comprends pas très bien

Citation:
SELECT champs FROM table WHERE 1
là je dois mettre quel champ (tous ou un spécifique) ?
pourquoi WHERE 1 ?

que dois je mettre à la place de 1

Citation:
AND champ = valeur
là c'est le champ qu'on ajoute et à quoi correspond valeur

désolé mais je comprends pas grand chose, peux tu me donner un petit bout de code + complet

merci
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 09h32   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Code :
SELECT champs FROM table WHERE 1
Alors,
champs c'est la liste des champs que tu veux récupérer de ta table.
table c'est le nom de ta table
WHERE 1 c'est juste une astuce pour simplifier grandement la construction de la requête, pas besoin de toucher

Et ça c'est juste les conditions de ta requête
champ c'est le nom du champ de ta table à tester
valeur c'est la valeur du champ, c'est à dire ce qui est sélectionné dans ta liste déroulante

Au final à titre s'exemple bidon ça donne quelque chose dans ce genre :
Code :
SELECT nom FROM villes WHERE 1 AND code_postal = '72100' AND departement = 'Sarthe'

Edit : Tu as déjà eu des explications ici :
http://www.developpez.net/forums/sho...d.php?t=170928

Et ça pourrait aussi être pas mal d'avoir de tes nouvelles sur les topics que tu créés parce que on sait jamais ce que ça donne au final et si tu t'en sors...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 09h51   #5
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
bon suite de mon message

donc j'ai commencé par mettre cela comme code

dans ma requete

Code :
1
2
3
4
 
 
 
 $sql = 'SELECT * FROM biens WHERE type=\"".$_POST['select_type']."\""; LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
je n'ai pas encore ajouté les qutres champs

mais là j'ai déjà une erreur

Parse error: syntax error, unexpected T_STRING in /home.10.2/clefimmo/www/recherche_biens.php on line 205

encore merci
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 09h56   #6
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
A essayer.

Code :
$sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "' LIMIT " . $_GET['debut'] . ", " . $nb_affichage_par_page;
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h07   #7
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
voilà j'ai changé comme tu m'as dit mes mes enregistrements correspondant ne s'affiche pas

voici mon code complet

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
<?php
include( "config_server.php" );
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql="SELECT count(*) FROM biens WHERE type='APPARTEMENT' AND statut='A VENDRE'";
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
    echo 'Aucune réponse trouvée';
}
else {
 
 
    // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
    if (!isset($_GET['debut'])) $_GET['debut'] = 0;
 
    $nb_affichage_par_page = 3;
 
    // Préparation de la requête avec le LIMIT
   $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "' LIMIT " . $_GET['debut'] . ", " . $nb_affichage_par_page;
 
    // on exécute la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
 
    // on va scanner tous les tuples un par un 
 
 
     ?>
 
    <table width="473"  class="tableau-affichage">
    <?php
    while ($data = mysql_fetch_array($req)) {
	?>
	<tr>
    <td><!-- td1 -->
	<table width="466" bgcolor="#E3F9D2" style="border:1px solid #8E8A8A; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; ">
 
    <tr>
    <td>Situation : <?php echo $data[situation]; ?></td>
    <td align="center">Prix : <?php echo $data[prix]; ?> euros</td>
    </tr>
    </table>
    </td><!-- fin td1 -->
    </tr>
    <tr>
    <td><!-- td2 -->
	<table width="466" bgcolor="#FFFFCC" style="border:1px solid #8E8A8A;">
    <tr>
     <td><a href="details_biens.php?id=<?php echo $data[id] ?>"><?php echo '<img src="'.$data['photo1'].'" width="132" height="100" style="border:1px solid #000000; " />' ?></a></td>
    <td><?php echo $data[composition]; ?></td>
    </tr>
    </table>
 
	</td><!-- fin td2 -->
    </tr>
  <?php
    }
    ?>
	</table>
 
	<?php
    // on libère l'espace mémoire alloué pour cette requête 
    mysql_free_result ($req); 
    echo '</table><br />';
 
    // on affiche enfin notre barre
	?>
	<table width="200" border="1" class="navigation">
    <tr>
    <td><?php echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>'; ?></td>
     </tr>
    </table>
    <?php 
 
}
// on libère l'espace mémoire alloué pour cette requête 
mysql_free_result ($resultat); 
// on ferme la connexion à la base de données. 
mysql_close (); 
?>
merci
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h13   #8
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Bon je commence par le début.

Code :
1
2
3
4
5
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
    echo 'Aucune réponse trouvée';
}
Peux-tu expliquer ce que tu veux faire parce que là j'ai l'impression que tu t'égares.
$nb_total ne contient pas le nombre d'enregistrements répondant à la requête (si c'est ce que tu veux), mais un tableau associatif de ces enregistrements.
Et tu réaffectes $nb_total dans la condition de ton if, donc je vois pas l'intérêt...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h15   #9
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
c'est le code pour faire un affichage page par page de mes enregistrements
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h24   #10
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par ph_anrys
c'est le code pour faire un affichage page par page de mes enregistrements
Et par rapport à ce que je ai écrit tu peux éclaircir stp ?
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h27   #11
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
je vais être honête , c'est un script que j'ai trouvé sur le net mais je nc comprends pas bien son code. si ce code est à changer, peux tu m'aider

merci
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h29   #12
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par ph_anrys
je vais être honête , c'est un script que j'ai trouvé sur le net mais je nc comprends pas bien son code. si ce code est à changer, peux tu m'aider

merci
Je m'en doutais, de toute façon à ce que je comprends ce bout de code ne pose pas problème (même si il est vraiment plus qu'étrange, tu l'as vraiment bien testé ?!?), pour la requête quand tu définis $sql place à la ligne juste en dessous un echo $sql; pour voir la requête qui est réellement exécutée.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h32   #13
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
voilà j'ai enlevé l'affichage page par page pour un essai

donc j'ai 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
 
<?php
include( "config_server.php" );
$sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'"; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
?>
 
    <table width="473"  class="tableau-affichage">
    <?php
    while ($data = mysql_fetch_array($req)) {
	?>
	<tr>
    <td><!-- td1 -->
	<table width="466" bgcolor="#E3F9D2" style="border:1px solid #8E8A8A; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; ">
 
    <tr>
    <td>Situation : <?php echo $data[situation]; ?></td>
    <td align="center">Prix : <?php echo $data[prix]; ?> euros</td>
    </tr>
    </table>
    </td><!-- fin td1 -->
    </tr>
    <tr>
    <td><!-- td2 -->
	<table width="466" bgcolor="#FFFFCC" style="border:1px solid #8E8A8A;">
    <tr>
     <td><a href="details_biens.php?id=<?php echo $data[id] ?>"><?php echo '<img src="'.$data['photo1'].'" width="132" height="100" style="border:1px solid #000000; " />' ?></a></td>
    <td><?php echo $data[composition]; ?></td>
    </tr>
    </table>
 
	</td><!-- fin td2 -->
    </tr>
<?php
    }
    ?>
	</table>
je n'ai toujours aucun enregistrement correspondant qui s'affiche

je te donne aussi le code du formulaire

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
50
51
 
<form name="formulaire_recherche" action="recherche_biens.php" method="post">
<table width="200" border="0" class="tableau_recherche">
  <tr>
    <td>Type de bien </td>
  </tr>
  <tr>
    <td><select name="select_type">
	<option>Sans importance</option>
	<option>APPARTEMENTS</option>
	<option>Maisons entre pignons</option>
	<option>Maisons individuelles</option>
	<option>Garages</option>
	<option>Bureaux</option>
	<option>Entrepôts</option>
	<option>Surfaces commerciales</option>
	<option>Terrains</option>
	</select></td>
  </tr>
  <tr>
    <td>Prix</td>
  </tr>
  <tr>
    <td><select name="select_prix">
	<option>Sans importance</option>
	<option>- 100.000 €</option>
	<option>100.000 - 150.000 €</option>
	<option>150.000 - 200.000 €</option>
	<option>+ 200.000 €</option>
	</select></td>
  </tr>
  <tr>
    <td>Commune</td>
  </tr>
  <tr>
    <td><?php print $ld; ?></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><input name="radio_etat" type="radio" value="à louer">A vendre<input name="radio_etat" type="radio" value="à vendre">A louer</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><input name="bouton_valider" type="submit" value="Valider la recherche"></td>
  </tr>
</table>
</form>
je comprends pas l'erreur même sans l'affichage page par page

merci
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h36   #14
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
l'écho me donne cela

Code :
1
2
3
 
 
$sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'";
donc là il me donne bien l'option sélectionné mais n'affiche pas les enregistrements correspondants.
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h37   #15
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Pour le echo fais ça :

Code :
1
2
3
$sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'"; 
echo $sql;
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
Et dis moi le résultat de l'affichage.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h42   #16
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
SELECT * FROM biens WHERE type='Maisons entre pignons'

voici le résultat
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h44   #17
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par ph_anrys
SELECT * FROM biens WHERE type='Maisons entre pignons'

voici le résultat
Et en testant cette requête en la copi-collant dans phpmyadmin tu as bien des résultats en retour ?


Edit : je viens de voir un truc, pour récupérer les valeurs il faut faire $data['situation'] par exemple et pas $data[situation] (ajouter les quotes)
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h51   #18
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
imbécile que je suis , forcémént ca ne peut pas marcher

dans ma list box, j'ai 'appartements' écrit comme ceci

et dans le champ type de ma table 'appartement' est sans S donc forcément il trouve pas d'enregistrements correspondants à ma list box

désolé de t'avoir dérangé pour une bétise pareille

encore merci, je vais mettre résolu

bon maintenant je vais faire ma requête multicritères et afficher les enregistrements page par page
ph_anrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 10h55   #19
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Ok, tiens moi au courant sur ce topic si tu veux et si tu as encore besoin d'un coup de main.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 11h04   #20
Membre régulier
 
Inscription : février 2003
Messages : 272
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 272
Points : 85
Points : 85
bon j'ai un autre problème aussi qui à mon avis des très costaud

donc comme tu peux voir dans le lien suivant

http://www.clef-immo.be/accueil.php

pour ma recherche il ya type, prix, localité...

maintenant pour le prix

j'ai -100000 euros
100000 et 150000 (entre)...

donc ceci est du texte

mon champ prix est de type int

ma question est comment faire la requete de tous les biens qui sont par ex à - de 100000 euros,

j'espère que je me suis bien fait comprendre

encore merci
ph_anrys 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 10h39.


 
 
 
 
Partenaires

Hébergement Web