*** lundi, 20 avril 2026 --> semaine 12 !!! ***
Semaine 11 - upload+LibGD+Gestion de panier virtuel
Télécharger : upload.zip
Quelques rappels …
sudo apache2ctl -k start
sudo apache2ctl -k stop
sudo apache2ctl -k restart
Au démarrage de linux
Ajouter "apache2ctl -k start" à etc/rc.d/rc.local
- Inclure le contenu d'un fichier dans une page html
|
|
Donner les droits d'accès aux fichiers!
Truc
Utiliser ' dans les " --> echo "<img src='toto.jpg'>";
Pour les caractères spéciaux ou reconnue…. Utiliser le backslash " /" "
Passer les variables comme dans un Post:
PHP
$var = case "salut";
return;
@ devant un ligne d'erreur
Utilisation d'un champ caché de formulaire (HIDDEN)
Pour le savoir, nous allons ajouter un espion, à savoir un champ invisible (HIDDEN), qui va être envoyé en même temps que le nom et le prénom quand l'utilisateur aura cliqué sur le bouton, et il suffit de contrôler si cet espion contient bien une valeur pour se permettre d'engueuler l'utilisateur à bon escient !
Voici le champ de formulaire que vous allons utiliser :
<input type="hidden" name="Espion" value="JaiToutVu">
La première fois que nous entrons dans le formulaire de saisie, ce champ est évidemment vide, mais dès qu'on clique sur SUBMIT pour recharger la même page, cet espion vaut JaiToutVu.
<input type='radio' name='affichage' value=1>choix1<br>
<input type='radio' name='affichage' value=2>choix2<br>
<input type='radio' name='affichage' value=3 checkedchoix3
php
$radio1 = $_REQUEST["affichage"];
<select name="liste">
<option>Choix 1</option>
<option>Choix 2</option>
<option>Choix 3</option>
</select><br>
php
$radio1 = $_REQUEST["liste"];
<input type="checkbox" name="options[]" value="Injection">Injection<br>
<input type="checkbox" name="options[]" value="Trois">Trois<br>
php
$options = $_REQUEST ['options'];
Utiliser count ???
<select name="var[]" multiple="yes">
<option value="Val1"> Valeur1</option>
<option value="Val2"> Valeur2</option>
<option value="Val3"> Valeur3</option>
</select>
php
$options = $_REQUEST ['var'];
Utiliser count ???
Transfert d'un fichier sur le serveur
<HTML>
<HEAD>
<TITLE>Fichier de test Upload</TITLE>
</HEAD>
<BODY>
Fichier de test Upload
<form method="post" action="upload.php" enctype="multipart/form-data">
<p>Exemple : Quelle fichier voulez-vous me transmettre ?</p>
<p>Votre fichier :<br>
<input type="hidden" name="MAX_FILE_SIZE" value="0">
<input type="file" name="fichier"><br><br>
</p>
<input type="submit" name="Submit" value="R-Envoyer le fichier">
</form>
</BODY>
</HTML>
PHP
<?php
function code()
{
echo "<br> 0= réussi, 1= taille du fichier trop grande selon php.ini";
echo "<br> 2= taille du fichier trop grande selon formulaire, 3= partiellement transmis, 4= fichier non transmis";
}
//chemin pour l'enregistrement du fichier
// E:/Mes Document/2F7/upload/
$dir = "/var/mers/upload/"; // /var/mers/php/chap23/Sources/photos/
//si le fichier existe
if (isset($_FILES["fichier"])){
echo "Upload du fichier ". $_FILES["fichier"]["name"] . " en cours...<P>";
}
//copie du fichier du dossier temporaire au bon endroit
if ( @copy($_FILES["fichier"]["tmp_name"],$dir.$_FILES["fichier"]["name"])){
echo "Transmission réussis!!!<BR>dans le dossier ".$dir." <P>";
echo "Code d'erreur=".$_FILES["fichier"]["error"];
code();
}
else {
echo "Transmission non-réussis !@%*&**¾*$!<P>";
echo "Code d'erreur=".$_FILES["fichier"]["error"];
code();
}
?>
<HTML>
<HEAD>
<TITLE>Fichier de test</TITLE>
</HEAD>
<BODY>
<CENTER>
<A HREF="upload.html">Page upload.html</A>
</CENTER>
</BODY>
</HTML>
Télécharger : gd.zip
Les fonctions et la librairie GD
apt-get install php7.?-gd
dans php.ini, vérifier la présence de la ligne suivante: extension = gd.so ou gd2.so selon la version !!!
function miniature( $imgSrc, $nomImage){
. . .
return $nomImage;
}
. . .
$toto = miniature( $imgSrc[$i], $nomImage);
<?php
/************************************************************/
/* La fonction miniature crée à la volée l'image miniature */
/************************************************************/
function miniature( $imgSrc, $nomImage){
// Largeur et hauteur des images miniatures
$largeur = 200; $hauteur=150;
// quelle taille fait notre image ?
$largeurSrc = imagesx($imgSrc);
$hauteurSrc = imagesy($imgSrc);
// Création de l'image miniature en essayant de respecter le format portrait ou paysage
if($hauteurSrc > $largeurSrc){
$l = $hauteur; $h = $largeur;
$lSrc = $hauteurSrc; $hSrc = $largeurSrc;
} else{
$l = $largeur; $h = $hauteur;
$lSrc = $largeurSrc; $hSrc = $hauteurSrc;
}
$mini = @ImageCreateTrueColor ($l, $h);
// Création de quelques couleurs pour le cadre de la miniature
$blanc = ImageColorAllocate ($mini, 255, 255, 255);
$gris[0] = ImageColorAllocate ($mini, 90, 90, 90);
$gris[1] = ImageColorAllocate ($mini, 110, 110, 110);
$gris[2] = ImageColorAllocate ($mini, 130, 130, 130);
$gris[3] = ImageColorAllocate ($mini, 150, 150, 150);
$gris[4] = ImageColorAllocate ($mini, 170, 170, 170);
$gris[5] = ImageColorAllocate ($mini, 190, 190, 190);
$gris[6] = ImageColorAllocate ($mini, 210, 210, 210);
$gris[7] = ImageColorAllocate ($mini, 230, 230, 230);
// Dessin du cadre de la miniature
for ($i=0; $i<=7; $i++) {
ImageFilledRectangle ($mini, $i, $i, $l-$i, $h-$i, $gris[$i]);
}
// On ressample l'image initiale pour en créer une copie en miniature
ImageCopyResampled($mini, $imgSrc, 8, 8, 0, 0, $l-(2*8), $h-(2*8), $lSrc, $hSrc);
// On écrit en blanc en bas à gauche le nom et la taille de l'image d'origine
ImageString($mini, 0, 12, $h-18, "$nomImage - ($lSrc x $hSrc)", $blanc);
// On enregistre l'image dans le répertoire des miniatures
imageJpeg ( $mini,"mini/$nomImage.jpg");
return $nomImage;
}
?><html>
<head>
<title>Album photo</title>
</head>
<body>
<center>
<h1>Album photos de Mers</h1>
<?php
/********************************************/
/* Définition des constantes pour le script */
/********************************************/
// Répertoire dans lequel sont situées les différentes photos
$imageDir = "photos";
$i=0;
$c=1;
/*************************************/
/* Affichage des images dans la page */
/*************************************/
echo "<table border=0>";
$dossier = opendir("$imageDir");
while($image = readdir($dossier)){
$i=$i+1;
$info = pathinfo($image);
$extension = strtolower ( $info["extension"]);
$nomImage = substr($image,0,strrpos($image,"."));
switch($extension){
case "jpg":
$imgSrc[$i] = imagecreatefromjpeg("$imageDir/$image");
break;
case "png":
$imgSrc = imagecreatefrompng("$imageDir/$image");
break;
case "gif":
$imgSrc = imagecreatefromgif("$imageDir/$image");
break;
default:
unset($imgSrc);
break;
}
if(isset($imgSrc[$i])){ // Sinon il ne s'agit pas d'un type d'image supporté par notre application
if ($c>3){
$c = 1;
echo "<tr>";
}
echo "<td>";
$c++;
// Affichage de l'image miniature dans la page (X)Html
printf ("<a href="%s/%s" target="Photos"><img src="./mini/%s.%s" alt="Miniature générée dynamiquement" /></a>", $imageDir,$image, miniature( $imgSrc[$i], $nomImage),$extension);
echo "</td>";
}
}
?>
</table>
</center>
</body>
</html>
DEMO : https://php.dinf.ca/cours/chap23/Sources/c23-01a.php
Télécharger : Panier Virtuel.zip
Panier virtuel
Le panier virtuel ou « caddy », est le dispositif d'un site de commerce électronique dans lequel se retrouvent tous les articles sélectionnés durant la visite du site. Il reprend les détails de ces articles et calcule les taxes et totaux de commandes. Il se transforme en commande au moment de sa validation.
3 types de Panier:
1. En local, sur le FRONTEND avec javaScript et ses dérivées. Panier temporaire. (Rappel, cours de session 1 = Interfaces web)
2. Sur le serveur BACKEND avec les variables SESSION. Panier temporaire.
3. Sur le serveur BACKEND avec les tables d'une base de données. Permanent si désiré!
NOTE: Plusieurs disponible sur internet (gratuit et payant)
Exemple très, très, très simple avec les sessions:
Avec un serveur BACKEND apache, PHP et MySql.
liste.php (liste des articles disponible pour l'achat)
liste.php
<HTML>
<HEAD>
<TITLE>Fichier de test Liste des Voitures Sport</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<CENTER>
<?php
/**
* Renvoie la liste des voitures dans $con
*/
require 'connecter_angular.php';
/* affichage sélection */
/*avec mysqli */
$query2 = "SELECT * FROM voiture_sport ORDER BY id;";
$result2 = $con->query($query2);
echo "Contenue de la table Voiture_sport!!!<P>";
/* Utilisez une boucle pour afficher dans un tableau */
echo "<TABLE border=1>";
echo "<TR>"."<TD>"."id"."<TD>"."Voiture"."<TD>"."Disponible ou Non"."</TR>";
while ($val = $result2->fetch_assoc()){
$bouton = "<a href='panier.php?action=ajouter&id=".$val["id"]."&nom=".$val["nom"]."&disponible="
.$val["statut"]."' onclick='window.open(this.href, '', 'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, width=600, height=350'); return false;'>Ajouter au panier</a>";
echo "<TR>"."<TD>".$val["id"]."<TD>".$val["nom"]."<TD>"
.$val["statut"]."<TD>".$bouton."</TR>";
//echo "<TR>"."<TD>".$val["id"]."<TD>".utf8_encode($val["nom"])."<TD>"
//.utf8_encode($val["statut"])."</TR>";
}
echo "</TABLE>";
/* déconnection avec MySQLi */
$result2->free();
$con->close();
// break;
// default:
// echo "Ne fonctionne pas!!!";
//<textarea name="description" ROWS=1 COLS=60></textarea>
?>
<P><A HREF="panier.php">Voir le Panier !!!</A><P>
</CENTER>
</BODY>
</HTML>
panier.php (panier)
<?php
session_start();
include_once("fonctions-panier.php");
@$action = $_REQUEST['action'];
@$id = $_REQUEST['id'];
@$nom = $_REQUEST['nom'];
@$disponible = $_REQUEST['disponible'];
switch($action){
Case "ajouter":
ajouterArticle($id,$nom,$disponible);
break;
Case "suppression":
supprimerArticle($id);
break;
Case "refresh" :
for ($i = 0 ; $i < count($_SESSION['panier']['id']) ; $i++)
{
//modifierQTeArticle($_SESSION['panier']['id'][$i],round($QteArticle[$i]));
}
break;
Default:
break;
}
echo '<?xml version="1.0" encoding="utf-8"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Votre panier</title>
</head>
<body>
<form method="post" action="panier.php">
<table style="width: 600px">
<tr>
<td colspan="4">Votre panier</td>
</tr>
<tr>
<td>id</td>
<td>nom</td>
<td>disponible?</td>
<td>Action</td>
</tr>
<?php
if (creationPanier())
{
$nbArticles=count($_SESSION['panier']['id']);
if ($nbArticles <= 0)
echo "<tr><td>Votre panier est vide </ td></tr>";
else
{
for ($i=0 ;$i < $nbArticles ; $i++)
{
echo "<tr>";
echo "<td>".htmlspecialchars($_SESSION['panier']['id'][$i])."</ td>";
//echo "<td><input type="text" size="4" name="q[]" value="".htmlspecialchars($_SESSION['panier']['nom'][$i]).""/></td>";
echo "<td>".htmlspecialchars($_SESSION['panier']['nom'][$i])."</td>";
echo "<td>".htmlspecialchars($_SESSION['panier']['disponible'][$i])."</td>";
echo "<td><a href="".htmlspecialchars("panier.php?action=suppression&id=".rawurlencode($_SESSION['panier']['id'][$i]))."">Supprimer</a></td>";
echo "</tr>";
}
echo "<tr><td colspan="2"> </td>";
echo "<td colspan="2">";
echo "Total : ".MontantGlobal()." $";
echo "</td></tr>";
echo "<tr><td colspan="4">";
echo "<input type="submit" value="Rafraichir"/>";
echo "<input type="hidden" name="action" value="refresh"/>";
echo "</td></tr>";
}
}
?>
</table>
</form>
<P><A HREF="liste.php">Retour aux achats !!!</A><P>
</body>
</html>
fonctions-panier.php (contient les fonctions…)
<?php
/**
* Verifie si le panier existe, le crée sinon
* @return booleen
*/
function creationPanier(){
if (!isset($_SESSION['panier'])){
$_SESSION['panier']=array();
$_SESSION['panier']['id'] = array();
$_SESSION['panier']['nom'] = array();
$_SESSION['panier']['disponible'] = array();
$_SESSION['panier']['verrou'] = false;
}
return true;
}
/**
* Ajoute un article dans le panier
* @param string $id
* @param string $nom
* @param string $disponible
* @param float $prixProduit
* @return void
*/
function ajouterArticle($id,$nom,$disponible){
//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Si le produit existe déjà on ajoute seulement la quantité
$positionProduit = array_search($id, $_SESSION['panier']['id']);
if ($positionProduit !== false)
{
}
else
{
//Sinon on ajoute le produit
array_push( $_SESSION['panier']['id'],$id);
array_push( $_SESSION['panier']['nom'],$nom);
array_push( $_SESSION['panier']['disponible'],$disponible);
}
}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
/**
* Supprime un article du panier
* @param $id
* @return unknown_type
*/
function supprimerArticle($id){
//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Nous allons passer par un panier temporaire
$tmp=array();
$tmp['id'] = array();
$tmp['nom'] = array();
$tmp['disponible'] = array();
$tmp['verrou'] = $_SESSION['panier']['verrou'];
for($i = 0; $i < count($_SESSION['panier']['id']); $i++)
{
if ($_SESSION['panier']['id'][$i] !== $id)
{
array_push( $tmp['id'],$_SESSION['panier']['id'][$i]);
array_push( $tmp['nom'],$_SESSION['panier']['nom'][$i]);
array_push( $tmp['disponible'],$_SESSION['panier']['disponible'][$i]);
}
}
//On remplace le panier en session par notre panier temporaire à jour
$_SESSION['panier'] = $tmp;
//On efface notre panier temporaire
unset($tmp);
}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
/**
* Montant total du panier
* @return int
*/
function MontantGlobal(){
$total=0;
for($i = 0; $i < count($_SESSION['panier']['id']); $i++)
{
$total += $_SESSION['panier']['id'][$i];
}
return $total;
}
/**
* Fonction de suppression du panier
* @return void
*/
function supprimePanier(){
unset($_SESSION['panier']);
}
/**
* Permet de savoir si le panier est verrouillé
* @return booleen
*/
function isVerrouille(){
if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
return true;
else
return false;
}
/**
* Compte le nombre d'articles différents dans le panier
* @return int
*/
function compterArticles()
{
if (isset($_SESSION['panier']))
return count($_SESSION['panier']['id']);
else
return 0;
}
?>
DEMO : https://php.dinf.ca/projet/h2026/Mers2/browser/panier/liste.php
Voici mes coordonnees: Stéphane Mercier (Mers), stephane.mercier@cegeplevis.ca, 418 833-5110, poste 5511, Local G205A (disponnible par MIO)
Tout droit réservé à personne !!!
.