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 :

Requête SQL avec REGEXP en PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 79
    Par défaut Requête SQL avec REGEXP en PHP
    Bonjour chers amis,

    Je ne sais pas trop par où commencer donc je vais essayer d'être le plus bref possible.

    J'ai une page PHP avec un champ texte et un bouton Submit. Je tape le mot "test" et appuie sur le bouton. La variable $KeyW prend la valeur "test" et grâce à une requête SQL que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $GetIssue = 'SELECT *
    			FROM ISSUETASK
    			WHERE ((title like "%'.$KeyW.'%")
    			OR (iduser IN (select distinct iduser from user where name like "%'.$KeyW.'%"))
    			OR (idproject IN (select distinct idproject from project where idclient IN (select distinct idclient from client where clientname like "%'.$KeyW.'%")))
    			OR (datetimestart like "%'.$KeyW.'%")
    			OR (duedate like "%'.$KeyW.'%")
    			OR (priority like "%'.$KeyW.'%")
    			OR (description like "%'.$KeyW.'%")
    			OR (idissue IN (select idissue from followupcomplete where thingsdone LIKE "%'.$KeyW.'%")))
    			AND close != "'.$Close.'"
    			AND idtype like "%'.$Type.'%"';
    Le résultat s'affiche dans un tableau plus bas.

    Sur mon formulaire, j'ai ajouté une checkbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <tr>
        <td>
            <label for="Fulled">Expression complete :</label>
            <input type="checkbox" id="Fulled" <?PHP if($_GET["Fulled"] == "on"){echo "checked='checked'";} ?> name="Fulled"/>
        </td>
    </tr>
    Jusque ici tout fonctionne parfaitement !
    Ce que je voudrais faire c'est que lorsque j'appuie sur le bouton submit et que la case est cochée, la requête change un petit peu, pour m'afficher seulement les résultats qui répondent à ma condition REGEXP. Exemple : avant j'avais les résultats "Jean-Test", "Test2", "Test Lol", "Le test" et je voudrais que les résultats avec la case cochée soient : "Test Lol" et "Le test", que la condition soit : "rien ou un espace" AVANT le mot clé, et "rien ou un espace" APRÈS le mot clé (et sans casse). En PCRE ça donne : #$KeyW#i ($KeyW étant le mot clef, donc c'est une variable PHP).

    Maintenant je voudrais ajouter cela à ma requête SQL (donc en POSIX), voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if($_GET["Fulled"] == "on")
    {
    	$GetIssue .= "AND idcategory = 1 AND $KeyW REGEXP '^$KeyW$'";
    }
    else
    {
    	$GetIssue .= 'and idcategory = 1';
    }
     
    $ResultGetIssue = mysql_query($GetIssue);
    Ici, Fulled est ma checkbox, donc si j'ai coché la checkbox cela s'ajoute à la fin de ma requête (ne prenez pas en compte le idcategory il est indépendant du REGEXP) sinon il s'agit d'une recherche normale.

    OR tout ceci ne fonctionne pas et j'aimerais bien savoir pourquoi ... L'erreur :
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\sasCopy\search.php on line 489

    Ligne 489 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($ResultIssue = mysql_fetch_array($ResultGetIssue))
    Voila j’espère que vous m'aurez compris, si vous avez besoin de plus d'infos je suis là Merci d'avance

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $GetIssue .= "AND idcategory = 1 AND $KeyW REGEXP '^$KeyW$'";
    A ton avis, savoir quel $ correspond à une variable et lequel correspond à la regexp, c'est décidé à pile ou face ?

    EDIT
    D'ailleurs, à quoi peut bien te servir la condition $KeyW REGEXP '^$KeyW$' ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 79
    Par défaut
    C'est justement la mon problème ^^ Je n'ai jamais utilisé le REGEXP auparavant et je me demandais si on pouvais mettre le nom d'une variable PHP sans que le $ ne gêne ...

    Et sinon je ne voit pas trop comment s'utilise cette fonction si tu peux me guider

    EDIT : D'habitude je trouve ce dont j'ai besoin sur Open Classrooms mais ils traîtent à peine le sujet des REGEXP en POSIX ...

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Le plus simple est d'utiliser une chaine avec des quotes simples (donc sans interprétation) et de concaténer ta variable
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $GetIssue .= 'AND idcategory = 1 AND ma_colonne REGEXP \'^'.$KeyW.'$\' ';
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 79
    Par défaut
    D'accord merci mais pour ma_colonne je met quoi ? Car dans ma requête je traite plusieurs colonnes. Je pensait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $GetIssue .= 'AND idcategory = 1 AND mysql_query($GetIssue) REGEXP \'^'.$KeyW.'$\' ';
    Mais cela m'affiche le même message d'erreur qu'avant.

    EDIT Sinon avec une seule colonne cela marche très bien Merci

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En fait, je pense qu'il faut que tu remplaces les morceaux avec "like" par les regex, par exemple '(title like "%'.$KeyW.'%")' devient '(title REGEXP \'^'.$KeyW.'$\' )'.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  2. [SQL] Comparer résultat d'une requête Sql avec php
    Par nicoxweb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2007, 22h46
  3. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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