Bonjour,

Depuis que j'ai commencé a programmer en PHP, je me suis toujours demandé quelle est la meilleure façon de traiter un formulaire parmi ces trois : (si vous connaissez mieux je suis preneur)

1) Formulaire et traitement dans un même fichier .php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
session_start();
 
if(isset($_POST['log'], $_POST['pwd'])){
	$log = empty($log) ? '' : htmlspecialchars($_POST['log']);
	$pwd = empty($log) ? '' : htmlspecialchars($_POST['pwd']);
 
	// Traitement BDD, mise en place des sessions et autres
	$_SESSION['connect'] = true;
}
 
if(isset($_SESSION['connect'])){
	echo '<p>Bienvenue</p>';
} else {
?>
<form action="method1.php" method="post">
	<input type="text" name="log"/>
	<input type="password" name="pwd"/>
	<input type="submit" value="Envoyer"/>
</form>
<?php
}
?>
2) Formulaire et traitement dans un deux fichiers distincts.
Le fichier de traitement ne sert qu'a ce formulaire :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php // Formulaire
session_start();
 
if(isset($_SESSION['connect'])){
	echo '<p>Bienvenue</p>';
} else {
?>
<form action="method2_trait.php" method="post">
	<input type="text" name="log"/>
	<input type="password" name="pwd"/>
	<input type="submit" value="Envoyer"/>
</form>
<?php
}
?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php // Traitement
session_start();
 
if(isset($_POST['log'], $_POST['pwd'])){
	$log = empty($log) ? '' : htmlspecialchars($_POST['log']);
	$pwd = empty($log) ? '' : htmlspecialchars($_POST['pwd']);
 
	// Traitement BDD, mise en place des sessions et autres
	// if [...]
	$_SESSION['connect'] = true;
}
 
header('location: method2.php');
?>
3) Formulaire et traitement dans un deux fichiers distincts.
Le fichier de traitement peut servir a traiter d'autres actions similaires (formulaires) :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php // Formulaire de connexion
session_start();
 
if(isset($_SESSION['connect'])){
	echo '<p>Bienvenue</p>';
} else {
?>
<form action="method3_trait.php?act=login" method="post">
	<input type="text" name="log"/>
	<input type="password" name="pwd"/>
	<input type="submit" value="Envoyer"/>
</form>
<?php
}
?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php // Traitements multiples, dont la connexion
session_start();
 
$act = isset($_GET['act']) ? htmlspecialchars($_GET['act']) : '';
 
// Traitement connexion depuis connexion.php (par exemple)
if($act == 'login'){
	if(isset($_POST['log'], $_POST['pwd'])){
		$log = empty($log) ? '' : htmlspecialchars($_POST['log']);
		$pwd = empty($log) ? '' : htmlspecialchars($_POST['pwd']);
 
		// Traitement BDD, mise en place des sessions et autres
		// if [...]
		$_SESSION['connect'] = true;
	}
	header('location: connexion.php');
} 
// Traitement connexion depuis deconnexion.php (par exemple)
else if($act == 'logout'){
	session_unset();
	session_destroy();
	header('location: deconnexion.php');
}
[...]
else{
[...]
}
?>
Conclusion

J'imagine bien que chacune de ces manières à ses avantages et inconvénients.
(méthode 1 permet qu'en cas d'erreur, les champs du formulaires seront déjà remplis, par exemple)

Mais quand on se retrouve avec plusieurs types de traitements, du code léger (déconnexion) au code lourd (inscription, etc.), vaut-il mieux réunir formulaire et traitement, dissocier formulaire et traitement, ou regrouper les traitements similaires dans un même fichier, formulaire à part?


Merci de m'éclairer sur ce point