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 :

Savoir si le texte extrait de la BDD est contenu dans une variable ?


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut Savoir si le texte extrait de la BDD est contenu dans une variable ?
    Bonjour,

    J'ai le problème suivant :

    je voudrais comparer le texte récupéré dans une BDD à une variable. Pour le moment, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q=mysql_query("SELECT categorie FROM ebooks_LH WHERE titre LIKE \"%$titre%\"") or die (mysql_error());
    Mais étant donné que la variable $titre est en général une version "allongée" de ce qui se trouve dans "titre" de la BDD (par ex. pour le titre d'un livre : "Les aventures de Tintin et Milou" au lieu de "Tintin et Milou"), comment faire pour qu'il prenne en compte toutes les occurrences de titre au sein de la variable $titre ?

    Merci !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Il suffit d'inverser le WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE '$titre' LIKE '%' || titre || '%'
    En SQL, les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets
    La double barre verticale est l'opérateur de concaténation.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Merci.

    Par contre ça ne marche toujours pas, je me demande si cela ne vient pas d'une recherche case sensitive ?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Met ta requête dans une variable et fais-en un echo avant de l'envoyer au serveur pour voir son texte exact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requete = "
    SELECT categorie 
    FROM ebooks_LH 
    WHERE '$titre' LIKE '%' || titre || '%'
    ";
    echo '<br />'.$requete;
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    ok il affiche bien la variable $title comme il faut
    du coup je ne vois pas d'où vient le problème, en sachant que si $title et title sont identiques, ça marche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT categorie FROM ebooks_LH WHERE 'Naruto, Tome 45 : Konoha, théâtre de guerre !!' LIKE '%' || titre || '%

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Et qu'y a t-il comme données selon toi correspondantes dans la colonne titre ?

    Je viens de faire un petit test. Il semble que MySQL n'aime pas l'opérateur de concaténation normalisé || !

    Essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE '$titre' LIKE CONCAT('%', titre, '%')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Dans la colonne titre il y a, dans l'exemple cité :

    "Naruto, tome 45"

    Sinon la nouvelle suggestion ne fonctionne pas

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Erreur ou pas de résultat ?

    Je viens de tester sur une de mes tables et ce principe fonctionne.
    Dans la table j'ai un username = 'plemenager' et la requête suivante me donne le bon résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM users 
    WHERE 'plemenager Einstein' LIKE CONCAT('%', username, '%')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $title=addslashes($title);
    			if ($title!=null) {
    			$q=mysql_query("SELECT categorie FROM ebooks_LH WHERE titre LIKE '%$title%'") or die (mysql_error());
    				if ($q==true) { 
    				$r=mysql_fetch_array($q);
    				}
    		  }
    ce qui marche

    dès que j'utilise ton code, ça ne fait pas d'erreur, juste pas de résultat.

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Ton code fonctionne si $title est égal ou inclus dans titre mais tu demandais l'inverse il me semble.
    Je ne comprends pas pourquoi mon code ne fonctionnerait pas chez toi.

    As-tu testé la requête directement dans MySQL avec des valeurs qui devraient logiquement retourner un résultat ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Oula, oui c'est curieux, ta requête directement effectuée dans MySQL ne retourne aucun résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT categorie 
    FROM ebooks_LH
    WHERE 'Naruto' LIKE CONCAT('%', titre, '%')
    Pourtant les champs 'categorie' et 'titre' existent bien, la table s'appelle bien ebooks_LH, et il y a bien un titre dans la base qui contient le mot "Naruto".


  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Il faudrait te décider sur le sens de la condition !

    Au début, tu as fait une requête avec ce WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE titre LIKE '%$titre%'
    Ceci suppose que la variable $titre soit égale ou incluse dans la colonne titre.
    Si titre = 'Naruto, tome 45' et $titre = 'Naruto' => OK
    Si titre = 'Naruto' et $titre = 'Naruto, tome 45' => KO

    Mais tu as dit toi-même dans ton premier message que c'est le deuxième cas qui te préoccupe :
    Mais étant donné que la variable $titre est en général une version "allongée" de ce qui se trouve dans "titre" de la BDD
    Ce à quoi j'ai répondu qu'il fallait inverser la condition pour arriver à ma requête qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE '$titre' LIKE CONCAT('%', titre, '%')
    Si $titre = 'Naruto, tome 45' et titre = 'Naruto' => OK
    Si $titre = 'Naruto' et titre = 'Naruto, tome 45' => KO

    Après avoir essayé ma requête directement dans MySQL, tu dis dans ton dernier message :
    il y a bien un titre dans la base qui contient le mot "Naruto".
    J'ai l'impression qu'on se retrouve dans le cas de la première requête !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Non, non, je me suis mal exprimé.

    Quand je dis "dans la base il y a le mot Naruto", il y a dans la base :

    "Naruto, tome 44"

    et dans la variable $titre :

    "Naruto, Tome 44 : les aventures blablabla"

  14. #14
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par cyberlp Voir le message
    il y a dans la base :

    "Naruto, tome 44"

    et dans la variable $titre :

    "Naruto, Tome 44 : les aventures blablabla"
    Si le jeu de caractères utilisé dans la BDD est sensible à la casse et si le texte que tu viens de donner est strictement celui-là, c'est normal que tu n'aies pas de réponse avec ma requête !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Si ça vient de ça, je fais comment, je mets UPPER() avant titre et $titre dans la requête ?

  16. #16
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Tu peux en effet essayer comme ça ou jouer avec COLLATE.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT categorie FROM ebooks_LH WHERE UPPER('$titre') LIKE UPPER(CONCAT('%', titre, '%'))"
    comme cela ?

    pas d'erreur mais toujours pas d'affichage...

Discussions similaires

  1. [Batch] Savoir si un mot est contenu dans une variable
    Par masiuxus dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 31/10/2010, 13h57
  2. Réponses: 6
    Dernier message: 28/04/2009, 22h15
  3. Tronquer le texte contenu dans une variable object ?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/06/2008, 15h08
  4. Réponses: 18
    Dernier message: 27/10/2006, 14h15
  5. [VBA-E] Savoir si une cellule est contenue dans une plage
    Par psych0o0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2006, 14h12

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