Rechercher : dans
Par :

Formulaire PHP : transfert de tableau

Dernière réponse le 28 oct 2009 à 02:11:05 miklb, le 31 aoû 2005 à 12:03:52 
 Signaler ce message aux modérateurs

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.

1

StreM, le 31 aoû 2005 à 15:16:49

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.

Moins le blanc est intelligent, plus le noir lui parait bête

Répondre à StreM

2

miklb, le 1 sep 2005 à 16:07:28
  • +1

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 !

Répondre à miklb

3

rdutein, le 23 jan 2006 à 07:56:50
  • +3

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.
++

Répondre à rdutein

4

BeliG, le 5 mai 2006 à 12:04:44

Merci rdutein : )

Répondre à BeliG

5

tontonbruno, le 1 sep 2006 à 14:42: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à. `-)

Répondre à tontonbruno

6

jon1316, le 30 mar 2007 à 01:15:47

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

Répondre à jon1316

7

cheperd, le 3 avr 2007 à 12:16:15
  • +3

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.
+++

Répondre à cheperd

8

vinz, le 27 avr 2007 à 18:07:19

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 :)

Répondre à vinz

9

michel C, le 22 oct 2007 à 19:14:06

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

Répondre à michel C

11

toto, le 19 fév 2008 à 16:42:11

TOTO il est content de cette super réponse

Répondre à toto

12

letudiante, le 30 oct 2008 à 10:48:42
  • +2

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 ;)

Répondre à letudiante

13

 eddy, le 28 oct 2009 à 02:11:05

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>

Répondre à eddy
Collection CommentÇaMarche.net