Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/12/2010, 10h35   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
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 :
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!
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 13h00   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Code :
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);
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 09h01   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
Bonjour!

Merci de ta réponse!

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

Citation:
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!
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 10h10   #4
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Code :
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
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 13h30   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
Encore merci, j'avance

Mon serialize + insertion dans ma table fonctionnement comme je le souhaite, sous forme
Citation:
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...
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 14h56   #6
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
La fonction unserliaze il va te donner un array de champs, pour les inserer il faut une boucle sur l'array.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 08h44   #7
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
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...
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 10h25   #8
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Code :
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);
}
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 10h27   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par m4riachi Voir le message
Code :
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 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 10h56   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
Citation:
Envoyé par m4riachi Voir le message
Code :
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:
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!
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h42   #11
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
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 :
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
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h28   #12
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
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?
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h51   #13
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Bien sur
Code :
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>';
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h56   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par m4riachi Voir le message
Bien sur
Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 15h07   #15
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
On génére 2 boucles?
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 15h42   #16
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
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.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 08h26   #17
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
Bonjour,

Je viens de tester le script, ça donne ceci:
Citation:
<?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....
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 14h59   #18
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Peut être que tu as juste oublié ceci
Code :
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()
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 09h16   #19
Invité de passage
 
Inscription : décembre 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 22
Points : 3
Points : 3
Un grand merci à tous, et pour vos conseils également!
haNjo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h01.


 
 
 
 
Partenaires

Hébergement Web