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 :

Caractères spéciaux sql ( - :


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut Caractères spéciaux sql ( - :
    Bonjour,

    Ma question concerne l'utilisation des parenthèses, deux points et tiret (-) dans les requetes sql.
    Est ce que c'est interdit? j'ai un SELECT qui ne fonctionne pas mais me retourne aucune erreur, ni aucun résultat.
    Après réflexion, l'erreur ne peut venir que ce ces caractères. Comment pouvoir les utiliser? (l'un des champs contient des chaines qui contiennent ces caractères, je ne peux malheureusement pas faire autrement).

    Merci. j'ai déjà essayé \ mais ca n'a pas l'air de changer grand chose.

    Gscorpio

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    non normalement il n'a aucun souci, on peut voir ta requête ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    SELECT * FROM liste_cours WHERE categorie='Adult Courses' AND titre='Refresher Course for Rusty Beginners' AND session='Autumn : 9 - 18 september 2008'

    Quand je supprime la partie "AND session=..." ca fonctionne.

    Merci encore

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Ca devrait fonctionner, j'imagine que t'as bien vérifié que ton enregistrement contenait exactement 'Autumn : 9 - 18 september 2008' ?
    Il y a plusieurs types de tirets et d'espaces, faudrait vérifier que cela soit exactement les mêmes, si t'as remplis ta table depuis un fichier, c'est possible que t'aies par exemple un tiret demi-cadratin au lieu d'un trait d'union ou des espaces insécables au lieu des espaces normaux.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Ben en fait la requete est remplie par une autre requete donc ca doit etre rougoureusement identique.
    Je remplis une liste déroulante à l'aide d'une requete (qui marche tiens... je viens de m'en rendre compte
    Et ensuite selon le résultat choisi, on lance cette autre requete. Mmmmh tout ça est bizarre. Je vais essayer de chercher en prenant en compte que la première requete fonctionne bien. Si tu me dis que ca doit marcher ya pas de raisons...
    Merci (ceci dit, si tu as du nouveaux ou une merveilleuse idée, je suis preneur)

    EDIT: J'ai changé quelques trucs mais ca ne marche toujours pas... je ne comprends vraiment pas. Peux tu me certifier qu'il n'y a aucune erreur (', ` ou autre) dans ma requete?
    SELECT * FROM `liste_cours` WHERE `categorie` = 'Adult Courses' AND `titre` = 'General Courses for Adult' AND `session` = 'Autumn (22 September 2008 to 18 January 2009)'

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    en quoi exactement est-ce que ça ne marche pas ?

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Si je le savais...
    En gros cette requête doit récupérer un ID (elle ne doit retourner qu'un seul enregistrement), mais ne retourne rien. Et elle ne me retourne aucune erreur.
    Cela se comporte exactement comme s'il ne trouvait aucun enregistrement alors que... je ne suis pas fou, comme je l'ai dit, cette requete est construite à partir d'une autre. Le contenu du WHERE est donc (du moins, est censé être) exactement ce qui est contenu dans la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete2="SELECT * FROM `liste_cours` WHERE `categorie` = '".$_POST["list1"]."' AND `titre` = '".$_POST["list2"]."' AND `session` = '".$_POST["list3"]."'";
     
    echo $requete2;
    $r=mysql_query($requete2) or die('Erreur SQL 
    !'.$requete2.'<br>'.mysql_error());
    $resultat2=mysql_fetch_array($r);
    echo "num :".mysql_num_rows($r);
    echo $resultat2['id'];
    mysql_num_rows vaut 0 et le or die ne m'indique rien du tout... $resultat['id'] est évidemment nul.

    Merci de votre aide

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    que donne le echo $requete2 sur la source HTML de ta page ?

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Ca semble ok aussi

    SELECT * FROM `liste_cours` WHERE `categorie` = 'Adult Courses' AND `titre` = 'General Courses for Adult' AND `session` = 'Autumn (22 September 2008 to 18 January 2009)'

  10. #10
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Y a peut-être un saut de ligne à la fin de ton champ dans ta table ? Sinon problème de correspondance d'encodages ? (pas sûr de ce que je dis là ^^ j'ai jamais eu ce genre de soucis)

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    et en essayant comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND LIKE `session` = '%Autumn (22 September 2008 to 18 January 2009)%'
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND LIKE `session` = '%Autumn_(22_September_2008_to_18_January_2009)%'

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    J'ai également pensé à l'encodage, mais ca me parait bizarre quand même...
    Antoun, tes 2 solutions ne donnent pas de meilleur résultat.

    Le problème vient forcément de ces signes. Mais je n'arrive pas à comprendre ce qui cloche. L'encodage est UTF-8, je viens de tout passer en UTF-8 sans BOM (à cause d'un autre soucis) et j'ai remarqué que certaines pages restaient en ANSI (surement car aucun signe particulier), ce qui n'est pas le cas de la page qui ne marche pas ici

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Désolé, je me suis trompé dans mes tests. Il faut utiliser LIKE et non =.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND LIKE `session` LIKE '%Autumn (22 September 2008 to 18 January 2009)%'
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND LIKE `session` LIKE '%Autumn_(22_September_2008_to_18_January_2009)%'

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    En fait j'avais corrigé.
    Par contre j'avais mis AND `session` LIKE '%machin%'

    Il faut mettre 2 fois Like comme tu as mis?

    Sinon j'ai du neuf, j'ai supprimé les caractères qui posent problème, ca ne marche pas mieux
    Ca marche pour certains tests (ce qui montre que la structure de la requete est bonne) mais pas pour d'autres. J'ai trouvé certains doubles espaces mais en les corrigeant ca ne change rien. Puis de toute facon, le double espace est dans le WHERE, mais aussi dans la requete. QU'EST CE QUI VA PAAAAAAS???
    Raaah je hais ce genre de problème.

    Merci beaucoup pour ta patience, même si comprendrais si tu finis par te lasser

  15. #15
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Citation Envoyé par gscorpio Voir le message
    En fait j'avais corrigé.
    Par contre j'avais mis AND `session` LIKE '%machin%'

    Il faut mettre 2 fois Like comme tu as mis?
    pas du tout, j'ai écris n'importe quoi mais tu as rétablis de toi-même

    Citation Envoyé par gscorpio Voir le message
    Sinon j'ai du neuf, j'ai supprimé les caractères qui posent problème, ca ne marche pas mieux
    Ca marche pour certains tests (ce qui montre que la structure de la requete est bonne) mais pas pour d'autres. J'ai trouvé certains doubles espaces mais en les corrigeant ca ne change rien. Puis de toute facon, le double espace est dans le WHERE, mais aussi dans la requete. QU'EST CE QUI VA PAAAAAAS???
    Raaah je hais ce genre de problème.

    Merci beaucoup pour ta patience, même si comprendrais si tu finis par te lasser
    pourrais-tu détailler les tests que tu as fait ?

    Si ta base est online, tu peux aussi m'envoyer les coordonnées de connexion par MP pour que j'essaie d'y comprendre qqch...

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Merci d'êter encore là

    Pour le mot de passe ca va être possible, je suis sur que tu es honnete mais on sait jamais. De toute facon je ne pense pas que tu en ais besoin.

    Le problème se situe sur cette page http://www.alliancefrancaisecork.eu/...page=enrolment au niveau des 3 champs (catégorie, titre, session).
    Ces champs sont remplis grace à AJAX.

    La table est donc composée des champs id, categorie, titre, session et prix.

    Le but est de remplir les 3 listes. Quand un user choisit un cours (caractérisé par catégorie, session et titre), on va écrire son nom dans une nouvelle table dont le nom est l'ID du cours.
    C'est précisément cette requete qui ne marche pas (récupérer l'id avec les 3 champ mentionnés ci-dessous).

    Pour les tests, comme je t'ai dit, j'ai l'impression que le problème vient du champs "session" car quand je l'enlève, la requete marche à tous les coups. Cependant, il faut aussi noter que pour certains cours, la requete marche bien.

    Bon si vraiment ca t'aiderait, je te donnerai un accès temporaire à la base, il faudra juste que tu me donnes une page horaire ou tu es dispo.
    Je dois y aller, là, donc si tu as des questions n'hésites pas.

    Et un grand merci pour ton aide.

    Gscorpio

  17. #17
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Citation Envoyé par gscorpio Voir le message
    Pour les tests, comme je t'ai dit, j'ai l'impression que le problème vient du champs "session" car quand je l'enlève, la requete marche à tous les coups. Cependant, il faut aussi noter que pour certains cours, la requete marche bien.
    si tu ne dis pas lesquels marchent et lesquels ne marchent pas, on en est réduits à jouer aux devinettes.

    Citation Envoyé par gscorpio Voir le message
    Bon si vraiment ca t'aiderait, je te donnerai un accès temporaire à la base, il faudra juste que tu me donnes une page horaire ou tu es dispo.
    disons que ça me permettrait de faire un gros paquets de tests moi-même plutôt que de te les faire faire à l'aveuglette et au compte-gouttes.

    Je pourrai faire ça ce soir ou demain soir à partir de 22h.

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    Ok on verra demain soir si le problème se pose toujours.

    Pour les cours qui marchent, il ne semble pas y avoir de logique...

    Exemple qui marche pas:
    categorie ='Adult Courses'
    titre="General Courses for Adult'
    session= '22 September 2008 to 18 January 2009'

    Exemple qui marche
    categorie="Summer Courses"
    titre="Rusty Beginner"
    session="8 September to 17 September 2009"

    Edit: Euh... ce matin aucun problème. Je déteste ces trucs. Je suis quasiment sûr de rien avoir changé de spécial. Visiblement ca marche pour tous les enregistrements. Je reviendrais si ca replante, ca m'embete un peu de pas savoir ce qui clochait. Merci beaucoup pour ton aide et je m'excuse pour t'avoir fait perdre ton temps. Enfin, peut etre qu'une des modif a été décisive, et que le fait de redémarrer FF (vider le cache) a changé la donne. J'en sais rien en fait. Merci en tout cas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2007, 11h28
  2. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40
  3. [SQL] Caractères spéciaux transformés
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 14/08/2006, 18h06
  4. SQL et caractères spéciaux
    Par winx69 dans le forum SGBD
    Réponses: 3
    Dernier message: 29/07/2005, 14h00
  5. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38

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