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

Eléphanteau du PHP | 40 Messages

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:

Eléphanteau du PHP | 40 Messages

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

Eléphanteau du PHP | 40 Messages

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 40 Messages

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