begin process at 2010 02 10 01:20:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Débutant(s)

 > 

Problème pour recherche par plusieurs mots clés


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

Problème pour recherche par plusieurs mots clés

samedi 4 octobre 2008 à 14:43:44 | Problème pour recherche par plusieurs mots clés

lonewolfs

Bonjour a tous,

J'ai crée une base de donnée pour l'entretien des machines de mon parc.

et j'ai fait une page php pour effectuer mes recherches plus facilement.

Cette page permet de faire des recherches sur plusieurs plan et en particulier sur des symptomes qui ont engagé une intervention.

Mon script fonctionne mais que sur un seul mot clé dans ma recherche sur les symptomes et je souhaiterais pouvoir affiner mes recherches en permettant plusieurs mots clés dans la case symptomes mais j'avoue que la ca dépasse mes capacités en php.

Je viens donc vers vous, vous demander de l'aide.

Voci mon code :[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html><body>

<!-- Mise en place du formulaire de recherche -->

<form method="post">

<p>Rechercher par :</p><br/>

Machine : <input type="text" name="Machine" /> -

Utilisateur : <input type="text" name="Utilisateur" /> -

Lieu : <input type="text" name="Lieu" /> -

Symptômes : <input type="text" name="Symptomes" />

<br/><input type="submit" value="Chercher" />

</form>

<center><table width="981" border="1" cellspacing="0" cellpadding="0">

<tr>

<td width="62"><div align="center">Date</div></td>

<td width="62"><div align="center">Lieu</div></td>

<td width="71"><div align="center">Machine</div></td>

<td width="73"><div align="center">Utilisateur</div></td>

<td width="80"><div align="center">Symptômes</div></td>

<td width="86"><div align="center">Intervention</div></td>

</tr>

<?php

//récupération des variables

$Machine=$_POST['Machine'];

$Utilisateur=$_POST['Utilisateur'];

$Lieu=$_POST['Lieu'];

$Symptomes=$_POST['Symptomes'];

//Requêtes

mysql_connect("localhost", "root", "") or die ("Pas de connexion à la base de données"); // Connexion à MySQL

mysql_select_db("Entretien") or die ("Pas de connexion à la base"); // Sélection de la base coursphp

// Si seul Machine est rempli

if ((!empty($Machine)) and (empty($Utilisateur)) and (empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine'"); // Requête SQL

}

//Si seul Utilisateur est rempli

if ((empty($Machine)) and (!empty($Utilisateur)) and (empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Utilisateur`='$Utilisateur'"); // Requête SQL

}

//Si seul Lieu est rempli

if ((empty($Machine)) and (empty($Utilisateur)) and (!empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Lieu`='$Lieu'"); // Requête SQL

}

//Si seul Symptome est rempli ***************************************************************************************

if ((empty($Machine)) and (empty($Utilisateur)) and (empty($Lieu)) and (!empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Symptomes` LIKE '%$Symptomes%'"); // Requête SQL

}

//****************************************************************************************************************

//Si Machine et Utilisateur sont rempli

if ((!empty($Machine)) and (!empty($Utilisateur)) and (empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Utilisateur`='$Utilisateur'"); // Requête SQL

}

//Si Machine, Utilisateur e t Lieu sont rempli

if ((!empty($Machine)) and (!empty($Utilisateur)) and (!empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Utilisateur`='$Utilisateur' and `Lieu`='$Lieu'"); // Requête SQL

}

// Si tous les champs sont remplis

if ((!empty($Machine)) and (!empty($Utilisateur)) and (!empty($Lieu)) and (!empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Utilisateur`='$Utilisateur' and `Lieu`='$Lieu' and `Symptomes` LIKE '%$Symptomes%'"); // Requête SQL

}

//*******************************************************************************************

//Si Utilisateur et Lieu sont rempli

if ((empty($Machine)) and (!empty($Utilisateur)) and (!empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Utilisateur`='$Utilisateur' and `Lieu`='$Lieu'"); // Requête SQL

}

//Si utilisateur et Symptomes sont rempli

if ((empty($Machine)) and (!empty($Utilisateur)) and (empty($Lieu)) and (!empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Utilisateur`='$Utilisateur'and `Symptomes` LIKE '%$Symptomes%'"); // Requête SQL

}

//Si Lieu et Symptomes sont rempli

if ((empty($Machine)) and (empty($Utilisateur)) and (!empty($Lieu)) and (!empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Lieu`='$lieu' and `Symptomes` LIKE '%$Symptomes%'"); // Requête SQL

}

//Si Machine et lieu sont rempli

if ((!empty($Machine )) and (empty($Utilisateur)) and (!empty($Lieu)) and (empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Lieu`='$Lieu'"); // Requête SQL

}

//Si Machine et Symptomes sont rempli

if ((!empty($Machine)) and (empty($Utilisateur)) and (empty($Lieu)) and (!empty($Symptomes)))

{

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Symptomes` LIKE '%$Symptomes%'"); // Requête SQL

}

// On fait une boucle pour lister tout ce que contient la table :



while ($donnees = mysql_fetch_array($reponse) )

{

?>

<tr>

<td><center><strong><?php echo $donnees['Date']; ?></strong></center></td>

<td><center><strong><?php echo $donnees['Lieu']; ?></strong></center></td>

<td><center><strong><?php echo $donnees['Machine']; ?></strong></center></td>

<td><center><strong><?php echo $donnees['Utilisateur']; ?></strong></center></td>

<td><center><strong><?php echo $donnees['Symptomes']; ?></strong></center></td>

<td><center><strong><?php echo $donnees['Intervention']; ?></strong></center></td>

</tr>

<?php

}



mysql_close(); // Déconnexion de MySQL

?>

</table></center>

[/code]
Si vous pouvez me donner une piste, un lien, une aide, je suis preneur de tout ce qui peut me faire avancer.

Merci par avance

Lonewolf

samedi 4 octobre 2008 à 16:23:54 | Re : Problème pour recherche par plusieurs mots clés

nhervagault

Administrateur CodeS-SourceS
Salut

Voici une idée que tu peux suivre

Tu construis ta requête de façon dynamique.

Alors tu commence par faire la requête et après tu execute la requête fabriquée

Je ne vais pas recoder ta page (je m'y perd)

voici le principe

$sql = "SELECT * FROM intervention WHERE 1=1"; //--> 1=1 renvoie toutes les données de la table permet de gerer le AND de maniere propre

/*Lieu*/
if(!empty($Lieu)){
$sql .= " AND `Lieu`='$Lieu'"
}
/*Machine*/
if(!empty($Machine)){
$sql .= " AND `Machine`='$Machine'"
}

Etc

Et execution de la requete
 $reponse = mysql_query($sql);

Et voila ton probleme résolue de manière propre et maintenable

6 * 3 lignes courtes ;-)
+ 1 ligne pour l'execution c'est un peu mieux

Bon coding.



samedi 4 octobre 2008 à 16:58:54 | Re : Problème pour recherche par plusieurs mots clés

lonewolfs

Bonjour et merci

effectivement, ca permet un code moins lourd et plus lisible.

Néanmoins ca ne resoud pas le problème de la recherche sur plusieurs mots dans le champs "Symptomes".

Actuellement, avec mon code, je suis limité à un mot pour cette recherche, ce qui est peu pratique et je souhairerais pouvoir avoir plusieurs mots pour celles ci.

Amicalement
samedi 4 octobre 2008 à 17:13:31 | Re : Problème pour recherche par plusieurs mots clés

nhervagault

Administrateur CodeS-SourceS
Comment est fait ton champ symptôme pour avoir une idée (comment il est remplit en base)

avec une concatenation de OR LIKE dans la clause tu y arriveras peut etre

Mais avec des perfs pourries.

Ou sinon il faut chercher dans les recherches de types fulltext que je n'ai pas eu l'occassion d'utiliser sur mysql.
Internet te donneras des tutoriels sur les recherches fulltext.




samedi 4 octobre 2008 à 17:13:44 | Re : Problème pour recherche par plusieurs mots clés

lonewolfs

Réponse acceptée !
C'est bon, j'ai trouvé.

Voici la solution

$Symptomes = str_replace(" ", "%' AND Symptomes LIKE '%", $Symptomes);

Merci a tous

Amicalement
samedi 4 octobre 2008 à 17:17:16 | Re : Problème pour recherche par plusieurs mots clés

nhervagault

Administrateur CodeS-SourceS
J'ai pas compris ta réponse.
Peux-tu mettre un exemple de la chaine SQL formée avant et avec ta methode?

Merci


Cette discussion est classée dans : and, utilisateur, lieu, machine, empty


Répondre à ce message

Sujets en rapport avec ce message

Groupement d'enregistrements [ par dp_favresa ] Bonjour, Je dois récupérer des infos venant de plusieures tables, j'utilise la fonction JOIN, cela fonctionne très bien (code ci-dessous) : < revoyer plusieur valeur??? [ par Waldo2188 ] Salut à tousJ'aimerais savoir s'il est possible qu'une procédure stocké renvoie plusieur valeur?Voila ce que j'ai déjà fait:Ce que j'aimerais c'est qu requete SQL aider mois SVP [ par spoque ] Bonjour Voici mon problème: $valeur= odbc_exec( $cnx, "(SELECT (COUNT (ID)*10) FROM Users WHE TVA sur ma requete [ par spoque ] bonjour à tous,comment faire pour rajouter la TVA (7,6%) sur cette requete?Merci d'avance(select sum(compte) from (SELECT (COUNT (ID)*10) as compte FR deux chiffre aprèla virgule [ par spoque ] Hello toujour pas trouvé une solution pour ma requete j'aimerais deux chiffres après la virgule.Cordialementselect sum(compte) from (SELECT (COUNT (ID Programme VBA (copie d'une ligne) [ par pepette54 ] Bonsoir à tous. Il faut que je créé un programme permettant à un utilisateur d'entrer un nom afin de créer une nouvelle feuille excel et de copier les Problème Format date dans requete [ par phantom_2005 ] Voici ma requete sous Access 2000: SELECT DISTINCTROW [SCMPEH].[LINNUM], [SCMLIN].[LINNAM], Format$([SCMPEH].[PEHDAT], "jj/mm/aaaa") AS [PEHDAT par jo problème de Date lorsque l'intervalle est à cheval sur 2 mois... [ par nico_ayci ] salut à tous ! j'ai une fonctionnalité de recherche qui donne la possibilité de trouver des enregistrements selon leur date, à plus ou moins X jours. LIKE [ par elog29 ] Bonjour,Je cherche a utiliser like sur 1 champ entre 2 tables, voici ma requete, elle ne me retourne pas d'erreur mais ne m'affiche pas de resultat<FO réalisation de deux requete dans un script [ par developvbdebut ] Bonjour tout le mondeJe ne suis pas sur d'être sur le bon forum pour la question que je vais vous poser.Je m'escuse j'ai fai erreur.<


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,328 sec (3)

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