Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: Personne...
Ce topic a été résolu
Auteur Sujet: Moteur de cherche pour ma bdd

DarkShoka

Messages: 21

Bonjour ou bonsoir à tous,

Je vais essayer de résumer mon probleme rapidement:

J'aimerai inserer une barre de recherche pour que l'on puisse entrer des mots-clés et que cela nous amene vers les profil qui possède ces mots-clés.

PS: J'ai créé une colonne "Mots-clés"

Vous pouvez me poser des question si vous n'avez pas très bien compris Sourire
Publicité

quiqou55

Messages: 23

Salut !
Pour faire une recherche tu peut utiliser la fonction LIKE de MySQL suivi d'une expression régulière simplifié :
SELECT * FROM articles WHERE title LIKE :motcle OR content LIKE :motcle
ensuite dans ton script php tu peut exécuter ta requete sql : 
<?php $req->execute(array(
   "motcle"   =>   "%" . $motcle . "%"
)); 
// Ou la méthode raccourcie : 
$req->execute([
   "motcle"   =>   "%{$motcle}%"
]);
Après si tu veut lier ta table mots clé, tu peut faire un LEFT JOIN.
Mais tu peut aussi créer un champs "mot_cle" dans ta table article par exemple et ensuite faire un : 
SELECT * FROM articles WHERE title LIKE :motcle OR content LIKE :motcle OR mot_cle LIKE :motcle
PS:  écrire un tableau avec une clé évite de dupliquer les champs comme ça : 
SELECT * FROM articles WHERE title LIKE ? OR content LIKE ?
et ecrire sa dans l'execution : 
<?php $req->execute(array(
   "%" . $motcle . "%",
   "%" . $motcle . "%"
)); 

DarkShoka

Messages: 21

Dsl mais j'ai compris que 20% de ce que tu ma dis parce que je suis débutant.

quiqou55

Messages: 23

Par exemple si tu as une table articles qui contient tout les articles de ton site, dans ta table article tu as cette structure : 

  • Champ id 
  • Champ titre
  • Champ content
  • Champ mots_cle

Tu peut faire sa dans ton code php : 
<?php
   $bdd = new PDO('mysql:dbname=*****;host=localhost:charset=utf8;', '****', '***');
   $req = $bdd->prepare('SELECT * FROM articles WHERE content LIKE :search OR titre LIKE :search OR mots_cle LIKE :search');
   
   // Je suppose que les mots clé se trouve dans $_GET['mots_cles']
   $req->execute(array(
      "search"  =>  "%" . $_GET["mots_cles"] . "%"
   ));
   while($data = $req->fetch()){
      echo $data['titre'];
   }

DarkShoka

Messages: 21

D'accord je vais essayer et je t'informe sous peu.

DarkShoka

Messages: 21

Je vais expliquer en détail ce que je voudrai:

Je voudrai que on puisse faire une recherche de pseudo dans une barre et si ce pseudo existe alors ca l'affiche et après je voudrai que l'on puisse cliquer sur le pseudo pour que ca nous amene sur sa page de profil.

quiqou55

Messages: 23

Ok, le code peut changer en fonction de l'organisation et du choix des noms de variables.

Tout d'abord pour la barre de recherche c'est assez simple : 
<form action="search_pseudo.php">
   <input type="text" name="search" id="search" />
   <input type="submit" class="btn">
</form>
Dans ta bdd tu auras par exemple ces champs supplémentaire : 
TABLE membres
   pseudo   VARCHAR(255)
   mots_cles VARCHAR(255)

et ensuite dans ton fichier search_pseudo.php : 
<?php
   $search = htmlspecialchars($_GET['search']);
   $bdd = new PDO("mysql:dbname=******;host=******;charset=utf8;", "****", "*****");
   
   // Pour eviter les problèmes d'encodage et pour gagner en performance (pas obligatoire): 
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
   
   // Requetes SQL : 
   
   $query = "
      SELECT * FROM membres
      WHERE pseudo LIKE :s
      OR mots_cles LIKE :s
   "
   
   $s = "%" . $search . "%";
   
   $req = $bdd->prepare($query);
   $req->execute([ "s"  =>  $s ]);
   
   // Faire un fetchAll() est plus performant pour un système recherche Sourire
   
   $results = $req->fetchAll();

   foreach($results as $result){
      ?>
         <a href="/profil/<?php echo $result['pseudo'] ?>">
            Profile de <?php echo $result['pseudo'] ?>
         </a>
      <?php
   }

DarkShoka

Messages: 21

Merci mais il me dit qu'il y a un probleme a la ligne 18 ($s)

quiqou55

Messages: 23

Ah oui j'ai oublié le ; a la fin de la ligne 16 dsl Clin d'oeil

DarkShoka

Messages: 21

Ok ca marche mais quand je clique sur le profil ca ne mamene pas vrs sa page.

quiqou55

Messages: 23

Il faut que tu adapte en fonction du nom de ta page Sourire

DarkShoka

Messages: 21

Ok c'est bon ca arche nickel

MERCI MERCI MERCI !!!

Marius

Messages: 138

Bonjour, quand je met rien, cela m'affiche tout les profils, comment puis-je remédier a cela et faire en sorte que ca affiche une erreur ?
Merci de votre réponse

julienb

Messages: 34

Doc PHP ISSETSalut Marius, pour ton soucis il faut qu'avant d'effectuer ta requète, tu vérifies que le contenu de ta recherche n'est pas vide. En supposant que tu as un formulaire avec un champ de recherche qui s'appelle search, il faudrait un code dans ce genre:
$search = htmlspecialchars($_POST['search']);
if(!isset($search)){ //
echo "erreur, une recherche ne peut pas être vide";
}else{
//connexion base de données
//requète
//...
}
La fonction isset() vérifie si la chaine de caractères passée en paramètre contient une valeur ou non. Tu peux aussi utiliser empty() qui vérifie si la chaine passée est vide. 
 Doc PHP Isset
Doc PHP Empty


Veuillez vous connecter ou créer un compte pour poster une réponse