[php]Problème avec le LIKE

Fermé
steph70 - 3 oct. 2008 à 15:52
 Rollin'babe !! - 4 oct. 2008 à 21:46
Bonjour,

J'ai mis en place un page php pour permettre une recherche plus facile dans mon travail.

J'ai donc fait en sorte qu'une recherche mysql se fasse à l'aide de php. Cela fonctionne jusqu'au moment ou j'essaie d'utiliser un LIKE, pour le champs symptome qui ne fonctionne que sur le dernier mot. Ce qui est assez embetant pour trouver un texte convenable

Pouvez vous jeter un oeil sur mon code est eventuellement pointé ma betise.

Et eventuellement me guider pour que ce champs puisse chercher plusieurs mots que je puisse affiner ma recherche.

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


Merci d'avance et désolé pour la longueur. Je ne suis qu'un petit amateur en php

Amicalement
steph70
A voir également:

11 réponses

Désolé, je suis le roi des idiots

J'ai oublié un % sur la variable symptomes

ceci explique cela.

Merci encore.

Steph70
0
Rollin'babe !!
3 oct. 2008 à 21:41
Bonsoir,

Pour tes LIKE, essaye plutôt cette syntaxe en règle générale si c'est ca ton problème :

... LIKE '%". $symptome ."%' (par exemple).

Mes sources : http://www.webmasterworld.com/forum88/826.htm.

A+.
0
Merci a tous

Oui c'est bien ca Stef60

Amicalement
Steph70
0
Ok et merci Stef60...

Mais par contre la, ca dépasse mes capacités actuelles en php.

Pourrais tu me donner un lien ou ceci pourrait m'etre expliqué ?

ou me l'expliquer ?

Merci d'avance

Stéph70
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rollin'babe !!
4 oct. 2008 à 12:33
Bjour,

Essayez ceci :

$symptome = str_replace (" ", "%", $symptome);

Et injectez $symptome dans votre LIKE.

Sources : https://www.php.net/manual/fr/function.str-replace.php

Bonne journée.
0
Merci beaucoup,

J'essaie cela et vous tiens au courant.

Enfin d'ici lundi

Amicalement
Lonewolf
0
Rollin'babe !!
4 oct. 2008 à 13:24
Re,

Si vous voulez effectuer une recherche sur plusieurs mots clefs non corrélés entre eux dans un même enregistrement, je crois qu'il faudra passer par plusieurs clauses LIKE séparés par un OR.

Solution : proposer un nombre limité de champs de recherche à l'utilisateur et ajouter autant de clause LIKE que de champs de recherche.

Salutations.

______________________________________________________________________________
"Ma mère s'appelait Gwendoline... elle est morte dévorée
par les loups dans les bois en allant chercher mon père qu'est allé boire
à la taverne des Duchenot et qu'il est mort crevé - gelé dans l'étang
à cause de son pied bot..."
0
Merci a tous

J'ai trouvé la solution. Il me suffisait de rajouter :

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


avec ma déclaration de variable et tout fonctionne a merveille.

Rollin'babe, tu etais tout prêt.

Merci encore

amicalement

Lonewolf
0
Rollin'babe !!
4 oct. 2008 à 21:46
Re,

Avec vos requêtes formatées ainsi (voir Post 1) :

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

En injectant votre : $Symptomes = str_replace(" ", "%' AND Symptomes LIKE '%", $Symptomes);

Je doute vraiment que ca marche (:<)...

Mais :

$reponse = mysql_query("SELECT * FROM intervention WHERE `Machine`='$Machine' and `Symptomes` LIKE '%$Symptomes%'");
AVEC
$Symptome = str_replace (" ", "%", $Symptome);

Ça devrait aller mieux.
CQFD.


Bonne soirée.
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
3 oct. 2008 à 16:05
Bonjour,
si j'ai bien compris tu voudrais effectuer faire une recherche sur plusieurs mots.
ex: dans ta base tu as un truc comme ca:
ordinateur portable rebbot.

Si dans ton formulaire symtomes tu tapes : ordinateur reboot

tu veux qu'il te ressorte ordinateur portable reboot ??
-1
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
4 oct. 2008 à 01:02
dans ce cas, tu devrais essayer de transformer $symptome = "ordinateur reboot ";
par $symptome = "ordinateur % reboot "
En fait ta requete doit ressembler a ca :
"SELECT * FROM intervention WHERE `Utilisateur`='$Utilisateur'and `Symptomes` LIKE '%ordinateur % reboot %' "

Donc il faut que tu fasses un traitement de ta variable $symptome
-1

Discussions similaires