IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

recherche fulltext dans une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut recherche fulltext dans une table
    Bonjour à tous,
    je voudrais effectuer la recherche d'un mot tappé dans une zone text d'un formulaire. Une fois, le formulaire envoyè je voudrais extraire tous les enregistrements qui peuvent contenir le mot saisi.

    ma table oggetti je l'ai créée ainsi
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `oggetti` (
      `idoggetti` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `titolo` varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
      `autore` varchar(45) NOT NULL,
      `descrizione` text CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
      `path` varchar(100) NOT NULL,
     
      PRIMARY KEY (`idoggetti`) USING BTREE,
      FULLTEXT KEY `full` (`descrizione`,`titolo`)
    ) ENGINE=MyISAM AUTO_INCREMENT=63 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED;


    à noter qu'il n'ya aucun probléme au niveau de la table.
    la zone de texte de mon formulaire s'appelle elementoricerca

    voici la requete qui me donne probléme

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT *  FROM oggetti where MATCH(descrizione, titolo) AGAINST('.$POST[elementoricerca].') ;

    lorsque je clique sur le boutton en saisissant par exemple le mot "france"
    voici l'erreur que j'obtient.

    Erreur SQL !
    SELECT * FROM oggetti where MATCH(descrizione, titolo) AGAINST(france) AND confermato=1
    Unknown column 'france' in 'where clause'

    Merci d'avance de votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut que le mot cherché soit entre apostrophes.
    Comme dans ton code PHP, tu as la mauvaise idée d'entourer la requête avec des apostrophes, il n'y en a plus autour des valeurs textuelles !

    Au passage...
    1) Il vaut mieux éviter la guerre des étoiles !

    2) Un code indenté et aéré est plus agréable à lire et à débugguer.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "
    	SELECT -- les colonnes nécessaires et pas étoile !
    	FROM oggetti 
    	WHERE MATCH(descrizione, titolo) AGAINST('.$POST[elementoricerca].')
    ";
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Il faut que le mot cherché soit entre apostrophes.
    Comme dans ton code PHP, tu as la mauvaise idée d'entourer la requête avec des apostrophes, il n'y en a plus autour des valeurs textuelles !

    Au passage...
    1) Il vaut mieux éviter la guerre des étoiles !

    2) Un code indenté et aéré est plus agréable à lire et à débugguer.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "
    	SELECT -- les colonnes nécessaires et pas étoile !
    	FROM oggetti 
    	WHERE MATCH(descrizione, titolo) AGAINST('.$POST[elementoricerca].')
    ";
    j'ai mis les apostrophes mais ça marche toujours pas. dans le premier message j'ai écrit $POST et non pas $_POST. j'ai corrigé ça mais ca marche tjrs pas.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    "Ça marche pas" n'est pas un message d'erreur !

    Reposte ton nouveau code et décris un peu plus ce qui se passe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    "Ça marche pas" n'est pas un message d'erreur !

    Reposte ton nouveau code et décris un peu plus ce qui se passe.
    volia comme j'ai expliqué au premier message. je voudrais chercher un mot saisi dans une table.
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // on teste si le visiteur a soumis le formulaire de connexion
    if (isset($_POST['cerca']) && $_POST['cerca'] == 'Search') { 
       if ((isset($_POST['elementoricerca']) && !empty($_POST['elementoricerca'])) ) { 
        $base = mysql_connect ('localhost', 'root', ''); 
          mysql_select_db ('3dtube', $base); 
     $sql1 ='SELECT *  FROM oggetti where MATCH(descrizione, titolo) AGAINST("'.$_POST['elementoricerca'].'") AND confermato=1'; 
          $req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 
          $data1 = mysql_fetch_array($req1); 
          mysql_free_result($req1); 
    	  if($data1) echo $data1['descrizione'];
     
    	  mysql_close(); 
     
     
    	  $base = mysql_connect ('localhost', 'root', ''); 
          mysql_select_db ('3dtube', $base); 
    	    $sql2 ='SELECT *  FROM oggetti where idoggetti IN (SELECT idoggetti FROM tag WHERE MATCH(tag) AGAINST("'.$_POST['elementoricerca'].'"))'; 
          $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
          $data2 = mysql_fetch_array($req2); 
          mysql_free_result($req2); 
    }
    la premier requete affiche le résultam souhaité alors que la deuxiéme non. voici ce que j'obtient si je cherche le mot questa.

    1Erreur SQL !
    SELECT * FROM oggetti where idoggetti IN (SELECT idoggetti FROM tag WHERE MATCH(tag) AGAINST("questa"))
    Can't find FULLTEXT index matching the column list
    Merci bcp

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et la table tag a t-elle un index fulltext ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et la table tag a t-elle un index fulltext ?
    bonjour, oui la table tag a un index fulltext. vraiment je ne sais pas où est le probléme.

    merci

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Poste la description de la table tag.
    Le message d'erreur indique qu'il ne trouve pas d'index fulltext pour la colonne tag.

    Je t'avais donné la bonne méthode pour écrire les requêtes mais apparemment tu t'en fous.

    Maintenant je peux te dire aussi que ton code risque une injection SQL parce que tu ne protèges pas tes variables dans les requêtes.

    Un coup de t'en dira plus sur le sujet. Je crois même qu'il y a un tuto ou une FAQ sur le sujet chez Developpez.com.

    EDIT :
    Il y a même un sujet tout récent là-dessus dans ce même forum !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Poste la description de la table tag.
    Le message d'erreur indique qu'il ne trouve pas d'index fulltext pour la colonne tag.

    Je t'avais donné la bonne méthode pour écrire les requêtes mais apparemment tu t'en fous.

    Maintenant je peux te dire aussi que ton code risque une injection SQL parce que tu ne protèges pas tes variables dans les requêtes.

    Un coup de t'en dira plus sur le sujet. Je crois même qu'il y a un tuto ou une FAQ sur le sujet chez Developpez.com.

    EDIT :
    Il y a même un sujet tout récent là-dessus dans ce même forum !
    merci bcp vouz aviez raison c'etait un probléme au niveau de la table tag. merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche conditionnée dans une table
    Par doolar dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/03/2008, 21h17
  2. recherche automatique dans une table
    Par jesuisjosita dans le forum Access
    Réponses: 3
    Dernier message: 15/01/2007, 11h44
  3. [WinDev 10] Recherche multicritères dans une table
    Par Gonelle dans le forum WinDev
    Réponses: 4
    Dernier message: 19/07/2006, 14h50
  4. Rechercher minuscule dans une table
    Par pmonn dans le forum Access
    Réponses: 3
    Dernier message: 25/10/2004, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo