Recherche EXACTE en PHP dans MYSQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche EXACTE en PHP dans MYSQL

par Vikchill » 23 août 2007, 17:25

Essaie ça:
require_once('../Connections/ConnexionBiblio.php');

$colMarque_rsChemise = '';
if (isset($_GET['VARmarque'])) {
  $colMarque_rsChemise = (get_magic_quotes_gpc()) ? $_GET['VARmarque'] : addslashes($_GET['VARmarque']);
}
$colProduit_rsChemise = '';
if (isset($_GET['VARproduit'])) {
  $colProduit_rsChemise = (get_magic_quotes_gpc()) ? $_GET['VARproduit'] : addslashes($_GET['VARproduit']);
}
mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);

$query_rsChemise = "SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitNumCD, tableproduit.ProduitMarque, tableproduit.ProduitType, 
tablesociete.SocieteNom, tablesociete.RefSociete, tableproduit.RefProduit 
FROM tableproduit, tablesociete 
WHERE tableproduit.ProduitMarque=tablesociete.RefSociete 
AND tableproduit.ProduitType = '".$colMarque_rsChemise."' 
AND tablesociete.SocieteNom = '".$colProduit_rsChemise."' 
ORDER BY tableproduit.ProduitType, tablesociete.SocieteNom";

$rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());

$row_rsChemise = mysql_fetch_assoc($rsChemise);

$totalRows_rsChemise = mysql_num_rows($rsChemise);
?>
Peut-être comprendras-tu mieux le petit bout de code. Un petit opérateur ternaire ferait pas de mal mais allons y doucement.

par Ryle » 23 août 2007, 17:23

Chaque pourcentage en SQL correspond à une partie de la chaine que tu ne connais pas.. il est donc inutile d'avoir deux '%' côte à côte. En revanche, la fonction sprintf() que tu utilises pour générer ta chaine sql a un usage bien particulier du caractère '%' : %s correspon à une chaine, %d à un nombre, etc.

Afin que php ne confonde pas le caractère pourcent spécifique à sprintf et celui que tu souhaites utiliser dans ta requête, il faut le doubler. Ainsi "% ma chaine %" devient "%% ma chaine %%", la chaine étant ensuite spécifiée dans les variables du sprintf, on remplace celle-ci par '%s', ce qui au final te donne donc "%% %s %%" (sans les espaces)

par Luverger » 23 août 2007, 17:18

Je ne sais pas trop il y a une partie un peu flou ...

Au début j'avais mis des LIKE '%%%s%%' mais il parait qu'il faut des LIKE '%'

Alors j'ai essayé mais ca ne marche pas mieux ...

par Vikchill » 23 août 2007, 17:15

Code : Tout sélectionner

SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitNumCD, tableproduit.ProduitMarque, tableproduit.ProduitType, tablesociete.SocieteNom, tablesociete.RefSociete, tableproduit.RefProduit FROM tableproduit, tablesociete WHERE tableproduit.ProduitMarque=tablesociete.RefSociete AND tablesociete.SocieteNom LIKE '%' AND tableproduit.ProduitType LIKE '%' ORDER BY tableproduit.ProduitType, tablesociete.SocieteNom"
Tu attends quoi de cette requête? Qu'est-ce qu'elle doit te donner d'après toi?

A quoi servent tes deux "LIKE '%'"?

par Luverger » 23 août 2007, 17:08

Donc je devrais écrire dans ce genre là ???

Code : Tout sélectionner

$query_rsChemise = sprintf("SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitNumCD, tableproduit.ProduitMarque, tableproduit.ProduitType, tablesociete.SocieteNom, tablesociete.RefSociete, tableproduit.RefProduit FROM tableproduit, tablesociete WHERE tablesociete.SocieteNom LIKE '%' AND tableproduit.ProduitMarque=tablesociete.RefSociete AND tableproduit.ProduitType LIKE '%' ORDER BY tableproduit.ProduitType, tablesociete.SocieteNom", $colMarque_rsChemise,$colProduit_rsChemise); $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error()); $row_rsChemise = mysql_fetch_assoc($rsChemise); $totalRows_rsChemise = mysql_num_rows($rsChemise);
Mais si je marque ça comme ça il me retourne :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RDER BY tableproduit.ProduitType, tablesociete.SocieteNom' at line 1

????????

par Ryle » 23 août 2007, 17:02

Ben dans critères de recherche de la requête ... dans le WHERE en somme...

Code : Tout sélectionner

SELECT ... WHERE nom_du_champ = 'texte recherché' SELECT ... WHERE nom_du_champ LIKE 'texte recherché dont on ne connait pas la fin %'

par Luverger » 23 août 2007, 16:57

Ou devrais placer les LIKE ou = dans mon exemple ???

par Ryle » 23 août 2007, 16:49

Pour une recherche exacte, il suffit d'utiliser le '=' à la place de 'LIKE'. Au pire tu peux utiliser le LIKE sans les '%', mais c'est nettement moins performant.

Pour étendre la recherche, il suffit d'utiliser 'LIKE' et d'ajouter des '%' comme joker pour représentée la ou les parties inconnues de la chaine recherchée.

Recherche EXACTE en PHP dans MYSQL

par Luverger » 23 août 2007, 16:38

Bonjour,

J'ai ce bout de code:

Code :

Code : Tout sélectionner

<?php require_once('../Connections/ConnexionBiblio.php'); ?> <?php require_once('../Connections/ConnexionBiblio.php'); $colMarque_rsChemise = "0"; if (isset($_GET['VARmarque'])) { $colMarque_rsChemise = (get_magic_quotes_gpc()) ? $_GET['VARmarque'] : addslashes($_GET['VARmarque']); } $colProduit_rsChemise = "0"; if (isset($_GET['VARproduit'])) { $colProduit_rsChemise = (get_magic_quotes_gpc()) ? $_GET['VARproduit'] : addslashes($_GET['VARproduit']); } mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio); $query_rsChemise = sprintf("SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitNumCD, tableproduit.ProduitMarque, tableproduit.ProduitType, tablesociete.SocieteNom, tablesociete.RefSociete, tableproduit.RefProduit FROM tableproduit, tablesociete WHERE tablesociete.SocieteNom LIKE '%' AND tableproduit.ProduitMarque=tablesociete.RefSociete AND tableproduit.ProduitType LIKE '%' ORDER BY tableproduit.ProduitType, tablesociete.SocieteNom", $colMarque_rsChemise,$colProduit_rsChemise); $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error()); $row_rsChemise = mysql_fetch_assoc($rsChemise); $totalRows_rsChemise = mysql_num_rows($rsChemise); ?>
Et j'aimerais dans un premier temps savoir comment faire pour le modifier afin que j'ai j'écris le mot VIS dans mon moteur de recherche et me retourne les résultats comprenant uniquement le mot VIS et non asserVISsement ou laser de VISée ...

Et j'aimerais dans un deuxième temps pouvoir ajouter le caractère % ou un autre pour pouvoir étendre la recherche ...

D'avance merci