• Aucun résultat trouvé

Transformer le script de l’exemple 12-5 (commande en ligne) en permettant les saisies à partir de pages différentes et en créant sur chacune un bouton provoquant l’affichage de

session_start();

echo "F = ", $_POST['fond'];

$_SESSION['fond'] = $_POST['fond'];

$_SESSION['texte'] = $_POST['texte'];

}

?>

Un exemple de page du site cible d’un lien de la page principale (fichier exo12.7b.php).

Toutes les pages liées qui récupèrent les paramètres de couleurs doivent contenir le même code PHP.

<?php

session_start();

$fond=$_SESSION['fond'];

$texte=$_SESSION['texte'];

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<title>Couleurs du site avec des sessions</title>

<style type="text/css" >

body{background-color: <?php echo $fond ?> ; color: <?php echo $texte ?> ;}

legend{font-weight:bold;font-family:cursive;}

label{font-weight:bold;font-style:italic;}

-->

</style>

</head>

<body>

<p>Contenu de la page B avec les couleurs choisies <br />

<a href="exo12.7.php">Retour vers la page principale</a>

</p>

</body>

</html>

Exercice 8

Transformer le script de l’exemple 12-5 (commande en ligne) en permettant les saisies à

partir de pages différentes et en créant sur chacune un bouton provoquant l’affichage de

l’ensemble du panier à chaque demande.

La modification est très simple à réaliser et peut permettre de créer autant de page que l’on désire, chacune étant spécialisée dans une gamme de produits. La première page dédiée à l’achat de livres (fichier exo12.8.php) reprend l’essentiel de l’exemple 12.5 en ajoutant simplement un lien vers la deuxième page (repère 1).

<?php

session_start();

if(isset($_POST["envoi"])) {

//AJOUTER

if($_POST["envoi"]=="AJOUTER" && $_POST["code"]!="" && $_POST["article"]!=""

&&$_POST["prix"]!="") {

$code=$_POST["code"];

$article= $_POST["article"];

$prix= $_POST["prix"];

$_SESSION['code'][]= $code;

$_SESSION['article'][]= $article;

$_SESSION['prix'][]= $prix;

}

//VERIFIER

if($_POST["envoi"]=="VERIFIER") {

$prixtotal = 0;

echo "<table border=\"1\" >";

echo "<tr><td colspan=\"3\"><b>Récapitulatif de votre commande</b></td>";

echo

"<tr><th>&nbsp;code&nbsp;</th><th>&nbsp;article&nbsp;</th><th>&nbsp;prix&nbsp;</th>";

for($i=0;$i<count($_SESSION["code"]);$i++) {

echo "<tr> <td>{$_SESSION['code'][$i]}</td> <td>{$_SESSION['article'][$i]}

</td><td>{$_SESSION['prix'][$i]}</td>"; $prixtotal+=$_SESSION['prix'][$i];

}

echo "<tr> <td colspan=2> PRIX TOTAL </td> <td>".sprintf("%01.2f",

$prixtotal)."</td>";

echo "</table>";

}

//ENREGISTRER

if($_POST["envoi"]=="ENREGISTRER") {

$idfile=fopen("commande.txt",'w');

echo SID, session_id();

for($i=0;$i<count($_SESSION["code"]);$i++) {

fwrite($idfile, $_SESSION["code"][$i]." ;".$_SESSION["article"][$i]." ; ".

$_SESSION["prix"][$i]."; \n");

}

fclose($idfile);

}

//LOGOUT

if($_POST["envoi"]=="LOGOUT") {

session_unset();

session_destroy();

echo "<h3>La session est terminée</h3>";

}

$_POST["envoi"]="";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<title>Gestion de panier</title>

</head>

<body>

<div>

<a href="exo12.8b.php"><big>Page des disques</big></a><br />

</div>

<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded">

<fieldset>

<legend><b>Commande de livres</b></legend>

<table>

<tbody>

<tr>

<th>code : </th>

<td> <input type="text" name="code" /></td>

</tr>

<tr>

<th>article : </th>

<td><input type="text" name="article" /></td>

</tr>

<tr>

<th>prix :</th>

<td> <input type="text" name="prix" /></td>

</tr>

<tr>

<td colspan="3">

<input type="submit" name="envoi" value="AJOUTER" />

<input type="submit" name="envoi" value="VERIFIER" />

<input type="submit" name="envoi" value="ENREGISTRER" />

<input type="submit" name="envoi" value="LOGOUT" />

</td>

</tr>

</tbody>

</table>

</fieldset>

</form>

</body>

</html>

La deuxième page dédiée à l’achat de disques (fichier exo12.8b.php) est pratiquement identique, seuls les intitulés changent ainsi qu’un lien vers la première page (repère 1). Le code PHP commun aux deux pages permet l’affichage des articles commandés et le

récapitulatif de toute la commande à partir de n’importe quelle page. Comme indiqué plus haut nous pourrions donc créer sans difficulté, autant de pages que le site comporterait de familles d’articles.

<?php

session_start();

if(isset($_POST["envoi"])) {

//AJOUTER

if(isset($_POST["envoi"]) =="AJOUTER" && $_POST["code"]!="" && $_POST["article"]!=""

&&$_POST["prix"]!="") {

$code=$_POST["code"];

$article= $_POST["article"];

$prix= $_POST["prix"];

$_SESSION['code'][]= $code;

$_SESSION['article'][]= $article;

$_SESSION['prix'][]= $prix;

}

//VERIFIER

if($_POST["envoi"]=="VERIFIER") {

$prixtotal = 0;

echo "<table border=\"1\" >";

echo "<tr><td colspan=\"3\"><b>Récapitulatif de votre commande</b></td>";

echo "<tr><th>&nbsp;code&nbsp;</th><th>&nbsp;article&nbsp;</

th><th>&nbsp;prix&nbsp;</th>";

for($i=0;$i<count($_SESSION["code"]);$i++) {

echo "<tr> <td>{$_SESSION['code'][$i]}</td>

<td>{$_SESSION['article'][$i]}

</td><td>{$_SESSION['prix'][$i]}</td>";

$prixtotal+=$_SESSION['prix'][$i];

}

echo "<tr> <td colspan=2> PRIX TOTAL </td> <td>".

sprintf("%01.2f", $prixtotal)."</td>";

echo "</table>";

}

//ENREGISTRER

if($_POST["envoi"]=="ENREGISTRER") {

$idfile=fopen("commande.txt",w);

for($i=0;$i<count($_SESSION["code"]);$i++) {

fwrite($idfile, $_SESSION["code"][$i]." ;

".$_SESSION["article"][$i]." ; ".$_SESSION["prix"][$i]."; \n");

}

fclose($idfile);

}

//LOGOUT

if($_POST["envoi"]=="LOGOUT") {

session_unset();

session_destroy();

echo "<h3>La session est terminée</h3>";

}

$_POST["envoi"]="";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<title>Gestion de panier</title>

</head>

<body>

<div>

<a href="exo12.8.php"><big>Page des livres</big></a><br />

</div>

<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded">

<fieldset>

<legend><b>Commande de disques</b></legend>

<table>

<tbody>

<tr>

<th>code : </th>

<td> <input type="text" name="code" /></td>

</tr>

<tr>

<th>article : </th>

<td><input type="text" name="article" /></td>

</tr>

<tr>

<th>prix :</th>

<td><input type="text" name="prix" /></td>

</tr>

<tr>

<td colspan="3">

<input type="submit" name="envoi" value="AJOUTER" />

<input type="submit" name="envoi" value="VERIFIER" />

<input type="submit" name="envoi" value="ENREGISTRER" />

<input type="submit" name="envoi" value="LOGOUT" />

</td>

</tr>

</tbody>

</table>

</fieldset>

</form>

</body>

</html>

Exercices du chapitre 13