[RESOLU] sinthax de LIKE pour un bouton rechercher...

Eléphant du PHP | 218 Messages

11 oct. 2013, 23:36

Bonjour, je souhaiterais faire un bouton rechercher en utilisant LIKE mais je ne connais pas la sinthax pour faire se que je voudrais. Car en effet je souhaiterai que lorsque l'utilisateur tape par exemple une phrase du genre :
"Vêtements pour homme" alors cela devra récupérer dans ma base de donnée les champs qui comportent le mot clé "hom" par exemple ou le mot clé "vetemen" qui sont dans une table "keywords" de ma BDD écrit de cette manière : hom,vetemen,chauss,casquett,adult,pentallon,pentalon..................etc


$sql_situations = $bdd->prepare("
						SELECT titre
						FROM vetements
						WHERE keywords LIKE '%" . $tenue . "%'
						AND afficher = :afficher
						ORDER BY ordre
						");
$sql_situations->execute(array(
						'afficher' => 1
						));
$sql_situations->setFetchMode(PDO::FETCH_ASSOC);
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Mammouth du PHP | 504 Messages

11 oct. 2013, 23:50

Salut,

Compliqué ton histoire....

quelqu'un tape => "Vêtements pour homme" et il faut que ça te recherche "hom" dans ta bdd ?

Excuse moi de te dire ça, mais elle est pourrie ta table keyword.

Soit tu prend en consideration tout le mot "homme" et vetement etc... peu de gens vont tapé chauss pour cherché des chaussures quand au reste des mots que tu donnes dans keyword, lorsque on fait des recherches, on met rarement les accents mais de là à écrire chauss, pentallon etc... il faudrait fainéant et vraiment nul en orthographe.

Bref tout ça pour te dire qu'il est largement plus facile d'utiliser le LIKE en "passant" de:
homme à "vetements pour homme" que de "vetements pour homme" à "hom". il va falloir faire un traitement sur la chaine "vetements pour homme" pour extraire que "hom" et le mettre dans ton LIKE.

C'est une usine a gaz ton truc. reprends ta table keyword et fait des vrais mots pour commencer.

Mammouth du PHP | 504 Messages

12 oct. 2013, 00:01

Sinon,

Tu peux utiliser: http://php.net/manual/fr/function.strpos.php
<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// Notez notre utilisation de ===.  == ne fonctionnerait pas comme attendu
// car la position de 'a' est la 0-ième (premier) caractère.
if ($pos === false) {
    echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'";
} else {
    echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'";
    echo " et débute à la position $pos";
}
?>
Tu adaptes pour ton cas, genre $_post['recherche'] qui correspond a ta chaine de recherche.

tu fais un explode sur ton champs keyword, pour chaque mot de ton champ keyword, tu vérifies si il est présent dans la chaine $_post['recherche'] et tu retournes tes résultats.

Mammouth du PHP | 2278 Messages

12 oct. 2013, 09:15

En php, il y a similar_text et levenshtein qui pourraient servir
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 218 Messages

13 oct. 2013, 11:29

Merci pour vos votre aide ca m'a permis de faire ce que je souhaitais, très bonne journée
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/