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 :

String to variable [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Par défaut String to variable
    Bonjour à tous,

    Comme son nom l'indique, je chercher à transformer une chaine de caractère en String. Actuellement, je fais un site avec un multi-langue, pour cela je stocke dans un fichier php (francais.php) les variables correspondant aux textes :

    J'utilise également une base de donnée mySQL ou je stocke des informations. Pour éviter d'avoir à créer une colonne pour chaque langue, j'ai décidé de mettre dans un colonne commentaire : $texte.

    Vous l'aurez donc compris, en faisant ma requette SQL, je récupère une chaine de caractère valant : $texte

    Et je cherche un moyen de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$texte"; // kikoo
    Après un bon moment sur la toile, je ne suis parvenu à rien de concluant, c'est pourquoi je me tourne vers vous en espererant que vous pourrez m'aider.

    Merci d'avance à tous.

  2. #2
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Salut,

    Si j'ai bien compris ce que tu cherches à faire (j'ai bien dit "si" ^^), il vaut mieux que tu stock simplement dans ta table le nom de la variable (sans le $), ensuite tu faite comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $nomVariable = 'texte'; // A remplacer par la requete qui va récuperer le nom de la variable
    echo ${$nomVariable};
    Mais c'est encore mieux avec un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Fichier francais.php
    $langue = array(
        'texte1' => 'contenu',
        'texte2' => 'contenu',
        // etc...
    ):
     
    // Affichage
    echo $langue['texte1'];

    Et si tu veut pas te prendre la tete avec 50 fichiers de langue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Fichier langues.php
    $langues['francais'] = array(
        'texte1' => 'contenu',
        'texte2' => 'contenu',
    );
     
    $langues['english'] = array(
        'texte1' => 'content',
        'texte2' => 'content',
    );
     
    // Affichage
    echo $langues[$selectedLanguage]['texte1'];

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Par défaut
    si tu as :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $texte = "kikoo";
    echo "$texte";
    Le résultat affiché va être kikoo
    je ne comprend pas ou est le soucis.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    J'utilise également une base de donnée mySQL ou je stocke des informations. Pour éviter d'avoir à créer une colonne pour chaque langue, j'ai décidé de mettre dans un colonne commentaire : $texte.
    Il ne faut surtout pas faire comme ça

    Le principe de base quand on conçoit une Bdd (ses tables), c'est de regarder se qu'on appel les cardinalités (ou relations) qu'il y a entre les données.
    Concernant ce texte ($texte) il y aura autant de contenus différents qu'il y aura de langues.
    Donc on voit déjà qu'il y a une notion de langue.
    Puis sur 1 texte il y aura n contenus pour les langues (cardinalité : 1, n).
    Donc cette donnée doit sortir de cette table pour y être dans une autre table. C'est comme ça.

    Pour exemple, c'est exactement le même principe des articles et catégories.
    Pour une catégorie on peu avoir plusieurs articles. On créera bien 2 tables (articles|categories).

    Il faudrait d'abord créer une table "langues" pour stocker/définir les langues, même s'il y en a que 2, car à l'avenir il suffira de rajouter une 3ème, 4èmes, etc ... langues et tout le reste suivra.
    Table lang
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lang_id | code
       1    | fr
       2    | en
    Puis admettons que tu as une table "articles", qui actuellement contient un champ "titre" puis "contenu".
    Il faut "sortir" ces 2 champs dépendants des langues, donc les supprimer, plutôt les déporter dans une nouvelle table.
    (surtout pas rajouter "titre_en", "contenu_en" ou encore stocker le nom d'une variable comme $texte).

    Table "articles"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    article_id | cree_le
        1     | 2012-02-10
        2     | 2012-02-14
    La nouvelle table "articles_lang"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    article_id | lang_id | titre | contenu
         1     |    1   | Salut | contenu Français
         1     |   2    |Hello   | English content
         2     |   1    | Oui    | C'est vrai
         2     |   2    | Yes    | It's true
    A la suite de ça, il suffit de faire une jointure entre les 2 tables pour récupérer les contenus de l'article selon la langue.
    Il faudra bien évidemment définir la langue en question, quitte à définir une langue par défaut (dans un cookie, session, etc ... peu importe).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT titre, contenu, cree_le
    FROM articles AS a
    INNER JOIN articles_lang al ON a.article_id = al.article_id
    INNER JOIN lang l ON l.lang_id = al.lang_id
    WHERE lang_id = 1
    Tous les contenu ne sont pas en colonnes, mais par lignes (chaque ligne = 1 contenu de langue).

    Ce principe devra se faire sur toutes les tables où il y a des contenus linguistiques.
    Si on a une table catégorie (catégories d'articles), il faudra une nouvelle table categorie_lang, etc ...


    Si ce ne sont pas des articles mais des contenus indépendants (de pures traductions) le principe reste le même.
    Par exemple :
    Table "traductions"
    Champs : traductions_id | reference
    -> 1 | texte1
    -> 2 | texte2

    Table "traductions_lang"
    Champs : traductions_id | lang_id | traduction
    -> 1 | 1 | Contenu 1 en Français
    -> 1 | 2 | English content 1
    -> 2 | 1 | Contenu 2 en Français
    -> 2 | 2 | English content 2
    ... etc ...

    C'est exactement la même chose que l'exemple donné par Amoiraud concernant les contenus dans des tableaux (dernier exemple), à part que cela est représenté dans la Bdd.

    Pour stocker du contenu linguistique il existe pleins de techniques différentes, et bien souvent on met en place non pas 1 seule mais plusieurs car chacune ont leur avantages et inconvénients.
    Il ne me semble pas qu'il y ait une recette miracle, une technique répondant à tous le besoins.


    Une autre technique intéressante c'est d'utiliser gettext.
    Voir la doc de Php : gettext
    Celle-ci permet de créer du contenu linguistique "dynamique".
    Exemple :
    De stocker ceci : Bonjour Mr %s, comment allez-vous ?
    La partie %s pourra être remplacée par la valeur d'une variable (genre $nom), qui contiendra le nom de la personne.
    Et d'autres possibilités encore qu'une Bdd ne proposera pas.


    Voilà voilà ...

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Gettext c'est la Rolls-Royce en matière de localisation, mais c'est pas disponible partout (je pense aux hébergements mutualisés notamment) et surtout c'est pas simple.

    Une façon terriblement simple de gêrer les traductions est d'utiliser un fichier ini structuré de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ; French
    [fr_FR]
    lang.welcome = Bienvenue %s
    lang.goodbye = Au revoir %s
     
    ; English GB
    [en_GB]
    lang.welcome = Welcome %s
    lang.goodbye = Goodbye %s
     
    ; English US
    [en_US]
    lang.welcome = Welcome %s
    lang.goodbye = See ya %s
    Ensuite il suffit d'utiliser parse_ini_file pour réccupérer une structure et d'utiliser sprintf pour les remplacement (%x).

    On peut d'ailleurs s'équiper d'une classe pour regrouper tout ça (j'en ai une sous le coude si ça t'intéresse, la détection de la langue du browser en prime).

  6. #6
    Membre confirmé Avatar de LeGnome12
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 98
    Par défaut
    Salut,
    Alors je ne sais pas si j'ai bien compris ta problématique.
    Mais peut-être que le $$ est la solution que tu cherches.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $var = 'toto';
    echo $$var; // = echo $toto;

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var = 'toto';
    echo $$var; // = echo $toto;
    $$var, c'est une syntaxe propre au Php4 ça, non ?

    Si mes (vieux) souvenir sont bons, c'est pour faire appel à une classe sans quelle soit instanciée.
    L'équivalent à une méthode de classe statique actuellement.

    En tout cas j'ai essayé le code, ça provoque une erreur ($var indéfini).
    Et selon ce que j'ai compris, et prenant ton exemple, il souhaite non pas faire appel à $var, mais faire appel à : $toto.
    Mais ce serait plutôt : $var = '$toto';
    $toto serait défini/initialisé dans un fichier, mais son nom ($toto) serait pour ainsi dire inconnu (stocké comme chaine dans une autre variable : dans $var comme ci-dessus).

    Il y a bien une technique, hyper simple d'ailleurs ... mais par conscience je n'en fait pas état ... trop ... pas zen, pas propre, bref, à ne pas faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] String et variable dans MsgBox
    Par mask91 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 23/11/2016, 12h08
  2. Réponses: 6
    Dernier message: 17/09/2007, 16h46
  3. split string longueur variable
    Par krina85 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/09/2007, 16h31
  4. Convertir String en variable enumerée
    Par kalikut dans le forum C#
    Réponses: 3
    Dernier message: 25/07/2007, 14h49
  5. Probleme avec string et variable.
    Par pierre987321 dans le forum Delphi
    Réponses: 3
    Dernier message: 26/04/2007, 13h22

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