Leçon 11 : Passer des variables avec des formulaires

Les sites web interactifs ont besoin que les utilisateurs saisissent quelque chose. La méthode la plus courante pour recueillir ces entrées est d'utiliser un formulaire.

Dans cette leçon, nous verrons comment construire des formulaires et traiter les entrées sur le serveur.

<form>

Lorsque l'on code un formulaire, deux attributs particuliers sont importants : action et method.

action
Sert à indiquer l'adresse URL à laquelle le formulaire est soumis. Dans notre cas, c'est le fichier PHP qui traitera l'entrée.
method
Peut recevoir l'une ou l'autre des valeurs "post" ou "get", lesquelles représentent deux méthodes différentes de passer des données. Pour l'instant, il n'y a pas besoin de savoir beaucoup plus à propos de cette différence, sinon qu'avec "get", les données sont envoyées dans l'URL, et qu'avec "post" elles sont envoyées en bloc via le service d'entrée standard (STDIN). Dans la dernière leçon, nous examinerons comment les données sont récupérées dans l'URL à l'aide de documentation$_GET. Dans cette leçon-ci, nous étudions comment sont récupérées les données soumises par un formulaire avec la méthode "post".

Une page HTML avec un formulaire

La page qui contient le formulaire n'a pas besoin d'être un fichier PHP (mais ça peut l'être). Elle ne sera pas forcément sur le même site que le fichier qui recevra les données.

Dans notre premier exemple, nous jouerons avec un formulaire très simple avec un seul champ de saisie :


	<html>
	<head>
	<title>Form</title>
	</head>
	<body>

	<h1>Enter your name</h1>

	<form method="post" action="handler.php">
	<input type="text" name="username">
	<input type="submit">
	</form>

	</body>
	</html>


	

Le résultat dans un navigateur est un formulaire :

Form

Passons maintenant à la partie intéressante : récupérer et traiter les données avec PHP.

Demander les données de formulaire avec PHP

Pour demander les données soumises au travers d'un formulaire (la méthode "post"), vous utilisez documentation$_POST :


	$_POST["fieldname"];

	

Ce qui renvoie la valeur d'un champ dans le formulaire. Mettons cela à profit dans un exemple.

D'abord créer une page avec un formulaire comme précédemment. Puis construire une page PHP nommée "handler.php" (remarquez que c'est le nom de la page que l'on donne en valeur de l'attribut action dans notre <form>).

Le fichier "handler.php" aura le contenu suivant :


	<html>
	<head>
	<title>Form</title>
	</head>

	<body>

	<?php

	echo "<h1>Hello " . $_POST["username"] . "</h1>";

	?>

	</body>
	</html>

	

Entrée de l'utilisateur et conditions

Dans l'exemple suivant, nous essaierons d'utiliser l'entrée de l'utilisateur pour créer des conditions. Il nous faut d'abord un formulaire :


	<html>
	<head>
	<title>Form</title>
	</head>
	<body>

	<form method="post" action="handler.php">

	<p>What is your name:</p>
	<input type="text" name="username"></p>

	<p>What is your favorite color:
	<input type="radio" name="favoritecolor" value="r" /> Red
	<input type="radio" name="favoritecolor" value="g" /> Green
	<input type="radio" name="favoritecolor" value="b" /> Blue </p>

	<input type="submit" value="Submit" />

	</form>

	</body>
	</html>

	

Ce qui donnera quelque chose comme ça dans le navigateur :

Nous utiliserons ensuite ces entrées pour créer une page qui change automatiquement de couleur de fond en fonction de la couleur favorite indiquée par l'utilisateur. Pour ce faire, nous créons une condition (voir la leçon 6) pour comparer avec les données fournies par l'utilisateur dans le formulaire.

	<?php

	$strHeading = "<h1>Hello " . $_POST["username"] . "</h1>";

	switch ($_POST["favoritecolor"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>
	<head>
	<title>Form</title>

	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>

	

Le fond sera blanc si l'utilisateur ne choisit pas de couleur favorite dans le formulaire. C'est le rôle de default qui définit ce qui arrivera si aucune des conditions antérieures n'est remplie.

Mais que se passe-t-il si l'utilisateur ne donne pas son nom ? Il n'y aurait alors que "Hello" dans l'entête. Nous utiliserons une condition supplémentaire pour y remédier.


	<?php

	$strUsername = $_POST["username"];

	If ($strUsername != "") {
	    $strHeading = "<h1>Hello " . $_POST["username"] . "</h1>";
	}
	else {
	    $strHeading = "<h1>Hello stranger!</h1> ";
	}

	switch ($_POST["favorite color"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>

	<head>

	<title>Form</title>
	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>


	

Dans l'exemple ci-dessus, nous employons une condition afin de valider l'information fournie par l'utilisateur. Dans ce cas-ci, ça n'a pas beaucoup d'importance que l'utilisateur ne donne pas son nom. Mais au fur et à mesure que votre code se compliquera, il sera crucial de tenir compte du fait que l'utilisateur pourra remplir les formulaires autrement que vous l'aviez prévu.

Exemple — Formulaire de contact

Muni de cette connaissance toute fraîche de PHP et des formulaires, vous être capable de créer un formulaire de contact en utilisant la fonction documentationmail, qui a la syntaxe suivante :


	mail(to, subject, message);

	

Il nous faut d'abord un formulaire HTML simple :


	<html>
	<head>
	<title>Contact form</title>
	</head>
	<body>

	<h1>Contact form</h1>

	<form method="post" action="handler.php">
	<p>Subject:<br /><input type="text" name="subject" /></p>
	<p>Message:<br /><textarea name="message"></textarea></p>
	<input type="submit">
	</form>

	</body>
	</html>

	

Puis nous avons besoin d'un script PHP pour expédier l'entrée des l'utilisateurs :


	<html>
	<head>
	<title>Functions</title>
	</head>
	<body>

	<?php

	// Recipient (change to your e-mail address)
	$strEmail = "name@mydomain.com";

	// Get user inputs
	$strSubject = $_POST["subject"];
	$strMessage = $_POST["message"];

	mail($strEmail,$strSubject,$strMessage);
	echo "Mail Sent.";


	?>

	</body>
	</html>

	

Veuillez remarquer que l'exemple ne fonctionnera que si vous avez accès à un serveur de courrier. Ce n'est pas le cas par défaut avec XAMP et la plupart des hôtes gratuits. Certains hôtes peuvent aussi vous demander d'inclure une entête from, ce qu'on fait avec un paramètre supplémentaire :


	mail("you@yourdomain.com", "Test", "This is a test mail", "From: me@mydomain.com");

	


<< Leçon 10 : Passer des variables dans une adresse URL

Leçon 12 : Les sessions >>

cron