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 04/07/2006, 11h57   #1
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Par défaut [SQL] Problème requête SELECT

J'ai créé un formulaire GET de recherche contenant 6 champs (listes déroulantes). Quand l'utilisateur clique sur Submit je le renvoie sur la page resultats.php?champ1=""&champ2=""....
Pou l'instant j'utilise la requete suivante pour afficher les resultats

Code :
1
2
3
4
5
 
 
SELECT champ1,champ2,champ3,champ4,champ5,champ5 FROM 
matable WHERE champ1 LIKE '$champ1' AND champ2 LIKE '$champ2' 
AND champ3 LIKE '$champ3' AND..... ORDER BY date DESC";
seulement avec AND ca affiche si tous les champs correspondent donc dans mon cas ca n'affiche rien quand je selectionne un seul champ.

J'ai essaye avec OR et la ca affiche les resultats si l'un des champs correspond.

Moi je veux que ca affiche uniquement les resultats qui correspondent à tous les champs mais je veux pouvoir selectionner le nombre de champ que je veux. POur l'instant si je selectionne pas tous les champs rien ne s'affiche.

Comment je peux faire?

N'hesitez pas à me dire si vous ne comprenez pas c pas tres bien explique

Merci d'avance

Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 12h01   #2
Membre du Club
 
Inscription : mai 2005
Messages : 172
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 172
Points : 41
Points : 41
tu as testé ta requête sur phpMyAdmin?
grumly22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 12h03   #3
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
J'ai pas compris grand chose mais je crois que tu vas devoir construire ta requête dynamiquement, c'est à dire que tu devras faire une boucle pour ajouter les conditions de ton WHERE.
__________________
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 04/07/2006, 12h05   #4
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
la requete fonctionne bien car si je selectionne TOUS LES criteres ca affiche les bons resultats seulement je voudrais affciher des resultats meme si 1, 2, 3 etc criteres sont selectionnes.
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 12h08   #5
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Citation:
Envoyé par JWhite
J'ai pas compris grand chose mais je crois que tu vas devoir construire ta requête dynamiquement, c'est à dire que tu devras faire une boucle pour ajouter les conditions de ton WHERE.
je sais pas faire ca. Tu as un exemple si ca te derange pas. Merci

De plus j'utilise la méthode GET mais je suis pas sure que ca soit la plus adaptée qu'en penses tu?

Dolf
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 12h16   #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
C'est juste une question de réflexion, je te montre le principe, le code est pas testé il faut peut-être adapter.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$bool = 0;
$req  = "SELECT champ1,champ2,champ3,champ4,champ5,champ5 FROM matable WHERE ";
if($champs1 != "")
{
  $req .= " champ1 LIKE '$champ1'";
  $bool = 1;
}
if($champs2 != "")
{
   if($bool == 1)
      $req .= " AND";
    $req .= " champ2 LIKE '$champ1'";
}
$bool permet de gérer les AND.

C'est juste le principe, c'est à améliorer, d'ailleurs existe-t-il des règles spécifiques sur tes champs (par exemple le champ1 est forcément rempli, le champ5 ne peut être rempli que si les champs 1 à 4 sont remplis, ...).
__________________
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 04/07/2006, 12h42   #7
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Merci bien
et pour la methode utilisée (GET) est ce la plus appropriée???
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 13h43   #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
Citation:
Envoyé par dolf13
Merci bien
et pour la methode utilisée (GET) est ce la plus appropriée???
Oui ça change pas grand chose avec le POST (à part que les données apparaissent dans la barre d'adresse)... Il y a quelques subtilités mais bon je pense pas que ton application soit ultrasensible.
__________________
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 04/07/2006, 14h03   #9
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
ok
par contre je ne vois pas pourquoi dans l'url il y a le champ submit=afficher+les+resultats
c normal???
est ce qu'il faut l'enlever? si oui comment?
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 14h13   #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 dolf13
ok
par contre je ne vois pas pourquoi dans l'url il y a le champ submit=afficher+les+resultats
c normal???
est ce qu'il faut l'enlever? si oui comment?
Tu as dû mettre un attribut NAME à ton bouton SUBMIT, ça fait quoi en l'enlevant ?
__________________
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 04/07/2006, 14h54   #11
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
Voici le code de mon bouton ubmit

<input type="submit" name="submit" value="Afficher les résultats" style="width: 180px">
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 15h03   #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
C'est bien ce que je pensais, et donc en l'enlevant comme demandé ça donne quoi ?!?

Code :
<input type="submit" value="Afficher les résultats" style="width: 180px">
__________________
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 04/07/2006, 15h07   #13
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
c bon il n'y a plus le champ dans l'adresse
Encore merci
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 15h08   #14
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 dolf13
c bon il n'y a plus le champ dans l'adresse
Encore merci
Cool. Un chti alors...

Bon courage pour la suite.
__________________
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 04/07/2006, 15h13   #15
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
Juste pour te dire comme ça, c'est que GET par rapport à POST est un peu moins "sécuritaire" dans le sens ou l'utilisateur peut mettre les parametres qu'il veut. Sur un post, tu peux mettre des input de type "hidden" qui vont passer des valeurs sans que l'utilisateur puisse les modifier !
Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 15h19   #16
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
Oui c'est d'ailleurs bien pour ça que j'ai parlé de sensibilité de l'application...
__________________
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 04/07/2006, 15h19   #17
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
oui ca je le savais. Au depart je voulais utiliser POST mais je ne suis pas arrivé à récupérer les valeurs quand j'ai plusieurs pages de résultats. Je sais pas encore si je vais y arriver avec GET je suis en train de le faire....
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 15h20   #18
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 dolf13
oui ca je le savais. Au depart je voulais utiliser POST mais je ne suis pas arrivé à récupérer les valeurs quand j'ai plusieurs pages de résultats. Je sais pas encore si je vais y arriver avec GET je suis en train de le faire....
C'est pas en mettant GET à la place de POST que ça va résoudre le problème, l'utilisation étant la même.
Si tu veux propager des variables à plusieurs pages, il faut passer par des variables de session.
__________________
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 04/07/2006, 15h25   #19
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
ah m.... je sens que ca va me prendre la tête à nouveau
dolf13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 16h33   #20
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 175
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 175
Points : 30
Points : 30
J'ai ajouté le code suivant pour la pagination et j'ai seulement un petit problème:

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
 
 
if(!isset($_GET['page'])){
    $page = 1;
} else {
    $page = $_GET['page'];
}
 
$max_results = 2;
 
$from = (($page * $max_results) - $max_results); 
 
$total_pages = ceil($result / $max_results);
 
echo "<center><p><b>";
 
if($page > 1){
    $prev = ($page - 1);
    echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev&champ1=$champ1&champ2=$champ2\">Précédente</a> ";
}
 
for($i = 1; $i <= $total_pages; $i++){
    if(($page) == $i){
        echo "$i ";
        } else {
            echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i&champ1=$champ1&champ2=$champ2\">$i</a> ";
    }
}
 
 
if($page < $total_pages){
    $next = ($page + 1);
    echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next&&champ1=$champ1&champ2=$champ2\">Suivante</a>";
}
echo "</b></p></center>";
 
?>

J'ai bien les résultats qui s'affichent seulement ca n'affiche pas le bon nombre de résultats par page. Ca ne prend pas en compte la variable $max_results et donc tous les resultats sont sur une seule page. Ca affiche aussi les liens vers les autres pages et sur celles ci se sont les memes resultats qu'en page 1. Une idée pour résoudre ce probleme SVP
dolf13 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 13h44.


 
 
 
 
Partenaires

Hébergement Web