Créer un formulaire de saisie des deux codes couleur préférés du visiteur du site pour la couleur de fond et le texte de la page. Les enregistrer dans deux cookies valables deux mois. À l’ouverture de la page d’accueil, récupérer ces valeurs et créer un style utilisant ces données.
<?php if(!isset($_COOKIE['fond']) AND !isset($_COOKIE['texte']) ) { $fond=$_POST['fond']; $texte=$_POST['texte']; $expir=time() + 2*30*24*3600; setcookie("fond",$fond,$expir); setcookie("texte",$texte,$expir); } else { $fond=$_COOKIE['fond']; $texte=$_COOKIE['texte']; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Couleurs du site</title> <style type="text/css" > body{background-color: ; color: ;} legend{font-weight:bold;font-family:cursive;} label{font-weight:bold;font-style:italic;} </style> </head> <body> <form method="post" action="ch12exo1.php"> <fieldset> <legend>Choisissez vos couleurs</legend> <label>Couleur de fond <input type="text" name="fond" /> </label><br /><br /> <label>Couleur de texte <input type="text" name="texte" /> </label><br /> <input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /> </fieldset> </form> </body> </html>Voir le résultat
Même question mais en stockant les deux informations dans un même cookie.
Le cookie nommé couleur est un tableau qui a deux éléments : fond et texte.
<?php if(!isset($_COOKIE['couleur']['fond']) AND !isset($_COOKIE['couleur']['texte']) ) { $fond=$_POST['fond']; $texte=$_POST['texte']; $expir=time() + 10; setcookie("couleur[fond]",$fond,$expir); setcookie("couleur[texte]",$texte,$expir); } else { $fond=$_COOKIE['couleur']['fond']; $texte=$_COOKIE['couleur']['texte']; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Couleurs du site</title> <style type="text/css" > body{background-color: ; color: ;} legend{font-weight:bold;font-family:cursive;} label{font-weight:bold;font-style:italic;} </style> </head> <body> <form method="post" action="ch12exo2.php"> <fieldset> <legend>Choisissez vos couleurs</legend> <label>Couleur de fond <input type="text" name="fond" /> </label><br /><br /> <label>Couleur de texte <input type="text" name="texte" /> </label><br /> <input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /> </fieldset> </form> </body> </html>Voir le résultat
Après avoir créé un formulaire de saisie du nom et du mot de passe du visiteur ainsi que d’une durée de validité puis avoir autorisé l’accès au site, enregistrer un cookie contenant ces informations. Lors de la connexion suivante, le formulaire devra contenir ces informations dès l’affichage de la page.
Le site comprend trois pages:
La page ch12exo3b.php qui a un contenu personnalisé en fonction du visiteur.
Son code PHP vérifie l’existence des cookies et redirige vers la page de saisie s’ils n’existent pas ou s’il y a une erreur dans le nom ou le mot de passe.
<?php if(isset($_COOKIE['nom']) AND isset($_COOKIE['pass'])) { $login="machin"; $motpass="123456"; $nom=$_COOKIE['nom']; $pass=$_COOKIE['pass']; //Vérification et création du contenu personnalisé if($nom==$login AND $pass==$motpass) { $message= "<h1>BONJOUR ".ucfirst($nom)."</h1>"; $contenu="<p> Contenu personnalisé.............</p>"; } else { echo "<script type=\"text/javascript\"> window.location='ch12exo3a.php' ;</script>"; } } else { echo "<script type=\"text/javascript\"> window.location='ch12exo3a.php' </script>"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Accès réservé au site</title> </head> <body> <?php echo $message; echo $contenu; ?> </body> </html>La page de saisie du nom et du mot de passe nommée ch12exo3a.php.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Accès réservé au site</title> </head> <body> <form method="post" action="ch12exo3.php"> <fieldset> <legend>Saisissez votre nom et mot de passe</legend> <label>Nom : <input type="text" name="nom" /> </label><br /><br /> <label>Pass : <input type="text" name="pass" /> </label><br /> <input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /> </fieldset> </form> </body> </html>La page ch12exo3.php qui traite les données du formulaire de saisie et redirige vers la page à accès réservé ou la page de saisie selon le cas.
<?php //Nom et pass associé autorisant l'accès au site //En pratique ils proviennent d'une base de données $login="machin"; $motpass="123456"; //Récupération des valeurs saisies $nom=$_POST['nom']; $pass=$_POST['pass']; //Vérification if($nom==$login AND $pass===$motpass) { $expir=time() + 200; //Ecriture des cookies setcookie("nom",$nom,$expir); setcookie("pass",$pass,$expir); //Redirection vers la page à accès réservé echo "<script type=\"text/javascript\"> window.location='ch12exo3b.php' </script>"; } else { //Redirection vers la page de saisie du code echo "<script type=\"text/javascript\"> window.location='ch12exo3a.php' </script>"; } ?>Voir le résultat
Enregistrer le nom de la page du site préférée du visiteur dans un cookie. Lors de sa connexion, il devra être redirigé automatiquement vers cette page.
<?php //Détection du cookie et redirection éventuelle vers la page préférée if(isset($_COOKIE['mapage'])) { $page=$_COOKIE['mapage']; header("Location:$page"); } // if(isset($_POST['mapage'])) { $page=$_POST['mapage']; setcookie("mapage",$_POST['mapage'],time()+10); header("Location:$page"); echo "Vous avez choisi ",$_POST['mapage'],"Il faut créer les pages ch12exo4a.html et ch12exo4b.html correspondant aux choix "Cinéma" et "Voyages" sur le modèle suivant:
"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Choisissez votre page préférée</title> </head> <body> <form method="post" action="ch12exo4.php"> <fieldset> <legend>Choisissez votre page préférée</legend> <select name="mapage"> <option value="ch12exo4.php">Accueil</option> <option value="ch12exo4a.html">Cinéma</option> <option value="ch12exo4b.html">Voyages </select> <br /> <input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /> </fieldset> </form> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Votre page préférée </head> <body> <h3>La Page Cinéma</h3> </body> </html>Voir le résultat
Envoyer un ensemble d’e-mails ayant tous le même objet et le même contenu à partir d’une liste d’adresses contenue dans un tableau.
<?php $tabadresse=array("coco@asaumur.com","jan@asaumur.com","enge@asaumur.com"); $objet="Message"; $message="Bonjour de jean"; foreach($tabadresse as $dest) { if(mail($dest,$objet,$message)) { echo "Mail envoyé à $dest <br />"; } } ?>Voir le résultat
Même question, mais cette fois chaque objet et chaque contenu des e-mails doit être différent et extrait d’un tableau multidimensionnel.
<?php $tabmailA=array("coco@funhtml.com","PHP 5.3","Du nouveau dans le langage du Web"); $tabmailB=array("jan@funhtml.com","MySQL 5","La base de données évolue"); $tabmailC=array("truc@funphp.com","AN 2010","Bonne année "); $tabmail=array($tabmailA,$tabmailB,$tabmailC); foreach($tabmail as $tab) { if(mail($tab[0],$tab[1],$tab[2])) { echo "Mail envoyé à $tab[0] <br />"; } } ?>Voir le résultat
Reprendre l’exercice 1 en enregistrant les préférences du visiteur dans des variables de session pour afficher toutes les pages du site avec ses couleurs préférées.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Couleurs du site avec des sessions</title> <style type="text/css" > body{background-color: orange ; color: purple ;} legend{font-weight:bold;font-family:cursive;} label{font-weight:bold;font-style:italic;} </style> </head> <body> <div> <form method="post" action="ch12exo7.php"> <fieldset> <legend>Choisissez vos couleurs</legend> <label>Couleur de fond <input type="text" name="fond" /> </label><br /><br /> <label>Couleur de texte <input type="text" name="texte" /> </label><br /> <div> <input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /> </div> </fieldset> </form> <p>Contenu de la page <a href="ch12exo7b.php">Lien vers la page B </p> </div> </body> </html>Un exemple de page du site cible d’un lien de la page principale (fichier ch12exo7b.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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Couleurs du site avec des sessions</title> <style type="text/css" > body{background-color: ; color: ;} legend{font-weight:bold;font-family:cursive;} label{font-weight:bold;font-style:italic;} </style> </head> <body> <p>Contenu de la page B <a href="ch12exo7.php">Lien vers la page principale</a> </p> </body> </html>Voir le résultat
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 ch12exo8.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(); //AJOUTER if($_POST["envoi"]=="AJOUTER" && $_POST["code"]!="" && $_POST["article"]!="" && $_POST["prix"]!="") { //Session des codes $code=$_SESSION["code"]."//".$_POST["code"]; $_SESSION["code"]=$code; //Session des articles $article=$_SESSION["article"]."//".$_POST["article"]; $_SESSION["article"]=$article; //Session des prix $prix=$_SESSION["prix"]."//".$_POST["prix"]; $_SESSION["prix"]=$prix; } //VERIFIER if($_POST["envoi"]=="VERIFIER") { echo "<table border=\"1\" >"; echo "<tr><td colspan=\"3\"><b>Récapitulatif de votre commande</b></td>"; echo "<tr><th> code </th><th> article </ th><th> prix </th>"; for($i=0;$iLa deuxième page dédiée à l’achat de disques (fichier ch12exo8b.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.<td>{$tabcode[$i]}</td> <td>{$tabarticle[$i]} </td><td>{$tabprix[$i]}</td>"; $prixtotal+=$tabprix[$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, $PHPSESSID; for($i=0;$i La session est terminée"; } $_POST["envoi"]=""; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Gestion de panier </head> <body> <div> <a href="ch12exo8b.php"><big>Page des disques</big></a><br />//1 </div> <form action="" 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>
<?php session_start(); //AJOUTER if($_POST["envoi"]=="AJOUTER" && $_POST["code"]!="" && $_POST["article"]!="" && $_POST["prix"]!="") { //Session des codes $code=$_SESSION["code"]."//".$_POST["code"]; $_SESSION["code"]=$code; //Session des articles $article=$_SESSION["article"]."//".$_POST["article"]; $_SESSION["article"]=$article; //Session des prix $prix=$_SESSION["prix"]."//".$_POST["prix"]; $_SESSION["prix"]=$prix; } //VERIFIER if($_POST["envoi"]=="VERIFIER") { echo "<table border=\"1\" >"; echo "<tr><td colspan=\"3\"><b>Récapitulatif de votre commande</b></td>"; echo "<tr><th> code </th><th> article </ th><th> prix </th>"; for($i=0;$i<td>{$tabcode[$i]}</td> <td>{$tabarticle[$i]} </td><td>{$tabprix[$i]}</td>"; $prixtotal+=$tabprix[$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 La session est terminée</h3>"; } $_POST["envoi"]=""; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Gestion de panier </head> <body> <div> <a href="ch12exo8.php"><big>Page des livres</big></a><br />//1 </div> <form action="" 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>
Voir le résultat