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 :

Jeux et Collations avec d' et l'


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut Jeux et Collations avec d' et l'
    Bonjour,

    J'ai lu l'excellent tutoriel de Antoine Dinimant Jeux de caractères et collations sous MySQL 5

    J'ai besoin de rendre possible une requête comme d'avoir = d-avoir et l'exploiter = l-exploiter.

    Comment on peut faire ça ?

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    En gros tu veux faire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET colonne= REPLACE(REPLACE(colonne,'d\'','d-'),'l\','l-')
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    J'ai peut être pas bien compris ce que tu veux dire

    Ma requête est comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $mysql->query("SELECT ville FROM mairie WHERE ville='".addslashes($url)."'");
    Exemple dans ma base
    colonne 'ville' = d'ail existe (ça c'est ok) mais j'aimerai que ce soit aussi égal à d-ail

    En fait cela ne doit pas "remplacer" mais 'être égal ou équivalent' pour que les deux requêtes sur d' ou d- fonctionnent

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par ceweb Voir le message
    J'ai peut être pas bien compris ce que tu veux dire

    En fait cela ne doit pas "remplacer" mais 'être égal ou équivalent' pour que les deux requêtes sur d' ou d- fonctionnent
    Non, en fait, c'est moi qui n'avais pas compris.
    Peut-être que ça peut fonctionner comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT ville 
    FROM mairie WHERE '".addslashes($url)."'
     = REPLACE(REPLACE(ville,'d-','d\''),'l-','l\'')"
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    Malheureusement non

    Une autre suggestion ?

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Il y avait une faute de frappe dans ma requête, il manquait une quote, je l'ai modifiée.
    Qu'est-ce qui ne fonctionne pas ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    J'obtiens "Selection impossible" comme si

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM mairie WHERE '".addslashes($url)."'
     = REPLACE(REPLACE(ville,'d-','d\''),'l-','l\'')");
    N'existait pas

    donc d-ail = "Selection impossible" et d'ail = sélection possible.

    Au cas ou pour plus d'infos sur ma base mysql
    Utf8 Interclassement utf8_unicode_ci

  8. #8
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par ceweb Voir le message
    J'obtiens "Selection impossible" comme si
    donc d-ail = "Selection impossible" et d'ail = sélection possible.
    Je ne comprends pas ce qui retourne ces messages.
    Juste une précision, la colonne ville contient des url, ou des noms de villes présents dans des URL ?
    Dans le deuxième cas ce n'est pas = mais LIKE qu'il faudrait utiliser
    WHERE addslashes($url)
    LIKE CONCAT('%',REPLACE(REPLACE(ville,'d-','d\''),'l-','l\''),'%');
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    Dans mes pages j'ai par exemple la ville de d'ail qui s'affiche et je récupère l'affichage pour faire un lien hypertexte comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="'.$page->path.'mairie/mairie'.nettoie_url($ville).'.html">'.$ville.'</a>
    $ville n'est pas une url mais une ville

    ensuite on clique sur la ville d'ail et on obtiens la page d-ail.htm parce que la fonction nettoie_url($ville) enlève l'apostrophe de d'ail en d-ail.

    mais pour le moment seulement la page d'ail.html fonctionne parce que je peux pas forcer mysql a considérer que d'ail et d-ail c'est la même chose

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    Bon j'ai compris pourquoi je ne peux pas appeler dans la base d- ou l- alors que d' et l' fonctionne.

    Dans mes pages j'ai par exemple la ville de d'ail qui s'affiche et je récupère l'affichage pour faire un lien hypertexte comme ça

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="'.$page->path.'mairie/mairie'.nettoie_url($ville).'.html">'.$ville.'</a>
    $ville n'est pas une url mais une ville

    ensuite on clique sur la ville d'ail et on obtiens la page d-ail.htm parce que la fonction nettoie_url($ville) enlève l'apostrophe de d'ail en d-ail.

    mais pour le moment seulement la page d'ail.html fonctionne parce que je peux pas forcer mysql a considérer que d'ail et d-ail c'est la même chose
    Ce qui veux dire que quand je fais ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $mysql->query("SELECT ville FROM mairie WHERE ville='".addslashes($url)."'");
    d- ou l- n'existe pas dans la base !!!

    Si je place devant ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $url = str_replace("-","'",$url);
    d- et l- appelle d' et l' donc ça marche

    Il me reste à trouver comment utiliser str_replace pour apostrophe et tiret dans la même fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $url = str_replace("-"," \'",$url);
    ça ne fonctionne pas

  11. #11
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo str_replace("-"," '","d-ail");
    ?>
    retourne bien d'ail

    On est bien d'accord que l'on n'est plus sur une solution MySQL, là ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Par défaut
    On est bien d'accord que l'on n'est plus sur une solution MySQL, là ?
    Sauf si il existe une fonction comme IGNORE pour sélectionner $ville sans accepter d'injecter un tiret ou un apostrophe dans la requête.

    ça doit être possible ?

Discussions similaires

  1. Plusieurs jeux d'enregistrements avec IDataReader
    Par Lebbihi dans le forum Accès aux données
    Réponses: 2
    Dernier message: 27/01/2009, 17h38
  2. utiliser collate avec GROUP_CONCAT
    Par GLSpirit dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/10/2007, 15h43
  3. Illegal mix of collations avec UNION ALL
    Par lodan dans le forum Outils
    Réponses: 1
    Dernier message: 03/05/2007, 18h05

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