Formulaire PHP : transfert de tableau

Résolu/Fermé
miklb Messages postés 48 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 10 mai 2009 - 31 août 2005 à 12:03
 bobjr72 - 3 déc. 2013 à 15:43
Bonjour,
J’ai un formulaire surlequel l’utilisateur saisie ses données et en arrière plan le script créé (indépandamment de ces saisies) un tableau simple de valeurs (type chaine de caractère).
Je souhaite passer toutes ces infos par le formulaire (méthode POST). Le tableau est passé par un <INPUT TYPE="hidden" NAME="tableau" VALUE="$tableau">
mais sur le script appelé, je n’arrive pas à récupérer mon tableau.

Je fais : $tableau=$_POST[‘tableau’] ;


Aurais je loupé qql chose ?? ;-))

Merci.

9 réponses

rdutein Messages postés 1 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 23 janvier 2006 27
23 janv. 2006 à 07:56
Mais lol Strem .. comment poster innutilement et en plus en dévalorisant miklb.
Bref ...

Je vois que tout ca a été posté y a pas mal de temps mais pour tout ceux qui se pose la question:
Comment passer un tableau (Array) via un formulaire et comment le récupérer?
Voici l'astuce la plus simple a mon gout.

Utilisez les fonctions implode et explode
cf. code ci dessous:

# hidden pour envoyer le tableau
<input  name='tableau' type='hidden' value='",implode("|",$tableau),"'>

-----------------------------------------------------------------

# reconstitution du tableau dans tableau_1
$tableau_1=explode("|",$tableau);


Voila, on décompose notre tableau en une chaine de caractères avec la fonction implode (exp: tableau[truc][machin][chose] en tableau="truc|machin|chose"

Et a la reception de cette chaine tableau on la recompose en Array avec explode.

Jsuis peu etre pas trés clair mais il est 8h du mat et j'ai pas dormis.
++
28
Merci rdutein : )
0
très intéressant, merci :)
0
Encore mieux,
J'ai galeré un moment car je voulais transmettre un tableau du type :
$listeTableau[count($listeTableau)]=array('caisse' => $listeCaisses[$j]["nomCaisseRegionale"],
'contrat' => $listeContrats[$i]->getLibelleContrat(),
'fond' => $fondCellule,
'texte' => $texte);

l'astuce est de passer par les variables de session!

Pour le passer
session_start(); //déclaré en début de fichier
$_SESSION['listeTableau'] =$listeTableau;
<form action="pageRecevante.php" method="post" target="_blank" />
<input type="submit" value="Exporter tableau">
</form>

Pour le recevoir
session_start(); //déclaré en début de fichier
if (isset($_SESSION['listeTableau']))
$listeTableau= $_SESSION['listeTableau'];
//utilisation normale ensuite
for ($indice = 0 ; $indice < count($listeTableau) ; $indice++)
{
echo $listeTableau[$indice]["contrat"];
}

Facile ;)
17
Un grand merci ca marche nickel!! Surtout que moi mon tableau est en fait une matrice et que je pouvais pas la décomposer en une fois avec explode/ implode comme proposé par rdutein le passer en variable de session c'est juste l'idée du siecle!
0
merci ca marche nikel
0
plus propre : http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/
0
Bonjour,

Je confirme la syntaxe aussi subtile que puissante pour manipuler les formulaires dynamiques :

Exemple :

print ("<form enctype='application/x-www-form-urlencoded' action='panier.php' method='post'>\n");
print ("<table style='width:90%; margin:0; padding: 0; font-family:\"Microsoft Sans Serif\"; font-size:12px; text-align:left'>\n");

Imaginez une Boucle sur une requête SQL concernant des références articles et des quantités modifiables :

print ("<tr>\n");
print ("<td align='left''>$bart->ref</td>\n");
print ("<td align='right'><input type='text' value='$bart->qte' name='Qte[]' size='1' maxlenght='3'></td>\n");
print ("</tr>\n");

print ("</form></table>\n");

En récupération du Post :


if (isset($_POST['Qte']))
foreach ($_POST['Qte'] as $cle => $value)
print ("Qte no $cle = $value<br>\n");

C'est aussi simple que ça !!

Le PHP est le langage le plus puissant que je connaisse pour la manipulation des tableaux,
profitons de tout le potentiel offert par ce langage !

Merci
5
TOTO il est content de cette super réponse
0
je trouve vachement compliqué vos méthode ^^

moi j'utilise la fonction "serialize" ce qui met le array sous une autre forme :


-------------
<input type="hidden" name="aaa"
value="<?=serialize($tableau);?>" />
-------------
print_r(unserialize($_POST['aaa']));
-------------

puis avec unserialize je retransforme en array

et voilà :D
4
salut a tous
juste une petite precision :
il vous faudra mettre value='<?=serialize($tableau);?>' /> cad utiliser des simples quotes et non des doubles sinon les valeurs de votre tableau ne seront pas toutes lues à cause des doubles-quotes que generent le serialize.
de meme quand vous allez vouloir reconstruire le tableau noubliez pas de mettre unserialize(stripslashes($_POST['aaa'])) afin denlever les antislash rajoutes par html.
voila jespere que ca pourra vous servir.
+++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
On peut faire passer ca comme ca il me semble
<input type="hidden" name="tableau[]" value="$tableau" />
4
tontonbruno Messages postés 6 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 4 octobre 2021 1
1 sept. 2006 à 14:42
... euuuhhh sorry ça ne marche pas, car on ne stocke pas en Hidden les valeurs modifiées du formulaire ... mais les précédentes valeurs.
C'est donc valable pour des données NON modifiables.
Par contre : solution ( trouvée sur le net ) :
On récupère les data comme suit :
for ($i=0;$i<$nbre_poste;$i++) { $t_par [$i] = $_GET['montablo'][$i]; }

Formulaire : on boucle sur la ligne suivante :
"<input type='text' name='montablo[]' value='" . $montablo [$i] . "'>";

Voilà. `-)
1
Salut à tous,
Petite question sur la fonction serialize. Lorsque je fais passer un tableau d'une page à une autre les doubles quotes se trouvant dans le tableau disparaissent.
Sur ma première page j'utilise cette commande:
exec("sed -e 's/\$ii=array(0=>\"x\")/\$tab='\"'$serial'\"'/g' /var/www/testlocal.php > $path/local$i.php");

et sur ma 2ème page je retrouve ceci:
$tab='a:3:{i:0;s:6:centos;i:1;s:2:xp;i:2;s:6:debian;}';

alors que je devrai retrouver ceci comme sur ma première page:
$tab='a:3:{i:0;s:6:"centos";i:1;s:2:"xp";i:2;s:6:"debian";}';

Les doubles quotes entourant le nom des os disparaissent, est -ce que quelqu'un pourrait m'aider merci :)
1
StreM Messages postés 515 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 28 février 2007 124
31 août 2005 à 15:16
Sans aucun doute !
$tableau est, bizarrement, un tableau !
Donc différent d'une chaine de caractères. Tu dois récupérer tes valeurs par $tableau[0], $tableau[1], etc...
Si tu sais pas ça, je te conseille d'aller sur http://www.phpdebutant.org. C'est le B.A-BA.
-1
miklb Messages postés 48 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 10 mai 2009 8
1 sept. 2005 à 16:07
Bonjour,

Je pense que le temps perdu à prendre des gants pour la réponse a été plus que zappé ! C’est mon avis !
Cela dit, évidemment, je ne suis pas expert, mais j’ai qql connaissances.
Bref, j’ai repotassé tout ça hier soir et j’ai réussi. En fait mon tableau passe du script 1 au 2 puis doit revenir au 1.
Mais je maintiens (sauf erreur) que je ne peux transférer simplement tout un tableau par une seule ligne <INPUT TYPE=HIDDEN …>
Il faudrait faire une boucle <INPUT TYPE=HIDDEN name =tableau value=$tableau[‘$indice’]…> ?
Bon en tout cas ma solution a été de mettre mon tableau en variable de session et ça a été nickel.

Merci quand même !
0
Bonjour,


Je suis débutant et je n'arrive pas a faire fonctionner mon formulaire newsletter. Pouvez vous me donner un coup de main sur ce problème de premier choix.

Je ne reçois pas l' Email de confirmation

Pouvez-vous adapter <?php……?> avec <form>……</form>


Le lien de ma page: http://www.cijoint.fr/cjlink.php?file=cj200910/cijyw5NMrK.txt


<head>

<?php if($_POST['action'] == "formok")
{
$e_mail = $_POST['email'];
if($e_mail == ""|| $e_mail == "e-mail")
{
$txt = " votre e-mail";
}
else
{
$destinataire= "bwba@hotmail.fr";
$objet = "Demande d'inscription";
$headers = "From: bwba@hotmail.fr \n\r";
$headers.= "Content-Type: text/html; charset=utf-8";
$headers .= "MIME-Version: 1.0 ";
$msg = "Nous vous informons d'une demande d'inscription suivant : ". $e_mail ."";
$msg = nl2br($msg);
mail($destinataire, $objet, $msg, $headers);
$msg2= "
Nous avons bien pris en compte votre demande d'inscription ? la newsletter.
Pour vous d?sinscrire, contactez nous

";
mail($e_mail, $objet, $msg2, $headers);
$txt = "Vous avez un message";
}
}
?>
</head>





<style type="text/css">
body {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:60%;
margin:50px;
color:#666666;}
.fieldset {
width:300px;
border: 0px solid red;
}
.fieldset label {
text-align:right;
width:70px;
float:left;
padding:0.2em;
margin:0;
margin-top:0.3em;
}
.fieldset .nobr {display:none;} .fieldset .textfield {
margin:3px;
height:20px;
width:200px;
border:solid 1px #8caf10;
background: transparent url("http://") no-repeat;
}
.fieldset .textarea {
margin:3px;
height:165px;
width:200px;
border:solid 0 #fff;
}
.submit {
margin:3px;
height:20px;
border:solid 1px #8caf10;
width:80px;
font:1.1em Verdana, Arial, Helvetica, sans-serif;
color:#000000;
text-transform:uppercase;
background: transparent url("http://") no-repeat;
}
}
</style>




<body>

<form action="" method="post">
<fieldset class="fieldset"><br>
<span class="" style="direction: ltr; text-align: left;"><label
for="email"></label></span> <br class="nobr">
<input name="email" class="textfield" id="email"
type="text"> <span class=""
style="direction: ltr; text-align: left;"><br>
<span class="" style="direction: ltr; text-align: left;">
<br class="nobr">
<br>
<label for="submit"> </label><br
class="nobr">
<input name="submit" class="submit" id="submit"
value="envoyer" type="submit"></span></span></fieldset>
</form>

</body>
-1