Pb récupération tableau de variable : ça veut pas !

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 : Pb récupération tableau de variable : ça veut pas !

par leroimarco » 09 avr. 2006, 12:11

merci Truc ! Pour les sessions, c'est ce que j'ai fait et c'est vrai que c'est beaucoup plus pratique :wink:

Je mets donc [RESOLU] et je vais relire mon script pour résoudre ce pb de valeur de champ.

Bon dimanche à toi

par Truc » 09 avr. 2006, 11:59

Alors, j'ai momentanément retiré le tag résolu pour 2 petits problèmes. Le premier est gênant dans le fait que désormais, quand le formulaire est validé, le formulaire n'est plus rempli avec les éléments déjà saisis par l'utilisateur :?
Tu n'as pas d'attribut "name" dans la balise <input> l'id n'est pas suffisant.
Le second est plus une interrogation. Au moment de traiter les champs après validation du formulaire, le traitement va se faire en fonction du type de champ (input, checkbox, radio button, etc...). Comment ajouter ce paramètre dans le tableau principal nommé $tableau ???
La tu dois rajouter un paramètre dans la fonction FormInput() pour préciser le type puis l'inclure également dans le tableau, dans ce style:
FormInput ($label, $name, $size, $maxlenght, $needed,$type)
$tableau[$name] = $needed.'.'.$type;
sinon tu as aussi les sessions pour passer ce contenu

par leroimarco » 09 avr. 2006, 11:32

Alors, j'ai momentanément retiré le tag résolu pour 2 petits problèmes. Le premier est gênant dans le fait que désormais, quand le formulaire est validé, le formulaire n'est plus rempli avec les éléments déjà saisis par l'utilisateur :?

Le second est plus une interrogation. Au moment de traiter les champs après validation du formulaire, le traitement va se faire en fonction du type de champ (input, checkbox, radio button, etc...). Comment ajouter ce paramètre dans le tableau principal nommé $tableau ???

Enfin, une autre interrogation. Quand je visualise la source html, l'attribut 'value' du champ caché qui contient la serialisation du tableau est relativement long pour un formulaire qui ne contient que peu de champs. N'ya t-il pas un risque de dépassement de buffer ou quelque chose dans le genre ?

par leroimarco » 09 avr. 2006, 09:44

Re bonjour,

En même temps que je mets [RESOLU], je poste le script qui fonctionne. Il était donc de bon ton d'utiliser serialize() et unserialize() (merci Cyrano) en lieu et place de implode() et explode(). Par contre, pour que la chaine de caractère soit correctement transmises dans le $_POST, il convient d'utiliser la fonction htmlspecialchars() pour échapper les guillemets. Voilà donc le script pour ceux que ça intéresse. Je rappelle que mon objectif est de créer des fonctions de création et de validation de formulaire un poil automatisées.
<?php

function FormCreate($class, $action, $formname='Form', $method='POST', $encryption='') {
  echo '<form method="' . $method . '" action="' . $action . '" name="' . $formname . '" class="' . $class . '">' . "\n";
}

function FormEnd() {
  echo '</form>';
}

function FormInput ($label, $name, $size, $maxlenght, $needed) {
  global $tableau;
  $tableau[$name] = $needed;

  $result_forminput  = '<label for="' . $name . '">' . $label . '</label>' . "\n" . '<input type="text" id="' . $name;
  $result_forminput .= '" value="';
  $result_forminput .= isset($_POST[$name])?$_POST[$name]:NULL;
  $result_forminput .= '" size="' . $size . '" maxlenght="' . $maxlenght . '" />';
  $result_forminput .= ($needed=='1')?"*":NULL;
  $result_forminput .= "\n";

  echo $result_forminput;
}

function FormSubmit($namesubmit, $labelsubmit) {
  $result_formsubmit  = '<input type="submit" class="checkform" ';
  $result_formsubmit .= 'name="' . $namesubmit . '" value="' . $labelsubmit . '" />';
  echo $result_formsubmit;
}
?>
<? //////////////////   FIN DE DESCRIPTION DES FONCTIONS   //////////////////////////// ?>

<?
$tableau='';
// Début du script
$action=(isset($_POST['envoi']))?$_POST['envoi'] : Null;

if($action) {
  if(isset($_POST['table'])) {
    $tableau = unserialize($_POST['table']);
    var_dump($tableau);
  }
}
?>
<html>
<head>
</head><body>
<?php

FormCreate('css', 'formulaire3.php', 'Formulaire');
FormInput('Age du capitaine : ', 'age_capitaine', '50', '10', 0);
FormInput('Adresse : ', 'adresse', '30', '10', 1);
FormInput('Ton salaire : ', 'salaire', '50', '10', 0);
var_dump($tableau);
$tab_serial = serialize($tableau);
?>
<input type="hidden" name="table" value="<?php echo htmlspecialchars($tab_serial); ?>">
<?
FormSubmit('envoi', 'Valider');
FormEnd();
?>
</body>
</html>
Bon dimanche à tous

par leroimarco » 08 avr. 2006, 23:40

:pouce:

Merci à vous du coup de paluche !

Je vais potasser tout ça. Bonne fin de soirée à vous et bon week end

:merci:

par Truc » 08 avr. 2006, 23:30

soit tu places dans le tableau ce que tu veux y voir:
$tableau[$name] =$name.'-'.$needed;
et ensuite l'implode dans le champ caché.


Soit au lieu d'utiliser implode utiliser les fonctions que Cyrano t'a montrées

par leroimarco » 08 avr. 2006, 23:12

Mais pourquoi l'implode de mon tableau donne '0-1-0' ?
Pour la simple raison que c'est ce que tu lui fournis:
$tableau[$name] = $needed; 
Alors comment faire pour que l'implode contienne ce que je voudrais qu'elle contienne, à savoir 'age_capitaine-0-adresse-1-salaire-0' :-k ??

par leroimarco » 08 avr. 2006, 23:09

oki, merci à vous deux pour ces infos :merci:

Par contre, je précise que effectivement, le formulaire n'est pas validé mais ce que contient $tableau, c'est bien le nom du champ (et pas ce qui est saisi par l'utilisateur :wink: ) puisque l'objectif est de récupérer les champs utilisés pour créer ce formulaire. $tableau reçoit donc comme paramètre le nom du champ et l'argument $needed (qui vaut 0 ou 1) et qui indique au script si le champ devra impérativement être renseigné par l'utilisateur ou s'il est seulement facultatif. Vilà vilà.

Donc, je ne comprends pas encore le résultat de mon implode mais ce doit être la fatigue :)

par Truc » 08 avr. 2006, 22:52

Mais pourquoi l'implode de mon tableau donne '0-1-0' ?
Pour la simple raison que c'est ce que tu lui fournis:
$tableau[$name] = $needed; 
et que vaut $needed ?
FormInput('Age du capitaine : ', 'age_capitaine', '50', '10', 0);
ici 0 puis 1 et enfin 0 :wink:

En passant regarde aussi ceci:
$_POST['$name']
je ne pense pas que la variable sera interprétée comme tu l'espères.

par jpaul » 08 avr. 2006, 22:50

Me semble que ton problème vient du fait que tu fais ton implode au moment où tu affiches le formulaire et non au moment où tu le valide.
Quand tu fas l'implode, les champs du formulaire ne sont pas encore mofifiées non ?

par leroimarco » 08 avr. 2006, 22:49

Pas de soucic :wink:
Ok, je vais essayer avec ces 2 fonctions. Mais je pensais que implode et explode étaient plus adaptées aux tableaux.

Par contre, si la syntaxe est correcte, je ne m'explique toujours pas pourquoi l'implode du tableau me retourne "0-1-0" et pas "age_capitaine-0-adresse-1-salaire-0 ... #-o

par Cyrano » 08 avr. 2006, 22:44

Ok, alors autant pour moi, j'avais pas fait le lien entre table et ton tableau de valeurs. Donc dans ce cas effectivement, c'est correct.

Ceci dit, puisque tu pars déjà d'un tableau ($_POST), pourquoi ne pas utiliser serialize() et unserialize(), ça simplifierait encore plus les manipulations

par leroimarco » 08 avr. 2006, 22:19

](*,) j'ai pas tout compris là :? Le champ table est censé stocker le contenu intégral de mon tableau $tableau. Ce champ table est lui passé dans le $_POST[]. Mais pourquoi l'implode de mon tableau donne '0-1-0' ?

par Cyrano » 08 avr. 2006, 22:02

Non puisque le champ "table" n'est pas dans le tableau affiché qui ne contient que age_capitaine, adresse et salaire

par leroimarco » 08 avr. 2006, 22:00

J'ai peut être un début de piste. Quand j'exécute le script et que je visualise la source, voilà ce que j'obtient :

Code : Tout sélectionner

<html> <head> </head><body> <form method="POST" action="formulaire3.php" name="Formulaire" class="css"> <label for="age_capitaine">Age du capitaine : </label> <input type="text" id="age_capitaine" value="" size="50" maxlenght="10" /> <label for="adresse">Adresse : </label> <input type="text" id="adresse" value="" size="30" maxlenght="10" />* <label for="salaire">Ton salaire : </label> <input type="text" id="salaire" value="" size="50" maxlenght="10" /> array(3) { ["age_capitaine"]=> int(0) ["adresse"]=> int(1) ["salaire"]=> int(0) } <input type="hidden" name="table" value="0-1-0"> <input type="submit" class="checkform" name="envoi" value="Valider" /></form> </body> </html>
Au vu de ce que me donne le var_dump sur le tableau

Code : Tout sélectionner

array(3) { ["age_capitaine"]=> int(0) ["adresse"]=> int(1) ["salaire"]=> int(0)
Est-ce que ce que j'envois dans le value

Code : Tout sélectionner

<input type="hidden" name="table" value="0-1-0">
est normal ???