Enregistrer plusieurs variables dans une seule variable et les lire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Enregistrer plusieurs variables dans une seule variable et les lire

re

par machinerie111 » 29 déc. 2007, 14:59

Bonjour, j'ai cherché sur google le fonctionnement de serialize et unserialize j'ai trouvé beaucoup de chose différente et rien qui marche...
Donc si j'ai ce tableau :
$tableau=array(1=>chien, 2=>chat, 3=>cheval);
quel est la ligne à insérer dans le value de mon champ hidden et la ligne qui me permet d'unserializer pour pouvoir faire afficher chien et chat sur une autre page? Merci

par Ryle » 29 déc. 2007, 12:05

La meilleure solution pour conserver des informations d'une page à une autre consiste à utiliser les sessions. Elles sont très simples à utiliser, il suffit de faire appel à start_session() pour la démarrer et tu peux ensuite utiliser le tableau $_SESSION comme s'il était commun à toutes tes pages (tu peux donc y stocker les données de ta base et les lire dans une autre page)

Tu peux aussi faire suivre les données en get ou en post, mais lorsqu'il s'agit d'un tableau, pour que cela fonctionne, il te faut linéariser celui-ci en utilisant la fonction serialize() (et unserialize() sur l'autre page pour le délinéariser), mais ça ne vaut pas la session :)

re

par machinerie111 » 29 déc. 2007, 11:42

Je vais essayer un peu plus de t'expliquer
Je sors d'une base de donnée plein de variable $prenom $nom et $email par exemple. j'en fais un tableau :
$tableau=array(1=>$prenom, 2=>$nom, 3=>$email);
là sur cette page si je fais echo $tableau[1]; j'ai le prénom du type qui s'affiche.
Mon but et mon soucis est là, je veux transmètre $tableau en post afin de faire sur une autre page un echo $tableau[1] sorti en post...
mon soucis là est que si je fais un <input type="hidden" name="tableau" value="<?php echo $tableau;?>"> en post sur l'autre page mon $_POST['tableau'] me donne array et donc je ne peux faire echo $tableau[1]; tu comprends?

par Kaoteknik » 29 déc. 2007, 01:27

Si, c'est possible...

Etant donné que $var_globale contiendra toutes les valeurs du tableau généré précedemment, tu pourras plus loin isoler chacune d'entre-elles. Une méthode serait d'utiliser la fonction explode sur la variable $resultat, ce qui génèrera un nouveau tableau :
<?php
$var_globale = $tableau['a'] .' '. $tableau['b'] .' '. $tableau['c'];
?>

<form method="post" action="<?php echo $PHP_SELF; ?>">
<input type="hidden" name="mon_texte" value="<?php  echo $var_globale; ?>" />
<input type="submit" name="submit" value="submit />

<?php
$resultat = $_POST['mon_texte'];

echo $resultat;

$new_result = explode (' ', $resultat);

foreach ($new_result as $var_isolee) {
echo $var_isolee;
}
?>
Tout ceci devrait fonctionner, mais c'est plutôt tiré par les cheveux et j'avoue avoir un peu de mal à comprendre ce que tu souhaites obtenir comme résultat au final.

re

par machinerie111 » 29 déc. 2007, 01:11

Donc on revient bien, c'est pas possible avec cette méthode donc de faire passer un tableau en post puisque si je met $var_globale en value dans le formulaire je ne pourrai pas consulter une des 3 variables de $var_globale...

par Kaoteknik » 28 déc. 2007, 23:44

Déjà si tu utilises $var_globale['a'] tu n'obtiendras aucun résultat, puisque cette variable n'est pas un tableau (elle contient le résultat de plusieurs variables issues d'un tableau, mais est déclarée elle-même comme une simple variable scalaire).

Par conséquent si tu souhaites transmettre le contenu de la variable globale et l'afficher, ça pourrait donner ceci (ce n'est qu'un exemple) :
<?php
$var_globale = $tableau['a'].$tableau['b'].$tableau['c'];
?>

<form method="post" action="<?php echo $PHP_SELF; ?>">
<input type="hidden" name="mon_texte" value="<?php  echo $var_globale; ?>" />
<input type="submit" name="submit" value="submit />

<?php
$resultat = $_POST['mon_texte'];

echo $resultat;
?>

re

par machinerie111 » 28 déc. 2007, 23:21

pour la passer n'est pas mon soucis. Ma question est pour la lire si par exemple dans ton code je veux lire la variable a de $var_global je fais quoi une fois récupéré en post echo $var_global[a]; par exemple?

par Genova » 28 déc. 2007, 22:55

Pour cela tu dois la sauver quelque part si tu veux la lire ailleurs :
- En session
- Dans une base de donnée
- Dans un fichier
- La passer en GET ou en POST d'une page à l'autre
etc ..

re

par machinerie111 » 28 déc. 2007, 22:53

Et pour lire sur les autres pages la variable a de var_global je fais comment dans ce cas là?

par Kaoteknik » 28 déc. 2007, 22:27

Admettons que ton tableau $tableau contienne plusieurs variables...
$var1 = 1;
$var2 = 2;
$var3 = 3;

$tableau = array (a => $var1, b => $var2, c => $var3);
$tableau pourrait aussi être décomposé comme suit :
$tableau['a'] = 1;
$tableau['b'] = 2;
$tableau['c'] = 3;
Si par la suite tu veux transmettre une variable qui contiendra les différentes valeurs du tableau, il te suffira de lui affecter chacune d'entre-elles en les concatenant :
$var_globale = $tableau['a'].$tableau['b'].$tableau['c'];
Ainsi tu pourras transmettre la valeur de toutes les variables à partir d'une variable "globale" unique.

re

par machinerie111 » 28 déc. 2007, 22:11

Bonsoir et merci,
En fait mon problème avec cette solution de tableau c'est que je ne peux transmètre la variable principale en post pour ensutie pouvoir accèder sur les autres pages aux variables de $variable... Que proposez-vous? merci

Re: re

par Ryle » 28 déc. 2007, 19:23

Donc en fait si je fais sa :
$variable=array(1=>$variable1, 2=>$variable2); echo $variable[1]; cela m'affichera $variable1?
Le plus simple aurait été de l'essayer pour le constater :P

Pour être précis, cela t'affichera uniquement la valeur qu'avait $variable1 au moment où tu l'as enregistrée dans le tableau. La nuance est faible, mais cela veut dire que si ta variable $variable1 est modifiée par la suite cela n'impactera pas la valeur de $variable[1] contenue dans le tableau.

Mais sinon, c'est bien ça :)

par Truc » 28 déc. 2007, 14:05

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".

re

par machinerie111 » 28 déc. 2007, 14:03

Donc en fait si je fais sa :
$variable=array(1=>$variable1, 2=>$variable2); echo $variable[1]; cela m'affichera $variable1?

par Sékiltoyai » 28 déc. 2007, 13:47