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 :

Une requete contient % et ne fonctione pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut Une requete contient % et ne fonctione pas
    Bonjour,

    J'ai un souci lors de l'execution d'une requete. J'utilise des variables dans ma requete et lorsque ces variables, qui sont traitées comme des chaines de caractères, contiennent un % la requete ne s'execute pas

    Je vous joins le code en espèrant m'être fait comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
               //Recupération des données de mon formulaire
     
                        $obj=$_POST['o'.$restous[0]];
                                   ...
     
        $inser1bis=mysql_query("update ".$restable[1]." set                
                         nommensrea='$libelle',
                         objectifmensrea='$obj',  //c'est cette variable qui pose probleme
                         objmensrea=$objnum,                                                                                                                                    
                         importancemensrea='$importance',                          
                         socperfmensrea='$socperf', 
                         meilleur='$best',
                         permensrea='$per'
                         where nummensrea=".$restous[0]);
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    tu as verifié que tu as bience que tu veux pour ta variable $obj en faisant un echo ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Oui, quand je fais un echo, il affiche 97% par exemple

    par contre je ne sais pas si cela peut aider mais quand je fais un printf de la requete il me met comme erreur : Warning: printf(): too few arguments in /var/www/html/tbpilotage/admin/realisation/validmajrea.php on line 87

    Et quand j'enleve "objectifmensrea='$obj', ", la requete s'execute très bien

  4. #4
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Le modulo est un caractère réservé pour sprintf et une *commande* en SQL.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    ok macbook, mais y a t il moyen de l'utiliser comme un caractère et non comme un modulo ou une commande, ou faut il que je l'enleve de mes variables?

  6. #6
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    et avec mysql_real_escape_string($obj) ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    il me met une erreur :
    Fatal error: Call to undefined function: mysql_real_escape_string() in /.../validmajrea.php on line 80

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    salut kornmuse90,

    ca va?pk tu fais pas un implode si ça doit tjs te donner des % ??
    A moins que je n'ai pas compris ce qui te pose pb.

  9. #9
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Je ne comprends pas cette ligne :

    <?php
    $obj
    =$_POST['o'.$restous[0]];&#160;
    ?>

    Phpsyntaxcolor powered by decabodi.com
    C'est quoi $restous[0] comme donnée ?
    Autrement tu peux remplacer le modulo par &#37;, mais tu auras une redondance dans ta table, il vaut mieux l'afficher dans le script que de l'enregister. Tu gagneras en place dans ta BDD.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Non en fait des fois la variable '$obj' peut prendre comme valeur une chaine de caractères avec un % dedans(exemple : "97%") mais aussi d'autres chaines de caractères(exemple : "5jours").

    Cette variable se situe dans un tant que et le but de ce tant que c'est de faire la mise a jour d'un tableau et donc tant qu'on est pas a la fin du tableau on fait cette mise a jour, c'est pour cela que la variable $obj peut prendre plusieurs chaines de caractères différentes

  11. #11
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    meme comme ça il te met call to undefined function?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $inser1bis=mysql_query("update ".$restable[1]." set               
                         nommensrea='$libelle',
                         objectifmensrea='".mysql_real_escape_string($obj)."',  //c'est //cette variable qui pose probleme
                         objmensrea=$objnum,                                                                                                                                   
                         importancemensrea='$importance',                         
                         socperfmensrea='$socperf',
                         meilleur='$best',
                         permensrea='$per'
                         where nummensrea=".$restous[0]);

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    la variable $_POST['o'.$restous[0]] est une variable issue d'un formulaire qui concatene 'o' pour objet et $restous[0]pour le nom de la table car j'utilise plusieurs tables

    Je suis désolé si ca peut etre incompréhensible pour vous

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    malheureusement gofono_bass meme ta méthode ne marche pas.

    J'ai toujours la meme erreur

  14. #14
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    .. .. parce que le but est d'echapper le caractere % pour eviter que sql le prenne pour un caractere spécial, alors si tu ne peux pas l'echapper..
    Tu as quelle version de mysql() :

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Si tu souhaites approximer le résultat d'une requête avec une wildcard comme %, alors tu dois utiliser LIKE et non =.

    Lorsque tu dis que la requête "ne s'exécute pas", que veux-tu dire ?
    As-tu essayé de mettre or die(mysql_error()) à la suite de mysql_query() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = '...';
    mysql_query($sql)
       or die(mysql_error());

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Ma version est la 3.23.58 je crois

  17. #17
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je reviens sur mon message précédent.

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = "update ".$restable[1]." set               
                         nommensrea='$libelle',
                         objectifmensrea='$obj',  //c'est cette variable qui pose probleme
                         objmensrea=$objnum,  
                         importancemensrea='$importance',                         
                         socperfmensrea='$socperf',
                         meilleur='$best',
                         permensrea='$per'
                         where nummensrea=".$restous[0];
     
    $inser1bis=mysql_query($sql)
       or die(mysql_error());

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Kirkis
    Salut

    Si tu souhaites approximer le résultat d'une requête avec une wildcard comme %, alors tu dois utiliser LIKE et non =.

    Lorsque tu dis que la requête "ne s'exécute pas", que veux-tu dire ?
    As-tu essayé de mettre or die(mysql_error()) à la suite de mysql_query() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = '...';
    mysql_query($sql)
       or die(mysql_error());

    Je viens d'essayer et ca met toujours la meme erreur

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Kirkis
    Je reviens sur mon message précédent.

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = "update ".$restable[1]." set               
                         nommensrea='$libelle',
                         objectifmensrea='$obj',  //c'est cette variable qui pose probleme
                         objmensrea=$objnum,  
                         importancemensrea='$importance',                         
                         socperfmensrea='$socperf',
                         meilleur='$best',
                         permensrea='$per'
                         where nummensrea=".$restous[0];
     
    $inser1bis=mysql_query($sql)
       or die(mysql_error());

    Il m'affiche : 104You have an error in your SQL syntax near ' importancemensrea='N', ' at line 4

  20. #20
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    On est loin de $obj là ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Creer une requete SQL avec la fonction PIVOT
    Par SALIA LOUA OLIVIER dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/10/2013, 15h35
  2. Réponses: 2
    Dernier message: 24/09/2009, 17h48
  3. Une requete que je n'arrive pas a trouver
    Par patchouli dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/04/2007, 12h31
  4. Réponses: 2
    Dernier message: 12/01/2005, 23h08
  5. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 19h49

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