moteur de recherche php

highwog78
Invité n'ayant pas de compte PHPfrance

21 févr. 2012, 12:41

Bonjour,

Je tente de créer un moteur de recherche. J'ai crée une base de données contenant une table avec le nom d'un fichier son type, son contenu, sa date de création ...

Lorsqu'un utilisateur entre une chaîne dans la zone de recherche ma requête sql marche. Par contre je n'arrive pas a faire en sorte que cela marche si l'utilisateur entre plusieurs mot clés . Cela pose problème si le fichier est nommé avec des espaces (ex: fichier de configuration)

Voici mon code:

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=ibsi_ged', 'root', '', $pdo_options);

$req = $bdd->prepare('SELECT DISTINCT * FROM t_fiches WHERE titre LIKE ?');
$req->execute(array($_POST['titre'].'%'));

//? OR fileContent LIKE ?
//, $_POST['titre'].'%'


echo '<ul>';
while ($donnees = $req->fetch())
{
echo 'titre du fichier: <li>' . $donnees['titre'] . 'contenu:' . $donnees['fileContent'] . ' </li>';
}
echo '</ul>';

$req->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

Pouvez vous m'aider ?
Merci beaucoup

Eléphant du PHP | 179 Messages

21 févr. 2012, 12:44

Hello,
tu devrais explode ta variable que tu reçois ( la recherche de l'utilisateur ) à l'espace, et sur chaque mot tu fais titre like {mot1} OR titre like {mot2} OR titre like {mot3} etc..
Bien-sur étant donné que tu ne connais pas le nombre de mot à l'avance il va falloir faire un foreach sur le tableau crée par l'explode :)

highwog78
Invité n'ayant pas de compte PHPfrance

21 févr. 2012, 12:48

merci pour ta réponse :) ça fume dans le bureau j'ai pas tout compris :)

Eléphant du PHP | 179 Messages

21 févr. 2012, 12:56

Admettons que l'utilisateur recherche "rose vert"
dans ton script tu récupères ta variable $_POST['titre']
la tu fais un
explode()
de ta variable avec comme délimiter " " ( l'espace )
Ceci va te donner un tableau formé de la manière suivante :

array(0=>rose,
1=>vert)

Maintenant tu entame ta requete
$mareq="select * from matable where";

la tu foreach le tableau contenant les recherches
foreach( $tab as $key=>$value)
et tu ajoutes a chaque boucle
$mareq.=" OR champs like '%$value%'"; ( tu vérifie si la clé ( $key ) est à 0, il ne faut pas mettre le OR

une fois sorti de ta boucle tu execute ta requète avec un query, car dans ce cas la le prepare n'est pas conseiller ;).
En espérant avoir été clair !

highwog78
Invité n'ayant pas de compte PHPfrance

21 févr. 2012, 12:59

merci beaucoup je vais tester tout de suite :) !!