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 :

format d'un identifiant sur 16 caractéres [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut format d'un identifiant sur 16 caractéres
    Bonjour,
    j'effectue des insertions dans une base mysql avec des scripts php qui seront lancé avec cron.
    mon problème c'est que l'identifiant d'une de mes tables est sur 16 bits mais lors se l'insertion cela me donne ceux ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id = '332210D21099001'   '332210D210990010'   '332210D2109900100'
    ce que je souhaiterai par rapport à l'exemple ci dessus c'est que ce soit le 1 qui change de place et non les zéros qui se mettent a la suite pour pouvoir rester sur 16 bits donc comme ceux-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id = '332210D210990001' '332210D210990010' '332210D210990100'
    ce que j'aimerai c'est pouvoir "formater" ce nombre pour qu'il soit correct.
    en espérant avoir été clair, merci d'avance

  2. #2
    Membre très actif
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut
    salut,

    un simple champs de type varchar(16) ou char(16)

    De toute façon l'extraction sera en string.

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut
    bonjour et merci de ta réponse.
    le type de mon identifiant sera effectivement en char(16).
    le problème c'est que lorsque l'identifiant passe à 100 cela m'affiche une erreur me disant qu'il y une duplication de cle primaire. il coupe 100 en 10.

  4. #4
    Membre très actif
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut
    par rapport a la clé primaire c'est logique

    Pour ma part avec ce que tu identifie, c'est que tu as un doublon.
    La primary key est impartiale.

    j'ai du mal a comprendre le concept de primary key avec des caractères.
    Un simple identifiant numérique auto incrément comme clé primaire.
    Cela ne t'empêche pas d'indexé ton champs de type char(16).

    tu as plus un problème de model dans ta db que autre chose.

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut
    la base est correcte. c'est juste que mon identifiant c'est comme un numéro de série si tu veux.
    j'ai oublie de dire comment je faisais mon insertion, j'utilise pdo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    $req =$dbmy->prepare('INSERT INTO matable(id,attribut2,attribut3,attribut4,attribut5,attribut6)Values(:id,:attribut2,:attribut3,:attribut4,:attribut5,NOW())');
                for ($i=1;$i<=350;$i++) {
                    // Liste des paramètres préparés
                    $dh=array (
                            'id'=>'332210D2109900'.$i,
                            'attribut2'=>'0',
                            'attribut3'=>'',
                            'attribut4'=>'0',
                            'attribut5'=>'0'
                    );
                    try {
                        // Exécution de la requête
                        $req->execute($dh);
                    }
                    catch(PDOException $e) {
                        echo "<br>";
                        print 'Erreur ! : '.$e->getMessage().'<br/>';
                        echo 'Code n° : '.$e->getCode();
                        echo "<br>";
                        echo 'ligne n° : '.$e->getLine();
                    }
    le dernier chiffre dépend de $i. donc quand $i=100 cela donne : 332210D2109900100 et la on n'est plus sur 16 caracteres
    j'aimerai que lorsque $i=1 l'id s'écrit 332210D210990001 et quand $i arrive à 2000 par exemple l'id serai 332210D210992000.

    j'ai besoin que chaque identifiant soit de la même longueur car après je dois récupérer le dernier chiffre donc substr(id,15); et si mes identifiants ne sont pas de la même longueur mon substr sera faux et je me vois pas le changer a chaque fois.

  6. #6
    Membre chevronné
    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 : 53
    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
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    La solution est de te faire une petite fonction du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function get_id($root_id,$id){
      if(!is_string($root_id)||$root_id==''){return "Err";}
      $id=intval($id);if($id==0||$id>9999){return "Err";}  
      if(strlen($root_id)>=12){$root_id=substr($root_id,0,12);}else{return "Err";} // je te laisse compléter ta chaine avec des 0 jusqu'à une longueur de 12 caractères ;)
      $b=strlen($id);$c=4-$b;$tmp='';
      for($i=0;$i<$c;$i++){$tmp.='0';}
      $tmp.=$id;
      return $root_id.$tmp;
    }
    // Ensuite tu fais
     $dh=array (
                            'id'=>get_id('332210D21099',$i);
    ...
    Faudra juste gérer les err de la fonction dans ton code

  7. #7
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut
    tse_jc: merci merci merci beaucoup. ta fonction est superbe et fonctionne très bien pour mon cas.merci
    j'ai compris ton code mais ici $tmp.='0';
    je ne suis pas sur de la signification de cela .= . je vois ce que cela fait mais je n'arrive pas a trouver le nom de cette opération.


    merci tse_jc et burndev pour votre aide

  8. #8
    Membre chevronné
    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 : 53
    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
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Je t'en prie
    Pour répondre à ta question c'est une concaténation.

    ++

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

Discussions similaires

  1. Format de date avec l'année sur deux caractères
    Par raz2008 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 06/12/2012, 13h45
  2. Réponses: 2
    Dernier message: 09/04/2010, 12h02
  3. Réponses: 2
    Dernier message: 25/03/2008, 11h39
  4. split sur plusieurs caractères ?
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 08/02/2005, 21h44
  5. [FLASH MX2004] Pb sur des caractères accentués.
    Par sandrineLL dans le forum Flash
    Réponses: 3
    Dernier message: 05/08/2004, 14h18

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