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 17/03/2008, 14h54   #1
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Par défaut [SQL] Recherche de données

Bonjour,

J'ai un formulaire de recherche de données dans une base.
J'aimerais que si une données de recherche n'est pas remplies, on vois toutes les valeurs de cette option non affectés.
J'ai mis un if:

Code :
1
2
3
4
5
6
if($AlimTag == NULL)
{
    $AlimTag = ???;
}
 
echo $AlimTag;
Mais je ne sais pas quoi mettre à la place de ??? pour que dans ma requètes SQL il sorte toutes les valeurs de ma jointure:

Code :
1
2
3
4
5
 
SELECT *
FROM tag 
INNER JOIN fabricant ON tag.IDfab=fabricant.IDfabricant
WHERE tag.Alim='$AlimTag'
(Dans ma table tag, dans le champ Alim j'ai sois Active sois Passive, et je veut pouvoir chercher les 2 cas si je ne sélectionne aucun des 2 cas dans mon formulaire)
Merci d'avance
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h21   #2
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 68
Points : 33
Points : 33
Salut pourrai tu expliquer d'une autre manière ce que tu souhaite faire afin que je puisse peut être t'aider parce que je n'ai pas très bien compris.
Merci.
biddal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h33   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Tu peux construire ta requête de telle sorte que si $AlimTag n'est pas renseignée, il n'ya ait pas de conditions
Code :
1
2
3
4
5
6
7
8
9
$requete = "SELECT * FROM tag 
INNER JOIN fabricant ON tag.IDfab=fabricant.IDfabricant ";
if($AlimTag != NULL)
{
    $requete .= " WHERE tag.Alim='$AlimTag' ";
}
echo $requete ;
 
$result = mysql_query($requete) or die (mysql_error()) ;
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h16   #4
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Merci Celira pour ton aide!
J'ai essayer ton code et ça marche presque!!
C'était un peu plus compliqué que ça en fait: J'ai plusieurs condition pour ma jointure, d'après ton code ca ressemblerai à ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$requete = "  SELECT tag.NomTag, fabricant.Nomfabricant, tag.Alim, taillemem.Taille, typemem.Type, frequence.Freq, tag.Temperature, tag.Fonction, tag.IndiceProtection, tag.Forme, tag.RTLS, tag.Dimension, application.app
            FROM tag 
            INNER JOIN fabricant ON tag.IDfab=fabricant.IDfabricant
            INNER JOIN frequence ON tag.IDfreq=frequence.IDfrequence
            INNER JOIN application ON tag.IDapp=application.IDapplication
            INNER JOIN taillemem ON taillemem.IDtailleMemoire=tag.IDtailleMem
            INNER JOIN typemem ON typemem.IDtypeMemoire=tag.IDtypeMem
        "; 
if($_POST[AlimTag] != NULL) { $requete .= " WHERE tag.Alim='$_POST[AlimTag]' "; }
if($_POST[IDfrequence] != NULL) { $requete .= " WHERE tag.IDfreq='$_POST[IDfrequence]' "; }
if($_POST[rtls] != NULL) { $requete .= " WHERE tag.rtls='$_POST[rtls]' "; }
if($_POST[IDapplication] != NULL) { $requete .= " WHERE application.IDapplication='$_POST[IDapplication]' "; }
 
echo $requete ;
 
$result = mysql_query($requete) or die (mysql_error()) ;
Mais lorsque les 4 test sont validées je ne retrouve pas les valeurs que j'avais sans les tests (avec juste 1 test, tel le code que tu as écris ça fonctionne correctement!)

Merci encore
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h27   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Bon, ce n'est pas forcément optimal, mais moi dans ces cas-là j'utilise une variable intermédiaire :
Code :
1
2
3
4
5
$operateur = ' WHERE ';
if($_POST[AlimTag] != NULL) { 
  $requete .= ' $operateur tag.Alim='".$_POST['AlimTag'].'' "; 
  $operateur = ' AND ';
}
Comme ça $operateur vaut where à la 1ere condition validée et and pour les autres.
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h38   #6
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
J'y suis presque, c'est effectivement un problème avec l'opérateur AND.
voilà ce que j'ai écris:
Code :
1
2
3
4
5
6
7
8
$operateur = ' WHERE ';
 
if($_POST[AlimTag] != NULL) { $requete .= " $operateur tag.Alim='$_POST[AlimTag]' "; $operateur = ' AND '; }
if($_POST[IDfrequence] != NULL) { $requete .= " $operateur tag.IDfreq='$_POST[IDfrequence]' ";  $operateur = ' AND ';}
if($_POST[rtls] != NULL) { $requete .= " $operateur tag.rtls='$_POST[rtls]' ";  $operateur = ' AND ';}
if($_POST[IDapplication] != NULL) { $requete .= "$operateur application.IDapplication='$_POST[IDapplication]' ";  $operateur = ' AND ';}
 
echo $requete ;
Ça à l'air juste tout ça mais ca ne fnctionne pas encore
Tu vois une erreur dans ce code??
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h44   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Tu peux me donner le message d'erreur (si il y en a un) ou au moins l'affichage de la requête ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h50   #8
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Oui bien sur:
La requète générée est:
Code :
1
2
3
4
5
6
7
SELECT tag.NomTag, fabricant.Nomfabricant, tag.Alim, taillemem.Taille, typemem.Type, frequence.Freq, tag.Temperature, tag.Fonction, tag.IndiceProtection, tag.Forme, tag.RTLS, tag.Dimension, application.app FROM tag 
INNER JOIN fabricant ON tag.IDfab=fabricant.IDfabricant 
INNER JOIN frequence ON tag.IDfreq=frequence.IDfrequence 
INNER JOIN application ON tag.IDapp=application.IDapplication 
INNER JOIN taillemem ON taillemem.IDtailleMemoire=tag.IDtailleMem 
INNER JOIN typemem ON typemem.IDtypeMemoire=tag.IDtypeMem 
WHERE tag.IDfreq='0' AND application.IDapplication='0'
En fait mes champs AlimTag, Fonction et rtls sont des types radio (bouton à cocher je sais plus trop quoi) apparement l'erreur vient de là!

(Rappel de mon code php:
Code :
1
2
3
4
5
6
7
8
9
$operateur = ' WHERE ';
 
if($_POST[AlimTag] != NULL) { $requete .= " $operateur tag.Alim='$_POST[AlimTag]' "; $operateur = ' AND '; } 
if($_POST[IDfrequence] != NULL) { $requete .= " $operateur tag.IDfreq='$_POST[IDfrequence]' ";  $operateur = ' AND ';} 
if($_POST[fonction] != NULL) { $requete .= " $operateur tag.Fonction='$_POST[Fonction]' ";  $operateur = ' AND ';}
if($_POST[rtls] != NULL) { $requete .= " $operateur tag.RTLS='$_POST[rtls]' ";  $operateur = ' AND ';} 
if($_POST[IDapplication] != NULL) { $requete .= "$operateur application.IDapplication='$_POST[IDapplication]' ";  $operateur = ' AND ';}
 
echo $requete ;
)
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h58   #9
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
La valeur NULL n'est que pour les champs de type INT peut etre ?
Car mes autres champs sont de types text !
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h59   #10
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Citation:
WHERE tag.IDfreq='0' AND application.IDapplication='0'
Tes IDfreq et autres, ce sont des nombres ou des chaines ? Si ce sont des nombres, il faudrait peut-être virer les quotes '.
As-tu une erreur à l'exécution ? Tu peux utiliser or die(mysql_error()) pour la récupérer.

Et sinon, le problème vient peut-être du formulaire...
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 17h03   #11
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Oui justement mes champs AlimTag, Fonction et rtls sont de type 'text' tandis que IDfreq et IDapplication sont des INT!

Ou faut il que j'enlève les simples quotes??
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 17h08   #12
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Oui, essayes de virer les simples quotes pour IDfreq et IDapplication. En règle générale, on met les chaines entre quotes et pas les nombres (en tout cas, moi je fais comme ça)
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 17h16   #13
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Bah j'ai enlever les quotes autour de IDfreq et IDapplication, et ça n'as rien changés. J'ai enlever les quotes partout et ça ne changes rien non plus

Ok j'ai compris un truc: mes champs IDfreq et IDapplication sont à 0 lorsque je ne sélectionne rien, car ces valeurs proviennent d'un menu déroulant dont les valeurs proviennent d'une table mysql ...
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 21h20   #14
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Peut-être qu'il faut effectivement se pencher sur le formulaire...
Si IDfreq et IDapplication sont à 0 lorsque tu ne sélectionnes rien, alors la condition à tester c'est $_POST[IDfrequence] != 0
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 09h05   #15
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
Coucou,

Oui ça j'y ai penser hier soir avant de rentrer chez moi,
Maintenant qd je ne sélectionne rien dans mon formulaire, il y a dans mon tableau tout les 'tag', logique! Si je ne restreint pas ma recherche je trouve tout...
Mais lorsque je coche 'Active' dans 'Alim', j'ai le message d'erreur suuivant:
Code :
1
2
WHERE  tag.Alim=Active  AND  application.IDapplication=0 Unknown column 'Active' in 'where clause' 


J'ai encore vérifier mon formulaire, je ne pense pas qu'il sois faux:

Code :
1
2
3
4
5
6
7
8
9
10
11
<form method="post" action="AffCaracTag.php">
 
<pre> <br/>
Alimentation du tag   : <input type="radio" name="AlimTag" value="Active" /> Active  <input type="radio" name="AlimTag" value="Passive"/> Passive <br/>
Frequence             : <?php MenuDeroulant(frequence,IDfrequence,Freq) ?> <br/>
Fonction              : <input type="radio" name="Fonction" value="Lecture" /> Lecture    <input type="radio" name="Fonction" value="Lecture/Ecriture"/> Lecture/Ecriture <br/>
RTLS                  : <input type="radio" name="rtls" value="oui" /> Oui     <input type="radio" name="rtls" value="non" /> Non <br/>
Domaine d'application : <?php MenuDeroulant(Application,IDapplication,app) ?> <br/>
</pre>
 
<br/><input type="submit" value="Rechercher par caractéristiques"/></form> <br/>
Mikke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 09h42   #16
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2008
Messages : 87
Points : 13
Points : 13
C'est bon ca marche

Les champs text doivent être "quoter", c'est pour ca qu'il y avais le message d'erreur!!

Merci beaucoup Célira, tu m'as bien aider

A+
Mikke 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 09h04.


 
 
 
 
Partenaires

Hébergement Web