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 :

Site multilingues et bases de données


Sujet :

PHP & Base de données

  1. #41
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    les gars, je ne sais comment vous remercier pour vos efforts considerables...

    Pour cette ligne, ce n'est pas le 1er croisement, absolument pas, c'est juste une nouvelle catégorie (Luminaire), une vrai catégorie à part entière.
    C'est juste que celle ci (son ID unique 5) est lié à une autre catégorie (son parent) 3.
    c'est un peu de là d'où le probleme provient.
    pour moi je le considere un peu comme un croisement puisqu'il permet de la meme maniere que dans la table "categories_croisements" de dire que "Luminaire" est dans "Salon"
    enfin, je n'ai pas une vision tres futuriste du projet et des contraintes que je peux rencontrer. je vous fais confiance et vais adopter le model que vous m'avez conseillé. mais ne me lachez pas, je suis sur que je vais revenir vers vous tres prochainement pour d'autres questions relatives a cette conception de bdd

    7 | fr | Luminaire A supprimer
    biensur, la faute au copier/coller

    RunCodePhp: tu m'as dis que c'est mieux d'utiliser des identifiants numeriques au lieu de 'fr', 'en', ...
    ca en est de meme pour les pays??
    je te pose cette question parce que j'utilise un script qui detecte le pays de l'nternaute qui eux ont recours aux codes iso du pays. voici ma page: http://moroccan-arts.co.uk/

    MErci merci merci mille fois et bonne soiree

  2. #42
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    tu m'as dis que c'est mieux d'utiliser des identifiants numeriques au lieu de 'fr', 'en', ...
    ca en est de meme pour les pays??
    De mon coté j'utiliserais un identifiant (sans hésiter même).
    Si dans le grand des hasard un code ISO venait à changer, même si ici c'est peu probable, suffira de le changer dans le champ iso_code, et l'appli fonctionnera sans avoir besoin de se plonger dans le code.
    Il faudra bien sûr toujours faire référence à cet ID, et non au code ISO (sinon ça servirait à rien).

    Donc dans ta page, l'attribut "value" (des options) contiendraient les IDs, et non les code iso.

    En faite, à part très très rare cas, ce sont des IDs que j'utilise, pour la raison que j'ai évoqué, mais j'estime que c'est nettement plus simple et plus sûr d'avoir affaire à des nombres que des chaines, même courtes.
    Une vérif avec "typage" comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($_POST['country']) && (int)$_POST['country'] > 0) {
        $country = (int)$_POST['country'];
    }
    Ici, dans le pire des cas ce sera 0 qu'on obtiendra, c'est assez rassurant je trouve.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #43
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    umm, on s'est peut etre mal compris )

    au fait le probleme c'est que j'utilise un petit script javascript qui permet de detecter le pays de l'utilisateur. ce script renvoie le code iso, et par consequent, je suis OBLIGE d'utiliser les codes iso dans les select: <option value="FR">France</option>

    tu vois ce que je veux dire?

  4. #44
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    @redah75 : phprunner n'a pas tord sur le principe mais ce que tu fais est bien aussi, une norme c'est facile à utiliser et ca sert à ça aussi (je dis ca mais je fait pareil que php^^). Si toutefois tu veux récup l'id correspondant à ton code iso, suffit que tu intègres à ta fonction JS un appel ajax pour récup l'id.

    ++

  5. #45
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Je ne dis pas qu'il a tord, bien au contraire, j'ecoute et j'applique soigneusement ses conseils..

    c'est vrai que j'ai pas pensé a integrer a ma fonction un appel ajax, mais franchement, je ne saurai pas comment le faire!!
    voici a quoi ressemble le script qui est en jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
    	$('select#country option[value=' + json.address.country_code + ']').attr('selected', 'selected');
    	$.uniform.update("#country");
    });
    Merci

  6. #46
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    je suis OBLIGE d'utiliser les codes iso dans les select
    T'es rien obligé du tout, manquerait plus qu'ça.

    Tu as une appli (api.wipmania) où tu sais que ce sera un code ISO de retourné.
    Admettons que de notre coté c'est un ID qu'on préfère utiliser que des codes ISO comme valeur dans le menu.

    Le problème, c'est vrai, c'est que le JSON (jQuery) travail en asynchrone, ça veut dire que le code du pays de l'utilisateur sera connu après avoir renvoyé la page demandée (le formulaire).
    Du moins, c'est comme ça que tu l'as effectué pour tenter de sélectionner le Pays de l'utilisateur.

    On est un peu dans un cas particulier, un peu conditionné à cause de cette appli extérieur.
    Et bien comme normalement les codes ISO sont uniques, et bien tu pourrais rajouter dans les balises "option" un ID, et mettre le code ISO correspondant, ensuite te baser de sa valeur pour faire la sélection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <select name="country">
        <option id="FR" value="100">France</option>
    </select>
    Et si ton JSON fonctionnait bien, théoriquement faudrait juste changer par : (value par id)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $('select#country option[id=' + json.address.country_code + ']').attr('selected', 'selected');
    Théoriquement ça devrait l'faire.


    D'ailleurs (petite parenthèse), comme les codes ISO doivent être unique, coté Bdd rajouter une contrainte d'unicité sur ce champ "code_iso" serait utile (UNIQUE).
    Autre parenthèse, c'est que tu as un problème d'encodage dans cette page, car étant à la Réunion, j'obtiens R?©union.

    Hors sujet cette fois (j'espère ne pas mettre en colère les modérateurs ), mais cette appli api.wipmania m'a l'air fort sympathique.
    C'est son usage, la licence qui m'intrigue.
    D'un coté je lis que toutes personnes ou entreprises peuvent interroger leur service, à raison de moins de 10 000 requêtes/jours, de l'autre je lis que leur contenu serait d'un usage non commercial.
    Pourrais tu toucher 2 petits mots la dessus, ton avis ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #47
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="country">
        <option id="FR" value="100">France</option>
    </select>
     
    ('select#country option[id=' + json.address.country_code + ']').attr('selected', 'selected');
    t'es un dieu ) merci bp pour cette solution ingenieuse qui ne m'aurait jamais traversée ll'esprit!! ca marche bien

    Autre parenthèse, c'est que tu as un problème d'encodage dans cette page, car étant à la Réunion, j'obtiens R?©union.
    c'est juste que ma base de donnees n'est pas encore terminé. j'ai rectifié cette petite erreur.
    j'en profite d'ailleurs pour te demander si mon schema de la table pays est bon ou pas. et là ca ne devrait pas etre aussi compliqué que le menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Tables pays:
    id_pays (SMALLINT, PRIMARY KEY, AUTO INCREMENT)
    iso (CHAR2, INDEX UNIQUE)
    pays_fr (VARCHAR 50)
    pays_en
    pays_org // pays dans sa langue d'origine
    code_tel (TYNYINT)
    ... (peut etre contient, ...)
     
    Table villes:
    id_ville (INT, PRIMARY KEY, AUTO INCREMENT)
    id_pays (SMALLINT, INDEX)
    ville (VARCHAR 50)
    La question est la suivante:
    est ce que je peux garder les 3 champs pays_fr/en/org
    ou plutot creer une autre table avec comme champs: id_pays, libelle, lang ?

    idem pour la table villes?

    Pourrais tu toucher 2 petits mots la dessus, ton avis ?
    je n'ai vu nulle part des limitations d'utilisation: http://welovenicethings.com/2010/02/...h-geolocation/
    je serai sinon bien embeté si je n'ai pas le droit de m'en servir pour but commercial!!

  8. #48
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    est ce que je peux garder les 3 champs pays_fr/en/org
    ou plutot creer une autre table avec comme champs: id_pays, libelle, lang ?
    La 2ème solution, soit une table pour les traductions.
    Comme toujours, tout est une histoire de relation, de cardinalités.
    Pour 1 pays on aura plusieurs noms de pays, ceci correspondant aux nombres de langues.
    Ca donne donc : 1,n

    Pour les villes, ça devrait être pareil.
    Ceci dit, si tu compte proposer toutes les villes de tous les différents pays que tu propose, déjà ceci va te donner un boulot monstrueux à tout saisir (en plus des différentes langues), mais aussi déboucher sur une sacrée grosse Bdd.
    Faut voir.

    Pour la ville, normalement c'est une donnée que l'utilisateur (client) saisira, non ?


    je n'ai vu nulle part des limitations d'utilisation: http://welovenicethings.com/2010/02/...h-geolocation/
    je serai sinon bien embeté si je n'ai pas le droit de m'en servir pour but commercial!!
    Le ici mène vers un blog, je ne pense pas ce ça soit les gars qui propose le service en question.
    En faite, je me suis basé de l'URL qu'il y a dans ton code JSON (plus haut) : http://api.wipmania.com
    Ceci en faite : http://www.wipmania.com/en/api/
    Using API is free for any purpose, personal or business, if you are making fewer than 10.000 requests per calendar day. A simple yet powerful API allowing you to query the WorldIP database with a single link.
    Mais aussi ceci : http://www.wipmania.com/en/agb/
    1. Content
    Content on WIPmania.com is licensed under the Creative Commons Attribution Non-commercial 3.0 License (...).

    2. WorldIP Database
    WorldIP Database (country) is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License (...).
    Mais mon Anglais est quelque peu pitoyable, du coup j'interprète peut être mal ce qu'ils disent.
    Mais comme ça, je dirais que le code est Open Source, mais que leur service (les requêtes faites sur leur serveur pour interroger leur Bdd) lui ne le serait pas, ce qui m'étonnerais pas.
    Bon, je ne dis pas ça pour toi, (je dirais que c'est ton affaire), c'est juste pour savoir.

    Mais il y a tout de même ceci : Using API is free for any purpose, personal or business
    Comme ça, je dirais que c'est Ok.
    Mais pourquoi donc parlent ils de Non-commercial dans les "terms of use" alors ? (c'est ça qui m'intrigue)
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #49
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Pour 1 pays on aura plusieurs noms de pays, ceci correspondant aux nombres de langues.
    Ca donne donc : 1,n
    je sais, mais pour simplifier un peu j'ai limité a 1, 3 comme ca ca m'eviterait de renseigner la langue pour chaque pays, le 3champs (pays_org) contiendra la traduction des pays sans pour autant preciser quelle langue! approuves tu ce choix? un simple NON, suffirai pour adopter la solution que tu preconises

    Pour les villes, ça devrait être pareil.
    Ceci dit, si tu compte proposer toutes les villes de tous les différents pays que tu propose, déjà ceci va te donner un boulot monstrueux à tout saisir (en plus des différentes langues), mais aussi déboucher sur une sacrée grosse Bdd.
    Faut voir.

    Pour la ville, normalement c'est une donnée que l'utilisateur (client) saisira, non ?
    Non non non j'y ai pensé il y a qlq temps mais je me suis vite rendu compte du travail que cela me demandera. je proposerai une table vide que se remplira au fur et a mesure !!
    du coup, un seul champ pour stocker la ville dans la table villes suffira, non?

    Mais il y a tout de même ceci : Using API is free for any purpose, personal or business
    Comme ça, je dirais que c'est Ok.
    Mais pourquoi donc parlent ils de Non-commercial dans les "terms of use" alors ? (c'est ça qui m'intrigue)
    je t'avoue que je suis un peu intrigué aussi.
    je comprends que c'est gratuit s'il y a moins de 10 000 requetes par jour!!
    je demanderai a des amis americains ou anglais une confirmation et te tiendrai au courant

  10. #50
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    je sais, mais pour simplifier un peu j'ai limité a 1, 3 comme ca ca m'eviterait de renseigner la langue pour chaque pays, le 3champs (pays_org) contiendra la traduction des pays sans pour autant preciser quelle langue! approuves tu ce choix? un simple NON, suffirai pour adopter la solution que tu preconises
    J'ai jamais pensé à un champ langue "origine", mais comme ça, je dirais non, car même s'il y en avait que 2, faudrait séparer.
    Puis derrière ça peu causer des problèmes (je pense aux systèmes de paiement).
    Puis pour les Pays, c'est vraiment pas un problème, il y en a peu, c'est pas ça qui alourdira la Bdd.

    Pour les villes, là c'est problématique, et on peu envisager d'omettre la notion de langue, et encore, je ne suis pas sûr que les boutiques e-commerces se mettent à stocker toutes les villes.
    Les La Redoute ou autre Fnac, peut être, ils ont les moyens, mais les autres ???

    En tout cas, attention à vouloir trop simplifier.
    Une table regroupant tout n'est pas plus simple ni plus optimisé.
    Un Base de données c'est justement prévue pour, fait pour que les données soient rangées, classées, pour justement exploiter toute la puissance du langage SQL pour piocher à droite ou à gauche (les jointures).
    Faut voir les choses ainsi, il est là l'intérêt d'une Bdd.
    C'est la quantité qui causera un problème, pas le nombre de tables (enfin, il y a une limite surement, mais il y a de la marge).


    je demanderai a des amis americains ou anglais une confirmation et te tiendrai au courant
    Ok, merci.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #51
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    OK pour les pays.
    il y a 2 petites choses qui m'intriguent:
    1- je vais peut etre renseigner la langue du pays, pour la belgique par exemple ils ont 2 langues, ce qui m'oblige de creer une autre table liee "pays_langues" en vaut il la peine d'avoir cette info?

    2- lorsque j'ai une cle primaire, par exemple id_pays dans la table villes, faut il creer le champ id_table en UNIQUE ou INDEX ou plutot les 2 dans phpmyadmin ?

    Merci beaucoup

  12. #52
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Humm, à mon avis tu confond les langues de ton interface et les Pays.
    D'ailleurs, ces données sont quelques part redondantes, mais comme elles n'ont pas du tout le même but, ça donne lieu à d'autres tables.


    Pour la langue (interface), il te suffit de rajouter 1 ligne pour le Flamand, tout simplement.
    [1]Français (fr), [2]Anglais (en), [3]Flamand (??), [4]Néerlandais (nl), etc ...
    D'ailleurs, il y a t-il un code ISO pour le Flamand ?

    Pour les Pays, et bien la Belgique c'est 1 seul Pays, 1 seul code ISO.
    Pour la traduction de leur libellé, aucun problème, suffit de les traduire dans les 4 langues ci-dessus, y compris le Flamand.
    Si un jour la Belgique venait à être séparée en 2, et bien il faudra rajouter une ligne. Normalement, il y aura un nouveau code iso. (pure exemple)

    D'ailleurs, ceci soulève soudainement une question, dont j'en sais fichtre rien.
    Dans quelle langue faudrait il sortir les factures ?
    En faite, est ce qu'il y a une loi la dessus, ou est ce libre ? (j'en doute un peu).
    En gros, un Allemand qui commande de Allemagne, qui choisi l'Anglais coté interface :
    -> Impossible de sortir la facture dans la langue de son Pays (Allemand) vu que le site ne propose pas l'Allemand coté interface.
    -> Peut on la sortir en Anglais, son choix coté interface ?
    -> Peut on (ou doit on) la sortir en Français ? (en supposant que c'est le Français la langue officielle).

    Et s'il avait choisi le Flamand coté interface, peut on la sortir en Flamand ?

    Peut être connais tu déjà ce qui peu ou pas se faire, mais moi j'en sais rien.
    Comme ça, je dirais que c'est la langue du Pays où ce trouve la boutique qui prime, mais il me semble qu'il y a possibilité de le faire dans la langue du client.
    Mais le cas du Flamand ici, peu poser un problème, non ?

    Bon, pour ma part c'est la curiosité qui me fait poser ces questions, rien de plus.

    2- lorsque j'ai une cle primaire, par exemple id_pays dans la table villes, faut il creer le champ id_table en UNIQUE ou INDEX ou plutot les 2 dans phpmyadmin ?
    Là, j'ai pas compris.
    C'est quoi id_table ? Donne lui un nom explicite, parce que là ?
    Faut voir avec quoi seront liés les villes, et là, c'est un peu la mer** je dirais, car il me semble que c'est assez différent selon les Pays.
    En France, une ville est rattachée à un département, voir une région, voir une commune.
    Aux USA, il n'y a pas de département, mais des états.
    Et en Belgique ???
    Je ne sais pas comment tu vas t'y prendre, mais de mon coté je ne vois même pas comment modéliser ça.

    On peu certes se contenter de lier les villes aux Pays.
    Mais coté structure, il faudrait normalement un champ id_ville en clé primaire, auto_incremente, et rajouter le id_pays, et une table ville_lang pour les traductions (pour cet exemple).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #53
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Humm, à mon avis tu confond les langues de ton interface et les Pays.
    non pas du tout, je veux renseigner la langue du pays juste pour afficher le pays entre parentheses dans la langue du pays: Espagne (España) comme sur gmail: https://www.google.com/accounts/NewA...b19ce73&type=2
    au debut, j'aurais 2 langues: anglais et francais, lorsqu'on est sur le site francais, j'aurais "Espagne (España)", et sur le site anglais: "Spain (España)" et si dans quelque annees le site sera en espagnol, j'aurais alors uniquement "España"
    j'espere etre clair a ce sujet

    D'ailleurs, il y a t-il un code ISO pour le Flamand ?
    Hehe, non, je ne pense pas et je ne suis pas sur d'avoir un jour un site en flamand )

    ...
    Dans quelle langue faudrait il sortir les factures ?
    ...
    a ce niveau la, je ne me asserai pas trop la tete, je ferai exactement comme dans la societé ou j'ai travaillé avant; la facture sera de la langue du site que l'internaute a choisi. si un japonais a choisi le site en espagnol, il aura alors la facture en espagnol...
    en gros, il y aura un model (squelette) de facture qui sera seulement rempli par le titre de l'article acheté, prix, adresses...

    Là, j'ai pas compris.
    C'est quoi id_table ? Donne lui un nom explicite, parce que là ?
    desolé, erreur de frappe, je voulais dire:
    lorsque j'ai une cle primaire, par exemple id_pays dans la table villes, faut il creer le champ id_pays en UNIQUE ou INDEX ou plutot les 2 dans phpmyadmin ?

    Faut voir avec quoi seront liés les villes, et là, c'est un peu la mer** je dirais, car il me semble que c'est assez différent selon les Pays.
    au fait j'avais deja commence a traveille un peu sur les villes depuis une bdd extraite de geonames, et je t'avoue que c'est un peu la M. comme tu dis g donc vite laisse tomber, et voulais pas trop me prendre la tete et perdre le temps!!

    Mais coté structure, il faudrait normalement un champ id_ville en clé primaire, auto_incremente, et rajouter le id_pays, et une table ville_lang pour les traductions (pour cet exemple)
    ah lalaaaa, je pense pas que je vais trop developper la bdd des villes, comme je t'avais dit précédemment je creer une table simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table villes:
    id_ville | id_pays | ville
    1        | 2      | Praha 
    2        | 5      | Barcelona
    3        | 1      | Paris
    4        | 3      | Moscova (ou je ne sais comment s ecrit en russe)
    il peut forcement avoir des doubelons mais on ne peut avoir une base parfaite. ce que je peux faire neanmoins c'est que je recois un email dès lors qu'une nouvelle ville a été créée par l'utilisateur pour que je fasse une petite verification de doublon.

    et peut etre dans le formulaire je rajouterai un champ Etat/ Region en VARCHAR (5 ou 6) afin de couvrir la majorité des cas

  14. #54
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    j'espere etre clair a ce sujet
    Je vois cette fois.
    Disons que normalement il ne devrait pas avoir de problème.
    Le libellé serait donc dans la table "pays" (et non dans pays_lang), son nom dans la langue du pays.
    Pour 1 pays il doit avoir 1 nom, cardinalité 1,1.
    Même coté conception, il me semble que c'est correcte, finalement, on peu le voir comme une donnée propre au pays, au même titre que son code ISO par exemple, et non comme une donnée liée à la langue (la table).


    Pour les villes, ça peu se faire de 2 façons à mon sens, ça dépend du comment tu compte faire.
    1/ Soit comme l'exemple que tu as mis ci-dessus, donc 1 seule table.
    Comme une ville est unique, et qu'en plus, 1 ville est liée à 1 pays uniquement (physiquement parlant, ou géographiquement), il faudrait créer une clé primaire unique pour les 2.
    Sans certitude, il me semble que le code c'est :
    UNIQUE KEY 'pays_ville_unique' ('id_ville','id_pays')
    Donc effectivement, c'est normalement mieux de définir une clé double pour éviter des doublons.
    Ici, il faudra lié la ville à un pays, il faudra alors que le Pays existe.

    2/ Soit créer 2 tables.
    Une table pour les villes, là ce sera un id_ville comme clé, et auto_incremente.
    Un seconde table, "pays_villes" pour associer les ville et les pays (le même que ton exemple).
    Cette fois, le code serait :
    PRIMARY KEY ('id_ville','id_pays')
    La différence ici, c'est qu'il sera possible d'entrer des villes sans être obligé de les lier à des pays, ça peu ce faire plus tard, en 2 temps.
    A toi de voir.

    N'empêche que, et dans les 2 cas, ça n'empêchera pas d'avoir des doublons.
    Coté Bdd purement, oui, mais dans la pratique, pas forcément.
    Suffit d'entrer Paris et Pari (Parris, ou encore Parri, etc ...) et ça passera.

    Si je prends mon exemple, pour ma ville, beaucoup de gens ne l'écrivent pas de la même façon :
    ST Paul, St PAUL, Saint Paul, SAINT PAUL, etc ...
    Ca va être chaud ton truc quand tu vas dépasser les milliers d'enregistrements, les Mo.
    Bon courage en tout cas
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  15. #55
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    c'est curieux, j'ai pas recu une notification de reponse cette fois ci!!

    je suis entrain de reflechir et me rends compte que si je garde le champs 'pays_origine' dans la table 'pays', par example: 1 ES espana, et que dans quelques annees, je traduis le site en espagnol, je sera peut etre obligé de rajouter une ligne dans 'pays_traductions' pour l'espagnol, et dans ce cas, il y aura une redondance, non??
    le mieux comme tu as dit au debut, et de creer une table 'pays_traductions' qui contiendra l'anglais, francais et la langue d'origine que je prendrai soin de remplir manuellement pour chaque pays

    N'empêche que, et dans les 2 cas, ça n'empêchera pas d'avoir des doublons.
    Coté Bdd purement, oui, mais dans la pratique, pas forcément.
    Suffit d'entrer Paris et Pari (Parris, ou encore Parri, etc ...) et ça passera.
    ...
    jopterai pour la solution 1 et pour limiter les degats (doublons) je proposerai un champ 'ville' en autocomplete avec un petit moteur de recherche avancé pour guider un peu l'internaute et comprendre qu'il veut rentrer Saint Paul plutot que St Paul...

  16. #56
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    je suis entrain de reflechir et me rends compte que si je garde le champs 'pays_origine' dans la table 'pays', par example: 1 ES espana, et que dans quelques annees, je traduis le site en espagnol, je sera peut etre obligé de rajouter une ligne dans 'pays_traductions' pour l'espagnol, et dans ce cas, il y aura une redondance, non??
    Tu cherche souvent la petite bête là où il y en a pas.

    Ce n'est pas redondant, c'est juste 2 données qui s'écrivent de la même manière, c'est tout (presque une coïncidence).

    Prenons le cas du drapeau par exemple, admettons que tu souhaiterais rajouter un champ pour le nom de l'image.
    Où est ce que tu placeras ce champ "drapeau" ?
    Pour ma part, il ne pourra pas être ailleurs que dans la table "pays".
    1 pays = 1 drapeau.
    1 pays = 1 nom d'origine
    Pas dans la table "langue", et encore moins dans "pays_lang" (ou pays_traduction).


    Pour le menu déroulant par exemple, et bien pour éviter d'avoir 2 fois le même nom :France (France) ou Espana (Espana), suffit de faire un simple if().
    Si les noms sont les même, et bien on en affiche qu'1.

    Si redondance il y a, c'est dans la table "langue" où ça se trouve.
    Mais comme il y aura peu de langues, faut pas se prendre la tête autant que ça.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  17. #57
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    tu as raison, comme tu dis, je cherche la bete noire )

    tiens, j'ai recupere un table pays tres interessante que je modifierai pour l'adapter a mon cas: http://moroccan-arts.co.uk/countries_geo.sql

    bien évidement, je supprimerai iso_alpha3, iso_numeric, fips_code (que je ne sais pas a quoi pourrait servir), geonameId (l'identifiant de la ville), revoir le champ 'languages', ...
    qu'en penses tu?

    dans cette table, geonames attribut le code iso comme cle primaire. puisque c'est un site nouveau que je lance, l'attribution des identifiant numeriques aux pays n'aura pas d'impacte?? je peux donner n'importe quel identifiant, on est bien d'accord??

  18. #58
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    On a déjà débattu sur la question de l'identifiant ou code iso (ou je ne sais quoi d'autre), on a même été 2 à s'exprimer la dessus.
    Pourquoi remettre tout ça sur le tapis ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  19. #59
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    je ne remets rien sur le tapis, j'utiliserai des id numeriques c'est clair, mais ce que je demande c'est la maniere de le faire: attribuer l'id 100 a la france, est la meme chose que 127 ou 231 ou autres? c'est tout ce que je demande!!

  20. #60
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    attribuer l'id 100 a la france, est la meme chose que 127 ou 231 ou autres? c'est tout ce que je demande!!
    Oui, mais c'est vraiment pas une question à poser.
    C'est la même chose pour les langues, les catégories, produits, etc ..., on s'en fiche royalement de la valeur de l'identifiant, le tout, c'est qu'il doit être unique.
    Et ensuite, exploiter, faire référence à ces IDs dans l'application.
    Si tu as l'idée de vouloir accorder certains chiffres ronds (10, 20, 30, 40, 100) à certains pays (ou autre), histoire de faire bien, ça ne sert à rien, c'est du temps perdu.
    Puis on ne mettra jamais dans sont code des IDs "en dur", quelque soit la donnée.

    Mais on est d'accord, utiliser un IDs de pays au lieu des codes ISO c'est ton choix, pas le mien, on t'impose rien.
    Est ce mieux, est ce moins bien ? Je suis incapable de te l'affirmer.
    On va dire que chacun à ces petites habitudes quoi
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Gérer les couleurs du site avec la base de données.
    Par ginkas31 dans le forum Webdesign & Ergonomie
    Réponses: 6
    Dernier message: 06/12/2008, 03h13
  2. relier mon site avec la base de donnée amadeus
    Par inizar dans le forum Débuter
    Réponses: 2
    Dernier message: 10/10/2008, 22h30
  3. Réponses: 1
    Dernier message: 29/02/2008, 02h56
  4. site collection et base de données
    Par lahcentsdi dans le forum SharePoint
    Réponses: 4
    Dernier message: 16/12/2007, 03h10
  5. Réponses: 3
    Dernier message: 03/10/2007, 01h59

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