begin process at 2012 05 31 14:42:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

requet de recherche


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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 patienceavec 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!

1 2 3

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales