Moteur de cherche pour ma bdd
- Accueil
- Forum
- Programmation
- PHP
- Moteur de cherche pour ma bdd
Sh0kaP1k Le 27 mars 2016 à 21:10 (Édité le 25 janvier 2019 à 17:50)
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 😀
quiqou55 Le 28 mars 2016 à 01:09 (Édité le 28 mars 2016 à 01:15)
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 . "%"
));
Sh0kaP1k Le 28 mars 2016 à 01:14 (Édité le 1 janvier 1970 à 01:00)
quiqou55 Le 28 mars 2016 à 01:23 (Édité le 28 mars 2016 à 01:25)
- 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'];
}
Sh0kaP1k Le 28 mars 2016 à 11:00 (Édité le 1 janvier 1970 à 01:00)
Sh0kaP1k Le 28 mars 2016 à 11:34 (Édité le 1 janvier 1970 à 01:00)
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 Le 28 mars 2016 à 12:56 (Édité le 28 mars 2016 à 12:57)
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 😀
$results = $req->fetchAll();
foreach($results as $result){
?>
<a href="/profil/<?php echo $result['pseudo'] ?>">
Profile de <?php echo $result['pseudo'] ?>
</a>
<?php
}
Sh0kaP1k Le 28 mars 2016 à 15:13 (Édité le 1 janvier 1970 à 01:00)
quiqou55 Le 28 mars 2016 à 17:41 (Édité le 1 janvier 1970 à 01:00)
Sh0kaP1k Le 28 mars 2016 à 19:42 (Édité le 1 janvier 1970 à 01:00)
quiqou55 Le 28 mars 2016 à 20:00 (Édité le 1 janvier 1970 à 01:00)
Sh0kaP1k Le 28 mars 2016 à 21:06 (Édité le 1 janvier 1970 à 01:00)
MERCI MERCI MERCI !!!
M69-74 Le 1 avril 2016 à 20:26 (Édité le 2 avril 2016 à 21:37)
Merci de votre réponse
julienb Le 4 avril 2016 à 06:47 (Édité le 4 avril 2016 à 06:48)
$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
pain Le 4 février 2020 à 16:25 (Édité le 1 janvier 1970 à 01:00)
Profil introuvable Le 20 mars 2020 à 18:06 (Édité le 1 janvier 1970 à 01:00)
Hello @pain,
Crée un nouveau topic pour obtenir de l'aide 😉