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 :

Serialize tableau dynamique


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut Serialize tableau dynamique
    Bonjour à tous!

    J'espère que ce post se trouve au bon endroit.

    Je viens faire appel à vos compétences pour finaliser un projet personnel.

    Mise en situation:
    J'ai une DB, avec une table qui possède 4 champs. A l'aide de cette table, je remplis un tableau avec 3 des champs disponible à l'aide d'une boucle.

    J'aimerais par un simple click sur un bouton "save", "serializer" mon tableau dans une nouvelle table afin de garder un historique de celui-ci, et qu'après sauvegarde il reset la première table.

    Comme je le dis, j'ai une vague notion de la commande serialize() et unserialize(), mais lorsque j'utilise celle-ci, à différent endroit de mon script, j'ai soit seulement 2 entrée (i.e: 1 2, 2 3, 3 4, etc, j'amais 1 2 3 4) ou alors j'ai une informations qui m'est totalement incompréhensible pour moi (j'ai eu droit à "N;").

    Voici mon script:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    // Display data 
    $requete = "SELECT * FROM tablestaff"; 
    $resultat = mysql_query($requete); 
    $valeur = mysql_query($requete); 
    $donnees = array(); 
    $compteur = 0; 
    ?> 
    <table class="displayStaff"> 
    <tr> 
    <th style="width:150px;">Staff</th> 
    <th style="width:150px;">Payables</th> 
    <th style="width:150px;">Delete</th> 
    </tr> 
    <?php 
    if (mysql_num_rows($valeur)<>0) 
    { 
    while ($donnees = mysql_fetch_array($valeur)) 
    { 
    if ($compteur%2 == 1) 
    { 
    $classe = "impair"; 
    } 
    else 
    {	
    $classe = "pair"; 
    } 
    ?> 
    <tr style="text-align: center" class="<?php echo $classe;?>"> 
    <td id="tab_staff"><?php echo $donnees['surname_staff'] ;echo ' '; echo $donnees['name_staff'];?></td> 
    <td id="tab_amount"><?php echo $donnees['amount_staff'] ;?></td> 
    <td><?php echo '<a style="text-decoration: none;" href="index.php?page=managementStaff&deleteStaff=' .$donnees['id_staff']. '">Del</a>'?></td> 
    </tr> 
    <?php 
    $compteur++; 
     
    } 
    } 
    ?> 
    </table> 
    <input type="button" value="save" style="margin-left: 68%;" OnClick="window.location.href=''">
    Si quelqu'un a (compris ) une solution ou une méthode, je suis preneur. Je suis un novice en PHP donc toute expérience est bonne à prendre!

    En vous remerciant!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $requete = "SELECT * FROM tablestaff"; 
    $resultat = mysql_query($requete); 
    for($i = 0; $i < mysql_num_rows($resultat); $i++)
    {
    	$array[] = mysql_fetch_array($resultat);
    }
    $serialize = serialize($array);
    A la recherche d'un film : http://chercher-un-film.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Bonjour!

    Merci de ta réponse!

    Ca m'éclair un peut sur la finalité de ce que je veux faire.

    Dans mon cas, cela me permets de "serializer" tous les champs de ma table dans une seule variable, ce que j'aurais voulu c'est:
    champ1 | champ2 | champ3 | champ4
    a | b | c | d
    e | f | g | h


    que ca devienne dans une autre table mais avec le même nombre de champ:
    champ1 | champ2 | champ3 | champ4
    a,e | b,f | c,g | d,h
    Maintenant, si je me base sur la syntaxe que tu m'as donné, je pourrais le faire en faisant 4 requêtes SQL, mais je trouve ça lourd pour une simple chose...

    As-tu une idée?

    PS: lorsque j'utilise la commande unserialize de PHP et que je fais un echo de celle-ci, j'obtiens un jolis "Array" à l'affichage, normal?

    D'avance, merci!

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $requete = "SELECT * FROM tablestaff"; 
    $resultat = mysql_query($requete); 
    while($donne = mysql_fetch_array($resultat))
    {
           $champ1[] = $donne['champ1'] ;
           $champ2[] = $donne['champ2'] ;
           ...
    }
    puis tu serialise tes variable.

    pour afficher un array apres la serialisation tu dois fair un print_r ou tu boucle sur l'array
    A la recherche d'un film : http://chercher-un-film.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Encore merci, j'avance

    Mon serialize + insertion dans ma table fonctionnement comme je le souhaite, sous forme
    a:3:{i:0;s:8:"nomtest3";i:1;s:8:"nomtest2";i:2;s:8...
    Mais j'éprouve quelque difficulté sur la compréhension du unserialize.

    J'aimerais a partir de cette nouvelle table pouvoir remplir un nouveau tableau ou chaque donnée serait séparée à nouveau.

    Le manuel du unserialize ne m'aide pas beaucoup, le déclick ne se fait pas...

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    La fonction unserliaze il va te donner un array de champs, pour les inserer il faut une boucle sur l'array.
    A la recherche d'un film : http://chercher-un-film.com

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Après avoir essayé quelque bidouillage, je n'arrive pas à quelque chose de concret. Je ne vois pas comment faire une boucle sur un Array, avec ce système ci...

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ar_donne = unserliaze($var['champ1'])
     
    for($i = 0; $i < count($ar_donne); $i++)
    {
            $query = "insert into matable ('champ') values ('" . $ar_donne[$i] . "')";
            mysql_query($query);
    }
    A la recherche d'un film : http://chercher-un-film.com

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ar_donne = unserliaze($var['champ1'])
     
    for($i = 0; $i < count($ar_donne); $i++)
    {
            $query = "insert into matable ('champ') values ('" . $ar_donne[$i] . "')";
            mysql_query($query);
    }
    pourquoi ne pas faire un foreach ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ar_donne = unserliaze($var['champ1'])
     
    for($i = 0; $i < count($ar_donne); $i++)
    {
            $query = "insert into matable ('champ') values ('" . $ar_donne[$i] . "')";
            mysql_query($query);
    }
    Je ne désire pas réinsérer les data dans une table, mais remplir un tableau avec celle-ci. Lorsque je sélectionnerais une ligne de ma table, elle sera affichée sous forme d'un tableau. Merci quand même!

    Citation:
    Envoyé par m4riachi
    Code :

    $ar_donne = unserliaze($var['champ1'])

    for($i = 0; $i < count($ar_donne); $i++)
    {
    $query = "insert into matable ('champ') values ('" . $ar_donne[$i] . "')";
    mysql_query($query);
    }

    pourquoi ne pas faire un foreach ?
    Comment utiliser ce foreach ?

    Merci pour votre temps!

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    lorsque tu unserializer tes champs tu aura un array pour chaque champs, si il vient tous de la meme table alors ils auront le même compte, comme ça tu va boucler sur l'un des arrays et tu va créer ton tableau comme tu le veut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $query = "select * from table where champs = '1'";
    $donne = mysql_query($query);
     
    $ar_champ1 = unserliaze($donne['champ1']);
    $ar_champ2 = unserliaze($donne['champ2']);
     
    for($i = 0; $i < count($ar_champ1); $i++)
    {
           $ar_finale[$i]['id'] = $i;
           $ar_finale[$i]['champ1'] = $ar_champ1[$i];
           $ar_finale[$i]['champ2'] = $ar_champ2[$i];
    }
    comme ça tu aura ton tableau si j'ai bien compris bien sur
    A la recherche d'un film : http://chercher-un-film.com

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Ca rejoint ce que j'avais dans mes idées, mais les subtilités apparaissent..

    Grace à ton script, je recrée un tableau de donnée en PHP, il est là ok.

    J'avais pour habitude d'afficher mes datas de mes tables dans des tableaux html, ce qui me perturbent un peu, vu que ici ce n'est pas de la mise en page ou de l'affichage. Pour afficher ce que contenait mes tables, j'utilisais des boucles while que j'affectais à la table visée.

    Est-ce que je peux directement passer du tableau généré en PHP à une mise en page HTML?

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    echo '<table><tr><td>champ1</td><td>champ2</td></tr>';
    for($i = 0; $i < count($ar_champ1); $i++)
    {
          echo '<tr>';
          echo '<td>' . $ar_champ1[$i] . '</td>';
          echo '<td>' . $ar_champ2[$i] . '</td>';
          echo '</tr>';
    }
    echo '</table>';
    A la recherche d'un film : http://chercher-un-film.com

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    echo '<table><tr><td>champ1</td><td>champ2</td></tr>';
    for($i = 0; $i < count($ar_champ1); $i++)
    {
          echo '<tr>';
          echo '<td>' . $ar_champ1[$i] . '</td>';
          echo '<td>' . $ar_champ2[$i] . '</td>';
          echo '</tr>';
    }
    echo '</table>';
    tu l'aimes bien ton for

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    On génére 2 boucles?

  16. #16
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    tu l'aimes bien ton for
    Apparemment l'information ne passe pas . Ne t'inquiète pas il y en a au moins un qui suit.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Je viens de tester le script, ça donne ceci:
    <?php
    $donnees = mysql_query("SELECT * FROM history");

    $ar_champ1 = unserialize($donnees['name']);
    $ar_champ2 = unserialize($donnees['surname']);

    for($i = 0; $i < count($ar_champ1); $i++)
    {
    $ar_finale[$i]['name'] = $ar_champ1[$i];
    $ar_finale[$i]['surname'] = $ar_champ2[$i];

    }

    ?>
    <table>
    <tr>
    <td>name</td>
    <td>surname</td>
    </tr>
    <?php for ($i = 0; $i < count($ar_champ1); $i++) { ?>
    <tr>
    <td><?php echo $ar_champ1[$i]; ?></td>
    <td><?php echo $ar_champ2[$i]; ?></td>
    </tr>
    <?php } ?>
    </table>
    Mais maintenant, le résultat est que ca n'affiche aucune valeur....

  18. #18
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Peut être que tu as juste oublié ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $resultat = mysql_query("SELECT * FROM history");
    $donnee = mysql_fetch_assoc($resultat);
    // Si ta requête ne retourne qu'un seul résultat, ce qui m'étonnerais.
    Sinon je te conseille de relire cela: mysql-query()
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Un grand merci à tous, et pour vos conseils également!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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