Accueil > Forum > > > > requet de recherche
requet de recherche
lundi 9 août 2010 à 16:50:46 |
requet de recherche

kabi14
|
bonjoour
je veux savoire votre avis apropos de:
la realisation d une requet qui fait une multi recherche cest a dire j ai quatre champ trois de type textbox et une liste. lorsque un client veut lancer une recherche il doit avoir le droit de chercher par martricule et par service et periode .il peux ausi lancer une recherche par matricule selement c pour donnèe l exemple donc
marequet doit etre sous la forme
Code PHP :
<?php if (isset($_POST['voyer']))
{
if (isset($_POST['radio']))
{
$log=$_POST['textfield'];
$L=$_POST['text'];
$id=mysql_connect('localhost','root','');
mysql_select_db('ts',$id);
// lancement de la requete[^^!2][^^!2]
$sql = "SELECT s.libelle,a.Matricule,a.Nom,a.Prenom,d.Type,d.DateDemende,d.user,d.user FROM agents as a,demande as d,service as s where a.codemande=d.Codemande and a.Matricule=s.Matricule and (a.Matricule ="'.$log.'" and s.libelle="'.$L;
// si je doit suivre cette methode je doit traiter neuf cas lorsqu il sont vide lorsque lune des critaire et selectionnè [^^confus5]
$req = mysql_query($sql);
if(mysql_num_rows($req)==0)
{
echo "aucune information sur se client n existe dans la base de donné";
}
else{
// on recupere le resultat sous forme d'un tableau
echo"<table border='3' >
<tr>
<td>service </td>
<td>Matricule </td>
<td>Nom </td>
<td>Prenom </td>
<td>Type demande </td>
<td>dateEnvoi de serveur </td>
<td>Last date </td>
<td>User </td>
<td>Etat </td>";
$data = mysql_fetch_row($req);
// on libère l'espace mémoire alloué pour cette interrogation de la base
mysql_free_result ($req);
echo"<tr>";
for($i=0;$i<count($data);$i++){
echo"<td> $data[$i] </td>"
;}
echo"</tr>";}
echo"</table>" ;
}else { if (isset($_POST['radi']))
{
$log=$_POST['textfield'];
$id=mysql_connect('localhost','root','');
mysql_select_db('ts',$id);
// lancement de la requete
$sql = 'SELECT s.libelle,a.Matricule,a.Nom,a.Prenom,d.Type,d.DateDemende,d.user,d.user FROM agents as a,demande as d,service as s where a.codemande=d.Codemande and a.Matricule=s.Matricule and s.sigle like '.$log;
$req = mysql_query($sql);
if($req==0)
{
echo "aucune information sur se client n existe dans la base de donné";
}
else{
// on recupere le resultat sous forme d'un tableau
echo"<table border='3' >
<tr>
<td>service </td>
<td>Matricule </td>
<td>Nom </td>
<td>Prenom </td>
<td>Type demande </td>
<td>dateEnvoi de serveur </td>
<td>Last date </td>
<td>User </td>
<td>Etat </td>";
$data2 = mysql_fetch_row($req);
echo"<tr>";
for($i=0;$i<count($data2);$i++){
echo"<td> $data2[$i] </td>"
;}
echo"</tr>";}
echo"</table>" ;
}else {
}
}
}
}
?>
merci de m avir acceper dans vore forum
|
|
mardi 10 août 2010 à 16:25:33 |
Re : requet de recherche

RaftY
|
Bonjour,
La question à se poser plutot que de vouloir traiter des cas un par un serait plutot de se dire est-ce quels cas se complètent?
Par exemple, j'ai matricule, service et protocole dans un cas. JE vais une recherche avec les trois, mais si j'ai matricule, je ne fais que matriulce, si j'ai protocole, je ne fais que protocole.
Pour moi le plus simple et de faire ainsi:
$sql="SELECT chp1,chp2 .... FROM table1, table2 .... Where {jointure}"
if(isset($_POST["Mat"]))
{
$sql.=" AND MATRICULE =".$_POST["Mat"]." ";
}
if(isset($_POST["service"]))
{
$sql.=" AND SERVICE =".$_POST["service"]." ";
}
...
{Exécution du sql}
Note: .= opérateur de concténation court équivalent à $sql=$sql."AND MAT..."
______oOOO________OOOo________
RaftY, du code C commode!
|
|
mercredi 11 août 2010 à 10:52:39 |
Re : requet de recherche

kabi14
|
merci
je vais tester cette approche
mais j ai une petite question
pour la structure que vous m avais présenter
en traite pas la condition si deux champs sont selectionnè exemple matricule et service a la foie
c est cette ligne
$sql=$sql."AND MAT..."
|
|
mercredi 11 août 2010 à 12:00:47 |
Re : requet de recherche

RaftY
|
Bonjour, oui on complete en fonction des champs disponibles.
Si le champ Mat est présent on ajoute le filtre sur Matricule, si le champ service est présent on ajoute le filtre sur Service ....
DOnc en fait on construit la requête par concaténation des champs présents en appliquant les filtres correspondants
dans l'exmplde de code suivant
Code PHP : $sql="SELECT chp1,chp2 .... FROM table1, table2 .... Where {jointure}"
if(isset($_POST["Mat"]))
{
$sql.=" AND MATRICULE =".$_POST["Mat"]." ";
}
if(isset($_POST["service"]))
{
$sql.=" AND SERVICE ='".$_POST["service"]."' ";
}
...
{Exécution du sql}
imaginons les 3 cas de figure suivant:
1- Mat=15
$sql => "SELECT chp1,chp2 .... FROM table1, table2 .... Where {jointure} AND MATRICULE=15
2- service="RH"
$sql => "SELECT chp1,chp2 .... FROM table1, table2 .... Where {jointure} AND SERVICE='RH'
3- Mat=, Service=RH
$sql => "SELECT chp1,chp2 .... FROM table1, table2 .... Where {jointure} AND MATRICULE=15 AND AND SERVICE='RH' "
______oOOO________OOOo________
RaftY, du code C commode!
|
|
mercredi 11 août 2010 à 12:26:04 |
Re : requet de recherche

kabi14
|
a oui merci j ai compris l astuce mais ca marche pas et je sais pas pourquoi
c est mon code Code PHP :
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="default.css" media="screen"/>
<link rel="stylesheet" href="cbcscbinsmenu.css" type="text/css" />
<title>Document sans titre</title>
<style type="text/css">
#l_col {
padding: 0px;
float: left;
width: 20%;}
#r_col {
padding: 10px;
float: left;
width: 68%;
border-left: 1px solid #eee;
font: 80%/160% Verdana, Arial, Helvetica, sans-serif;
}
</style>
</head>
<body class="oneColLiqCtrHdr">
<div id="container">
<div id="header">
<img src="header.JPG" width="970" height="111" />
<!-- fin de #header -->
</div>
<div id="content">
<div id="l_col">
<div class="ali">
<ul>
<li><a href="gertest.php" class="ali">Etat de demande</a></li>
<li><a href="deco.php">Deconection</a></li>
</ul>
<ul id="ebul_cbinsmenu_1" class="ebul_cbinsmenu" style="display: none;">
<li><a title="">Etat de demande</a></li>
<li><a title="">Rechereche</a></li>
<li><a title="">Deconection</a></li>
</ul>
</div>
</div>
<div id="r_col" >
<form method="post" action="" name="frm_pass" >
<p> <span class="button">rechercher</span></p>
<form id="form1" name="form1" method="post" action="">
<label>
</label>
<table width="299" border="1">
<tr> <td width="62" align="center">Matricule</td>
<td width="100" align="center">Service</td>
<td colspan="2" align="center">Période</td>
</tr>
<tr>
<td><input type="text" name="text1" id="text1" size="10" /> </label></td>
<td width="100" align="center" ><select id="list2" name="list2" >
<option selected="selected" value="MPL">MPL</option>
<option selected="selected" value="tcp">tcp</option>
<option selected="selected" value="dl">dl</option>
</select></td>
<td width="79" >
date debut <input type="text" name="text3" id="textfield" size="10" /></br>
</br></td>
<td width="79" >
date debut <input type="text" name="text2" id="textfield" size="10" /></br>
</br></td>
</table>
<input name="envoyer" type="submit" class="button" id="envoyer" value="REchercher" />
<?php if (isset($_POST['envoyer']))
{ $log=$_POST['text1'];
$id=mysql_connect('localhost','root','');
mysql_select_db('ts',$id);
// lancement de la requete
$sql = "SELECT s.libelle,a.Matricule,a.Nom,a.Prenom,d.Type,d.DateDemende,d.user,d.user FROM agents as a,demande as d,service as s where a.codemande=d.Codemande and a.Matricule=s.Matricule ";
if (isset($_POST['text1']))
{ $sql.=" and a.Matricule=".$_POST['text1']."";
}
if (isset($_POST['list2']))
{ $sql.=" and s.libelle=".$_POST['list2']."";
} if (isset($_POST['text2'])&& isset($_POST['text3']))
{ $sql.=" and d.DateDemende between".$_POST['text2']." and".$_POST['text3']."";
}
$req = mysql_query($sql);
if($req==0)
{
echo "aucune information sur se client n existe dans la base de donné";
}
else{
// on recupere le resultat sous forme d'un tableau
echo"<table border='3' >
<tr>
<td>service </td>
<td>Matricule </td>
<td>Nom </td>
<td>Prenom </td>
<td>Type demande </td>
<td>dateEnvoi de serveur </td>
<td>Last date </td>
<td>User </td>
<td>Etat </td>";
$data = mysql_fetch_row($req);
echo"<tr>";
for($i=0;$i<count($data);$i++){
echo"<td> $data[$i] </td>"
;}
echo"</tr>";}
echo"</table>" ;
}
?>
</form></p>
</form>
</label>
</div>
</LABEL></td>
</tr>
</table>
</form>
</div>
<div id="footer">
<h6 align="center"><span class="button">Mr:</span>
<span class="button2">
</span></h6>
<!-- fin de #footer --></div>
<!-- fin de #container --></div>
</body>
</html>
merci
|
|
mercredi 11 août 2010 à 13:08:27 |
Re : requet de recherche

RaftY
|
re,
il faut vérifier que text1 et les autres text ne soient pas vide pour les affecter en complément de la chaine
Code PHP : if (isset($_POST['text1']) && $_POST['text1']!='')
Code PHP : $sql = "SELECT s.libelle,a.Matricule,a.Nom,a.Prenom,d.Type,d.DateDemende,d.user,d.user FROM agents as a,demande as d,service as s where a.codemande=d.Codemande and a.Matricule=s.Matricule ";
if (isset($_POST['text1']))
{ $sql.=" and a.Matricule='".$_POST['text1']."' ";
}
if (isset($_POST['list2']))
{ $sql.=" and s.libelle='".$_POST['list2']."' ";
} if (isset($_POST['text2'])&& isset($_POST['text3']))
{ $sql.=" and d.DateDemende between ".$_POST['text2']." and ".$_POST['text3']." ";
}
j'ai mis quelques espaces surtout pour le between, ensuite sur libellé comme tu cherches du texte les guillemets sont de rigueur en SQL pour de la recherche de texte.
Autre petit conseil, fait un echo ou un print de ta requete avant de l'exécuter. Cela te permettra par un copier coller dans ton manager SQL de debuguer très vite ton SQL
Autre astuce, la comparaison de caractère est souvent difficile lorsque les soft respecte la casse. Donc faire faire sa comparaison toujours en Majuscule ou toujours en minuscule. strtoupper() strtolower(). Ensuite, toujorus dans la recherche de texte, on met souvent un recherche partiel avec un Code : LIKE '%".$_POST["text1"]."%'
APres cela est peut être normal mais tu as dans ta requete
DateDemende est-ce une faute de frappe de ta part, ou une faute au moment de conception dela DB.
______oOOO________OOOo________
RaftY, du code C commode!
|
|
mercredi 11 août 2010 à 13:45:37 |
Re : requet de recherche

kabi14
|
merci de ta patience  avec moi
je vais tester ca
non ce n est pas une faute de frappe de ma part
j ai nommer une ce champ comme ca dans la base de donner surtout dans la table demande
|
|
mercredi 11 août 2010 à 13:53:19 |
Re : requet de recherche

kabi14
|

sur libellé comme tu cherches du texte les guillemets sont de rigueur en SQL pour de la recherche de texte. 
j ai pas bien compris ta question je recuper le contenus de la liste par $_POST["list2"] et je le mis dans une variable
et pour cette ligne aussi les % ca ajout quoi
LIKE '%".$_POST["text1"]."%'
merci
|
|
mercredi 11 août 2010 à 13:56:48 |
Re : requet de recherche

kabi14
|
aussi il ne marche pas il m affiche le message que aucune information sur se client n existe dans la base de donné.
donc toujours il selectionne rien de la table
($req = mysql_query($sql))==0
merci
|
|
mercredi 11 août 2010 à 14:47:21 |
Re : requet de recherche

RaftY
|
N'oublie pas que tu écris des requete SQL, http://sqlpro.developpez.com/
En SQL lorsque qu'on filtre sur du texte on entoure le filtre par '...' et pas pour les zones dites numériques
ex:
SELECT * FROM MATABLE WHERE MON_NOM= 'RafTy ' AND MON_ID > 10
Pour le LIKE c'est un opérateur SQL toujours qui exprime le contenu, si on traduit LIKE de l'anglais c'est verbe "bien aimer", en SQL on dira contient.
si on reprend l'exemple:
1- SELECT * FROM MATABLE WHERE MON_NOM LIKE 'Raf%'[/b] AND MON_ID > 10
Donnera tous les enregistrements de la table ayant MON_ID supérieur à 10 et pour lesquels MON_NOM commence par Raf
2- SELECT * FROM MATABLE WHERE MON_NOM LIKE '%Ty'[/b] AND MON_ID > 10
Donnera tous les enregistrements de la table ayant MON_ID supérieur à 10 et pour lesquels MON_NOM termine par Ty
3- SELECT * FROM MATABLE WHERE MON_NOM LIKE '%afT%'[/b] AND MON_ID > 10
Je te laisse deviner, ce cas
pour finir de debuguer, il ne reste que d'afficher la requete SQL qui doit te rendre {vide}.
Donc avant
Code PHP : $req = mysql_query($sql);
tu places par exemple
Code PHP :
$req = mysql_query($sql);
if (!$req) {
$message = 'Requête invalide : ' . mysql_error() . "\n";
$message .= 'Requête complète : ' . $sql;
die($message);
}
Il t'affichera l'erreur SQL et la requete
cette gestion d'erreur doit devenir un automatisme, cela evite de passer des heures à ce poser des question sur PHP, alors que c'est peut être la requete qui s'exécute mal.
Apres en focntion de l'erreur tu corrige ton code SQL, tu t'aider de phpmyadmin, ou sqlYog ou autre sql manager.
______oOOO________OOOo________
RaftY, du code C commode!
|
|
Cette discussion est classée dans : req, mysql, recherche, echo, matricule
Répondre à ce message
Sujets en rapport avec ce message
aide pour un code php je debute et j n'y comprends rien [ par rober ]
Roberun ami m'a fait un code en php pour:-1-creer une base de donnees a partir d'un fichier txt-2-effectuer une recherche dans cette base de donnees-3
Problème avec un soit disant moteur de recherche lol [ par gssk ]
Au fait j'ai fait un "moteur de recherche" (code pourrave je le sais merci !!), et je n'ai que d erreur de variables indéfini! tels que Mot,idM,nomM e
aide pour mon moteur de recherche [ par kroland ]
j'aurai besoin d'aide pour mon moteur de recherche tout simple que je tante de concevoir... voila le code que j'ai fai pour le moment : tou d'abord l
afficher photo sur une ligne [ par 01cod10 ]
J'aimerai afficher la photo des 10 derniers enregistrements de ma table. Avec ce script les photos s'affichent l'une en desous de l'autre comment fair
if else [ par mehdisfr ]
salut,Quelqu'un voit une faute dans ce code?if(mysql_num_rows($req)):{ while($data = mysql_fetch_array($req)) { &nbs
Recherche dans une base [ par shadow1779 ]
Bonjour,j'essaye de faire un module sur mon site afin de rechercher toutes les entrées ou l'on trouve une certaine chaine de caractère, pour l'instant
recherche base mysql [ par cobra176 ]
bonjour a tousj'ai un probleme , j'ai un code qui me permet de recherche des informations contenu dans une seule table mais je veux recherche une info
transfert de données d'un page aa l'autre [ par cobra176 ]
bonjour a tous j'ai un probleme de transfert de donnéesj'ai fait un moteur de recherche sur un base sqlil m'affiche certains que lui indique puis je v
problème avec $_POST['recherche_id'] [ par Batman60 ]
Bonjour je suis débutant en PHP j'ai un problème avec $_POST[]quand j'actionne sans avoir rempli le </fo
Probleme avec recherche de plusieurs mots-clés [ par cyse ]
Bonsoir,J'essai de faire un moteur de recherche en interne pour un site.Je ne suis pas super doué en php encore et je n'arrive pas à cerner quelquecho
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|