Moteur de recherche

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 : Moteur de recherche

par Nico128 » 25 mai 2006, 21:51

Merci ça marche !

Pour la requete, je suis en train d'essayer avec UNION, je crois que ça devrais marcher, je vous redis!

par jojolapine » 21 mai 2006, 20:46

je te propose une début de code:
$tableau=split(" ",$_post['recherche']); //on sépare le contenu de la recherche avec les espaces
//le tout est stocké dans tableau
//ensuite on traite:
foreach($tableau as $value){
  if (!empty($value)) {
    $requete .= " AND titre LIKE CONVERT( _utf8 '%".$value."%' USING latin1) COLLATE latin1_german1_ci OR texte LIKE CONVERT( _utf8 '%".$value."%' USING latin1) COLLATE latin1_german1_ci";
  }
}
//pour chaque mot présent dans la chaine du formulaire
//on ajoute à la requete 

par Nico128 » 21 mai 2006, 20:33

alors je vois ce que tu veux dire, je te conseil d'aller voir du côter de la fonction split()...
J'ai regarder et jai pas tous compris le fonctionement. Je reprend leur exemple :
<?php
// Les délimiteurs peuvent être des tirets, points ou slash
$date = "04/30/1973"; 
list($month, $day, $year) = split('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";
?> 
Mais moi je sais pas combien de mot clé le visiteur va mettre donc je devrais créé un nombre ilimité de variable à l'intérieur de list() ? Si oui comment faire ?
alors là, pour le code je te laisse traduire, mais en français, tu ferai quelque chose comme ça:

Code : Tout sélectionner

recherche ... où la news est de type $console_salon OU la news est de type $console_portable OU (la news est de type $console_salon ET de type $console_portable)
Le problème avec ça, c'est que si la première condition est vrai alors la requete va pas se préocupé du reste. Voilà ce que jai mis :
$requete = 'SELECT * FROM news WHERE validation=1';
if (!empty($mot)) {
    $requete .= " AND titre LIKE CONVERT( _utf8 '%".$mot."%' USING latin1) COLLATE latin1_german1_ci OR texte LIKE CONVERT( _utf8 '%".$mot."%' USING latin1) COLLATE latin1_german1_ci";
}
if (!empty($auteur)) {
    $requete .= " AND auteur LIKE CONVERT( _utf8 '%".$auteur."%' USING latin1) COLLATE latin1_german1_ci";
}
if (!empty($console_salon)) {
    $requete .= " OR categorie_salon = '".$console_salon."'";
} 
if (!empty($console_portable)) {
    $requete .= " OR categorie_portable = '".$console_portable."'";
} 
if (!empty($console_concurence)) {
    $requete .= " OR categorie_concurence = '".$console_concurence."'";
} 
if (!empty($cat_economie)) {
    $requete .= " OR categorie_economie = '".$cat_economie."'";
} 
$requete .= " ORDER BY date_news DESC limit ".$limite.",".$nombre;

par jojolapine » 21 mai 2006, 19:50

Premièrement ce que j'aimerais corrigé, c'est que si on mets plusieurs mot clés le script va pas rechercher la chaine directe dans la news, mais séparément. Vous voyez ce que je veux dire ?
alors je vois ce que tu veux dire, je te conseil d'aller voir du côter de la fonction split()...
Deuxièmement, c'est assez dur a expliquer...J'aimerais que si l'on choisis un type de news par exemple $console_salon et un autre par exemple $console_portable, la recherche se fait soit si la news est de type $console_salon ou alors de type $console_portable ou alors les deux.

Parce qu'avec le script ci-dessu, il va rechercher toutes les news qui sont de type $console_salon ET $console_portable. SI je mets un OR d'après ce que j'imagine ça va pas m'afficher ce que jaimerais.
alors là, pour le code je te laisse traduire, mais en français, tu ferai quelque chose comme ça:

Code : Tout sélectionner

recherche ... où la news est de type $console_salon OU la news est de type $console_portable OU (la news est de type $console_salon ET de type $console_portable)

Moteur de recherche

par Nico128 » 21 mai 2006, 18:43

Salut a tous...! Je souhaiterais faire un moteur de recherche qui chercherait des news dans ma base de donnée.

J'ai rechercher dans le forum et la solution est assez minime et c'est pas vraiment le top...

Dans mon forumulaire j'ai :
un champ pour les mot clé, la variable est $mot
un champ pour l'auteur, la variable est $auteur
un bouton pour le type de la news, la variable est $console_salon
un bouton pour le type de la news, la variable est $console_portable
un bouton pour le type de la news, la variable est $console_concurence
un bouton pour le type de la news, la variable est $cat_economie

(il y a 4 type de news, mais 3 sont secondaires)
$requete = 'SELECT * FROM news WHERE validation=1';
if (!empty($mot)) {
    $requete .= " AND titre LIKE CONVERT( _utf8 '%".$mot."%' USING latin1) COLLATE latin1_german1_ci OR texte LIKE CONVERT( _utf8 '%".$mot."%' USING latin1) COLLATE latin1_german1_ci";
}
if (!empty($auteur)) {
    $requete .= " AND auteur LIKE CONVERT( _utf8 '%".$auteur."%' USING latin1) COLLATE latin1_german1_ci";
}
if (!empty($console_salon)) {
    $requete .= " AND categorie_salon = '".$console_salon."'";
} 
if (!empty($console_portable)) {
    $requete .= " AND categorie_portable = '".$console_portable."'";
} 
if (!empty($console_concurence)) {
    $requete .= " AND categorie_concurence = '".$console_concurence."'";
} 
if (!empty($cat_economie)) {
    $requete .= " AND categorie_economie = '".$cat_economie."'";
} 
$requete .= " ORDER BY date_news DESC limit ".$limite.",".$nombre;


// on envoie la requ&ecirc;te
$req = mysql_query($requete) or die('Erreur SQL !<br>'.$requette.'<br>'.mysql_error());
Premièrement ce que j'aimerais corrigé, c'est que si on mets plusieurs mot clés le script va pas rechercher la chaine directe dans la news, mais séparément. Vous voyez ce que je veux dire ?

Deuxièmement, c'est assez dur a expliquer...J'aimerais que si l'on choisis un type de news par exemple $console_salon et un autre par exemple $console_portable, la recherche se fait soit si la news est de type $console_salon ou alors de type $console_portable ou alors les deux.

Parce qu'avec le script ci-dessu, il va rechercher toutes les news qui sont de type $console_salon ET $console_portable. SI je mets un OR d'après ce que j'imagine ça va pas m'afficher ce que jaimerais.

J'espère que vous avez compris ce que jaimerais faire... :D

Merci d'avance...!