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

Langage PHP Discussion :

[Tableaux] Modifier une valeur de champ par un nombre aléatoire


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut [Tableaux] Modifier une valeur de champ par un nombre aléatoire
    slt à tous,

    voilà je cherche à me faire un script php qui permettrais de remplacer toutes les valeurs d'un champ d'une table sql pr ne pas avoir à tout faire manuellement.

    en fait ce champ est l'id (d'un membre par exemple), j'aimerais qu'avec un script php tout les id soient remplacés par des nombres aléatoire par exemple en ce moment c'est : 1,2,3,4,5,6....qui donnerais après exécution du script 85,109,98,42...

    le tout est qu'à chaque exécution du script les nombres seront modifé et ne doivent pas prendre le nombre d'un des ID précédent.

    j'ai commencé un morceau de code mais je bloque à cause d'une erreur sql (logique) pour duplicata.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    $select = 'SELECT *_id FROM *'; 
    mt_srand((float) microtime()*1000000); 
    $autonb = mt_rand(0, 100); //  
     
        $sql = "UPDATE * SET *_id='$autonb'";  
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
    ?>
    tks

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut

    Le plus simple, serait de faire un tableau avec toutes les id existantes... ensuite, tu fais un tableau de correspondance ancienne id/nouvelle id, en vérifiant à chaque fois que l'id n'existe pas déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $result = mysql_query('SELECT id FROM tbl');
    $old_ids = array();
    while($id = @mysql_fetch_array($result)) $old_ids[] = $id['id'];
    $new_ids = array();
    mt_srand((float) microtime()*1000000);
    foreach($old_ids as $old_id)
    {
       $new_id = 0;
       do { $new_id = mt_rand(0, 100); }
       while(in_array($new_id, array_merge($old_ids, $new_ids)));
       $new_ids[$old_id] = $new_id;
    }
    foreach($new_ids as $old_is => $new_id)
       mysql_query('UPDATE tbl SET id = '.$new_id.' WHERE id = '.$old_id);
    avec ceci tu ne devrais pas avoir d'erreur de duplicata... cependant, si jamais le nombre d'ids dans la table devient trop important (> 50, voir même avant) la génération d'ids aléatoire deviendra impossible du fait de l'interval dans le quel tu choisis tes ids
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Slt,

    Merci à toi pour ton aide, wahou je ne serais pas arrivé jusque là tt seul

    En ce qui concerne l'interval ce n'est pas un soucis, on peut le monter jusqu'a 1000 ; )

    Cependant j'ai essayé ce bout de script, il fonctionne mais ne modifier qu'1 seul champ 'id' et toujours le meme apparement...


  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    par qu'un seul champ que veux-tu dire ? il y a plusieurs "colonnes" que tu veux modifier ? en ce cas c'est normal... il ne prend en compte qu'un seul champ, si tu veux le faire sur plusieurs colonnes, il te faut le modifier pour prendre toutes les colonnes en compte

    PS : le script peut paraître complexe à première vue, mais il est en faite très simple :

    • je récupère toutes les anciennes ids
    • pour chaque ancienne id, je génère une nouvelle id aléatoire qui n'est ni dans les anciennes id, ni dans les nouvelles déjà générées
    • je mets à jour chaque id
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    je parle bien de ligne et non pas de colonne, par exemple là j'ai 3 entrées dans cette table donc id 1,2 et 3.

    j'execute le script et la modification est uniquement apporté sur l'id 3, par contre il me génére bien un nombre dans l'intervalle ca c'est nikel
    doit donc y avoir une petite erreur qq part...

    merci pr ces qq précisions sur ton script, ca me permet d'apprendre (comprendre) certaine chose !

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(array('old' => $old_ids, 'new => $new_ids));
    entre les deux foreach pour voir s'il ne prend effective en compte qu'une seule id (ça serait étonant quand même...)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    array(2) { ["old"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(2) "65" } ["new"]=> array(3) { [1]=> int(45) [2]=> int(95) [65]=> int(82) } }
    effectivement il prend bien les 3, donc un probleme au niveau de l'update du champ ??

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    exécuté plusieurs fois à la suite :

    array(2) { ["old"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(2) "55" } ["new"]=> array(3) { [1]=> int(47) [2]=> int(42) [55]=> int(77) } }

    array(2) { ["old"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(2) "47" } ["new"]=> array(3) { [1]=> int(9) [2]=> int(35) [47]=> int(24) } }

    array(2) { ["old"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "9" } ["new"]=> array(3) { [1]=> int(94) [2]=> int(20) [9]=> int(42) } }
    on voit plus clairement que les valeurs id 1 et 2 ne sont pas modifiées

  9. #9
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ok, en rererelisant mon code j'ai compris : j'ai fait une faute de frappe : remplace la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($new_ids as $old_is => $new_id)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($new_ids as $old_id => $new_id)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    héhé merci ca marche nikel !!! j'avais prtt relus le code des 10aines de fois sans voir cette ch'tite erreur de frappe...

    grand merci à toi pr ton aide l'ami, t'es le meilleur

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/08/2007, 15h42
  2. [XAML]Modifier une valeur dans un storyBoard par code C#
    Par Benaz dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 19/08/2007, 21h30
  3. [Etat]donner une valeur à un champs par le code
    Par guigui5931 dans le forum IHM
    Réponses: 6
    Dernier message: 04/07/2006, 12h11
  4. Réponses: 3
    Dernier message: 12/06/2006, 12h04
  5. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15

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