Mettre un formulaire dans un template?

Eléphanteau du PHP | 41 Messages

17 août 2007, 01:07

Bonjour,

Je viens d'apprendre les base des templates. J'utilise l'approche PHP natif.

J'avais d'abord créé des formulaires en me référant au tutoqu'on m'avait conseillé sur ce forum.

En fait, mon formualire est fait sur une seule page et renvoie les valeurs déjà entrée si le formulaire n'a pas été correctemment complété.

J'ai pu l'adapter à mon code.

Maintenant, j'ai créé un template qui affiche les données d'un requête.
Ca aussi ça fonctionne.

Dans ce template j'aimerai donc mettre un formulaire qui fonctionne de la même manière que celle du tuto.
Mais celui-ci utilise
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
afin de pouvoir ré-afficher le formulaire.

Si j'utilise un template, je suppose que je perds tout les avantge du template si j'utilise la même méthode que celle du tuto.

Voic le code data.php qui appelle mon template et qui lui envoie les valeurs de la requête:
<?php
include_once '../Connection.php';

$resultats=$connexion->query("SELECT TYP_LABEL FROM TYPE_PRODUIT order by TYP_LABEL");
$resultats->setFetchMode(PDO::FETCH_OBJ);//on dit que le resultat soit récupérable sous forme d'objet

while($ligne=$resultats->fetch()){//on récupère le liste des types
  	$tab[]=$ligne->TYP_LABEL.'<br />';//on affiche les types
}
$resultats->closeCursor();//on ferme le curseur des résultats
include('template.php');
?>
Et voic le code de mon template.php :
<body>
<?php //include('menu.inc.php');
?>
<div class="BoitePrincipale">
  <div class="BoiteListeTypes">
    <h1>Types de produits existants: </h1>
    <?php foreach($tab as $val){
	echo $val ?>
    <br  />
    <?php }?>
  </div>
  <div class="BoiteAjouterTypes">
    <h1>Ajouter un type : </h1>
    <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
      <input name="type" type="text" class="majuscules_auto" value="" maxlength="40">
      <input type="submit" name="envoi" value="Envoyer">
    </form>
  </div>
</div>
</body>
Je bloque au niveau du formulaire dans template.php.
Ou le renvoyer? Vers une 3ème page php? Si je fais ça, je perds les anciennes valeurs entrées si le formualire n'est pas rempli correctement?

Mon ancien code par rapport au tuto est:
/** 
 * On commence par vérifier si le bouton soumettant le formulaire a été 
 * cliqué, "envoi" étant l'attribut "name" du bouton "submit" 
 * Sinon, on saute à la ligne 255 de ce code. 
 */ 
if(isset($_POST['envoi'])) 
{ /** blabla....... */
<p>Ajouter un nouveau type<br />
  </p>
  <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  <label>Type : </label>
  <input type="text" name="type" maxlength="40" value="<?php echo $type ?>" /><br />
  <input type="submit" name="envoi" value="Envoyer" />
  </form>
/** Si le formualire est complètement rempli alors */
echo "INSERT INTO TYPE_PRODUIT (TYP_LABEL) VALUES ('$type');";
Merci de votre aide.

Mammouth du PHP | 19672 Messages

17 août 2007, 06:30

Définis des valeurs par défaut.

En début de code, tu vérifie si le formulaire a été envoyé ou non. Juste avant, tu peux définir des variables de cette manière :
$monchamp = (isset($_POST['monchamp'])) ? $_POST['monchamp'] : null;
Ensuite dans ton template de formulaire, il te reste à ajouter ces valeurs :
<input type="text" name="monchamp" id="monchamp" value="<?php echo(monchamp); ?>" />
Lors du premier affichage de ta page, les valeurs seront initialisées à "null", les champs seront donc logiquement vides, mais au rechargement en cas d'erreur, une valeur aura été affectée à ta variable et elle sera reproduite dans ton formulaire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 41 Messages

17 août 2007, 10:08

Génial!

Ca marche.
Tout grand merci à toi :D :D :D