OVH Cloud OVH Cloud

Re : Changement de page sur formulaire valide

1 réponse
Avatar
jeremie.fouche
Le 11/01/2004 à 18H33, John GALLET a écrit :
...
>> Mais j'aimerai bien que lorsque le formulaire est valide, on aille
sur
>> une autre page.
> Non, tu aimerais que soit affichée une autre information. C'est ça ton
> besoin.

Heu, oui, mais dans ma conception (voir suite), une information est
rattachée a une page (serait-ce l'erreur ?).

>> 1- Quelle est la méthode généralement utilisée pour les formulaires
(
>> ie: <form action=" ??? "> ) ?
> Généralement, j'en sais rien. Celle que j'utilise est la suivante :
> - filtrer les variables en entrée.
> - vérifier la cohérence (variables obligatoires présentes, etc..)
> Si une incohérence détecteé :

Jusque la, tout va bien.

> require('print_form.php'); exit();

Ha, bah la, non, rien ne va plus.

> Dans ce print_form, la target est le script courant qui gère la réception
> du formulaire. Ce print_form ne fait que séparer l'affichage de la
> logique.
> Sinon (tout va bien), il suffit d'exécuter el code que je veux. Si je veux
> exécuter toto.php, je n'ai pas besoni de faire stupidement un aller retour
> pour rien, il suffit de faire require('toto.php'); exit().

Bon, j'ai besoin d'un petit coup de main pour vérifier ma conception :
seriez vous en train de la remettre en question ?

En fait, je me suis fait quelques classes permettant de faciliter le
developpement.

Une classe de base Layout, rattachée a un template.

class Layout
{
var $template = '';

function Afficher()
{
include('fond.tpl.php');
# fond.tpl.php fait un appel a $this->PrintContenu()
}

function PrintContenu()
{
include($this->template);
}

...
}

J'ai aussi une class RequestManager qui permet de faciliter la gestion
des données fournie a la page.

class RequestManager
{
var $messages = array();
var $erreurs = array();

# $actions est un tableau dont la clef correspond a un nom
# de variable, et la valeur correspond a une methode de la
# classe derivee.
var $actions = array();

...
}

Je me suis donc aussi fait une classe LayoutRequest :

class LayoutRequest extends Layout
{
var $manager = NULL;
var $managerName = '';

function PrintMessages()
{
print $this->manager->messages();
}

...
}

En gros, dans chaque page, j'ai juste a faire de l'héritage :

class SoireeManager extends RequestManager
{
# dans creer_soiree.tpl.php, j'ai un bouton submit :
# <input type="submit" name="creer" value="Cr&eacute;er"/>
var $actions = array( 'creer' => 'CreerSoiree' );

function CreerSoiree()
{
# Ici, on valide le formulaire, on met a jour les variables
# $this->erreurs et $this->messages
}
}

class LayoutGestionSoiree extends LayoutRequest
{
var $template = 'creer_soiree.tpl.php';
var $managerName = 'SoireeManager';

# On ajoute les fonctions spécifiques reclamées par 'var $template'
# ex : PrintTypeSoiree(){ ... }
}

et le script de chaque page est simple :

$layout = new LayoutGestionSoiree;
$layout->Afficher();

Dans ces conditions, j'ai du mal a voir comment gerer le contenu a
afficher en fonction de la validité du formulaire. Il faudrait
supprimer $layout, et l'affecter a une nouvelle classe, associée au
bon template de contenu que je souhaite voir afficher.
Faut il que je reparte a zero ? (heu, la, ca va etre lourd !)

--

Jérémie

1 réponse

Avatar
John GALLET
Re,

Non, tu aimerais que soit affichée une autre information. C'est ça ton
besoin.
Heu, oui, mais dans ma conception (voir suite), une information est

rattachée a une page (serait-ce l'erreur ?).
Ca me parait en effet très réducteur comme vision, mais on doit bien

pouvoir s'en affranchir.

require('print_form.php'); exit();
Ha, bah la, non, rien ne va plus.

Mais si. Tout votre code avec les layout et le tutti quanti possède bien

un point d'entrée (quand on instancie les objets "kivonbien"). Si ce point
d'entrée est dans entree.php, il suffit de faire require('entree.php');
exit(); à la place de
header("Location:entree.php?chiée_de_paramètres=TRUE");

Rien de plus.

Bon, j'ai besoin d'un petit coup de main pour vérifier ma conception :
seriez vous en train de la remettre en question ?
A priori non. Seulement son appel.


En fait, je me suis fait quelques classes permettant de faciliter le
developpement.
Admettons. Quand je vois les noeuds au cerveau que ça vous cause, j'émets

uin doute sur la partie "faciliter", mais admettons ;-)

function PrintContenu()
{
include($this->template);
}
En gros y'a qu'elle qui bosse, tout le reste c'est du temps perdu et des

couches empilées pour rien. Au passage, n'utilisez plus include mais
require(), ou alors testez le retour de l'appel à include (cf la FAQ du
forum pour la différence entre les deux, http://faqfclphp.free.fr/).

# $actions est un tableau dont la clef correspond a un nom
# de variable, et la valeur correspond a une methode de la
# classe derivee.
Là j'ai du mal à comprendre sans plus d'infos : selon le type d'action qui

est une variable reçue dans l'URL, on appelle telle ou telle méthode,
c'est ça ?

var $actions = array( 'creer' => 'CreerSoiree' );
Et ensuite on ajoute 'modifier' =>'ModifierSoiree' et si on reçoit dans

l'url $toto==modifier, on appelle la bonne méthode donc si je comprends
bien. En gros on réinvente le switch...
Ne pas oublier de vérifier que in_array() la valeur demandée et traiter
une erreur si absente.

Dans ces conditions, j'ai du mal a voir comment gerer le contenu a
afficher en fonction de la validité du formulaire. Il faudrait
supprimer $layout, et l'affecter a une nouvelle classe, associée au
bon template de contenu que je souhaite voir afficher.
Non , seulement d'instancier l'objet à un autre moment a priori.


a++;
JG