[PHP] Fonction Match Qui Ne Fonctionne Pas

max1395 Messages postés 95 Statut Membre -  
max1395 Messages postés 95 Statut Membre -
Bonjour,

Je voudrais créer un site web qui fait des recherches sur des vidéos, pour chaque vidéos que j'ajoute je rentre ces informations :
-ID : L'ID de la vidéos
-Titre : Son titre
-Lien : Le lien vers la vidéos
-Image : Une image pour représenter la vidéos sur la page de recherche
-Keyword1 : Un mot clé pour la recherche
-Keyword2 : Un deuxième mot clé pour la recherche
-Keyword3 : Un troisième mot clé pour la recherche

Pour que mon moteur de recherche soit pertinent, j'utilise la fonction MATCH, mais pour l'instant mes essais non rien donnée, la fonction ne marche pas, ça n'affiche rien même quand un mot clé est entré. Voilà le code du formulaire :

<FORM method=post action="search.php">   
<INPUT type=text name="search" size="50">    
<INPUT type="submit" value="Search">   
</FORM>   


Et la page de recherche qui affiche les résultats :

<?php   
// Déclaration des paramètres de connexion   
$host ="localhost";   
$user ="root";   
$bdd ="******";   
$passwd  ="*********";   
$fulltext = $_POST['search'];   

// Connexion au serveur   
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");   
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");   

// Creation et envoi de la requete   
$query = "SELECT * FROM Video WHERE MATCH (Keyword1,Keyword2) AGAINST ('$fulltext')";   
$result = mysql_query($query);   
//Test si la requête est vide    
if(!$result)   
{   
echo "No result..."   
}   
else   
// Recuperation des resultats   
while($row = mysql_fetch_row($result))   
{   
?>   
<a href="<?php echo $row['Lien']; ?>">   
<?php echo $row['Image']; ?>   
<p style="width: 40px;">   
<?php echo $row['Titre']; ?>   
</a>   
<?php   
}   
}   
?>   


Bien sûre rien n'est afficher, donc ce qui montre que la requête n'est pas vide vu que je n'ai pas le message d'erreur, mais rien ne s'affiche, pourquoi ?

Merci de vos réponses

A voir également:

3 réponses

dannydouby Messages postés 178 Statut Membre 6
 
à la place de mettre !$result, essaye de mettre isset($result) , peut être que c'est sa mais je ne suis pas sur
0
Utilisateur anonyme
 
Salut,

Je pense que ton erreur vient de la requête.
$query = "SELECT * FROM Video WHERE MATCH (Keyword1,Keyword2) AGAINST ('$fulltext')";


Doit s'écrire :

$query = "SELECT * FROM Video WHERE MATCH (Keyword1,Keyword2) AGAINST (".$fulltext.")";


les " et les ' sont complétements différents, il ne faut en choisir qu'un pour délimiter.

En effet, si on veut ajouter le contenu d'une variable dans une autre, on doit mettre un . qui veut dire ET.

Exemple :
$texte_variant = "UN AUTRE";    
$texte_final = "UN TEXTE ET ".$texte_variant;


C'est une première chose.
Maintenant, parlons Sécurité.

Tu vas finalement te retrouver avec un site entièrement piratable. Tu ne vérifies même pas le contenu de $_POST['search'], qui peut être bien autre chose qu'un simple mot clef au bon vouloir de l'utilisateur, qui n'est pas toujours gentil.

IL FAUT UTILISER LES REQUÊTES PRÉPARÉES !!
C'est plus simple, et ça t'empêchera de voir ton site se faire pirater.

Un excellent tutoriel A LIRE EN ENTIER.
http://www.siteduzero.com/tutoriel-3-34790-pdo-interface-d-acces-aux-bdd.html

Donc tu vas devoir recoder tout ça, enfin je te le conseille vivement après c'est toi qui voit ...

Musicalement,
DJ Fire-Bl@ck.
0
max1395 Messages postés 95 Statut Membre 6
 
Non enfaîte le problème ne vient pas de là, j'ai tester la requête dans Phpmyadmin, et ça ne renvoi rien, alors que ça devrait, je ne sais pas du tout où peut être le problème, voilà ma table Video :
-- phpMyAdmin SQL Dump   
-- version 3.4.10.1deb1   
-- https://www.phpmyadmin.net/   
-- Client: localhost   
-- Généré le : Sam 07 Juillet 2012 à 13:26   
-- Version du serveur: 5.5.24   
-- Version de PHP: 5.3.10-1ubuntu3.2   

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";   
SET time_zone = "+00:00";   


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;   
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;   
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;   
/*!40101 SET NAMES utf8 */;   

--   
-- Base de données: '*********'   
--   

-- --------------------------------------------------------   

--   
-- Structure de la table 'Video'   
--   

CREATE TABLE IF NOT EXISTS 'Video' (   
  'ID' int(11) NOT NULL AUTO_INCREMENT,   
  'titre' text NOT NULL,   
  'lien' text NOT NULL,   
  'image' text NOT NULL,   
  'keyword1' text NOT NULL,   
  'keyword2' text NOT NULL,   
  'keyword3' text NOT NULL,   
  PRIMARY KEY ('ID'),   
  FULLTEXT KEY 'Keyword1' ('keyword1','keyword2'),   
  FULLTEXT KEY 'Keyword1_2' ('keyword1')   
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;   

--   
-- Contenu de la table 'Video'   
--   

INSERT INTO 'Video' ('ID', 'titre', 'lien', 'image', 'keyword1', 'keyword2', 'keyword3') VALUES   
(1, 'KDSNFODSNFOSDFNSON', 'www.google.fr', 'jnononono', 'HORREUR', 'SANG', 'MEURTRE'),   
(2, 'ONONONO', 'ww.google.fr', 'ONONON', 'COMIQUE', 'DROLE', 'ACTION');   

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;   
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;   
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  



Avec une requête du type :
SELECT * FROM Video WHERE MATCH(keyword1,keyword2,keyword3) AGAINST('COMIQUE');

Rien n'est renvoyé :s
0