Tài liệu MySQL et CSS- P6 - Pdf 87

Tab. 7.8 : Les modes d’ouverture de fichier
Mode Description
A Écriture seule, ajoute au contenu existant en plaçant le
pointeur en fin de fichier.
A+ Lecture et écriture, ajoute au contenu en plaçant le pointeur en
fin de fichier.
Tab. 7.9 : Informations sur le statut du fichier ou du répertoire
Fonction Description
int chmod (string fichier, int mode) Les permissions sont changées sur
des répertoires ou des fichiers.
int file_exists (string fichier) Vrai si le fichier existe.
int fileatime (string fichier) Date du dernier accès au fichier.
int filectime (string fichier) Date de modification du nœud.
int filemtime (string fichier) Date de modification du fichier.
int fileperms (string fichier) Droits du fichier.
int filesize (string fichier) Taille du fichier.
int filetype (string fichier) Type du fichier.
Bool is_dir (string fichier) Vrai si c’est un répertoire.
Bool is_executable (string fichier) Vrai si le fichier est exécutable.
Bool is_file (string fichier) Vrai si c’est un fichier.
Bool is_readable (string fichier) Vrai s’il est lisible.
Bool is_writeable (string fichier) Vrai s’il est modifiable.
Bool is_linkinfo (string fichier) Vrai si le fichier pointé existe.
String readlink (string chemin) Nom du fichier pointé.
array stat (string fichier) Information sur le statut.
int touch (string fichier [, int time]) Met à jour l’heure de modification.
int umask (int masque) Définit un masque de permission
par défaut (l’opposé de chmod).
Sondages et concours
Double Poche PHP & MySQL • 251
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.

Voici les réglages courants.
7
Des algorithmes, des outils et des fonctions
252 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Les fichiers :
¶ scripts, 755 ;
¶ fichiers de données, 666 ;
¶ fichiers de configuration, 644 (pour les fichiers non modifiés par des
programmes PHP).
Les répertoires :
¶ 777 (n’oubliez pas de mettre les permissions adéquates sur les fichiers
à l’intérieur).
Tab. 7.11 : Arborescence
Fonction Description
bool chdir (string répertoire) Change le pointeur de répertoire
courant.
Void closedir (string descripteur) Ferme le descripteur de répertoire.
int opendir (string chemin) Ouvre un répertoire.
String readdir (int descripteur) Retourne le nom du fichier suivant
associé au descripteur de
répertoire.
Void rewinddir (int descripteur) Place le pointeur au début du
répertoire.
int rmdir (string répertoire) Supprime un répertoire (vide).
Formater avec sprintf(), sscanf(), fscanf()
Tab. 7.12 : Le formatage des données
Signe Source Affichage
% Pourcentage Pourcentage littéral.
b Entier Binaire.

¶ fois pour le nombre de chargements de la page ;
¶ date sous forme AAAAMMJJ ;
¶ page pour insérer le nom de la page et placer ainsi toutes les pages sur
la même table.
7
Des algorithmes, des outils et des fonctions
254 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Créons la table :
CREATE TABLE compteur ( clef int(11) NOT NULL auto_increment,
fois int(11) NOT NULL default ’0’, an char(2) NOT NULL default ’0’,
mois char(2) NOT NULL default ’0’, jour char(2) NOT NULL default ’0’,
repertoire varchar(255) NOT NULL default ’’,page varchar(60)
NOT NULL default ’’, PRIMARY KEY (clef), KEY clef (clef))
Le principe est simple. Si la date est différente de la dernière date, on crée
une nouvelle ligne dans la table ; autrement, on se contente de faire une
mise à jour du champ fois qu’on incrémente.
La page est identifiée par la variable globale, $SCRIPT_FILENAME, qui
donne le nom du fichier et du répertoire depuis la racine du site (au-dessus
du répertoire www ou htdocs):
Listing 7.13 : Les statistiques stats.inc.php
<?
$table=’compteurs’;
$chemin=ereg_replace(’/le chemin vers/www’,’’,$SCRIPT_FILENAME);
$repertoire=dirname($chemin);
$page=basename($chemin);
$sql= "select * from $table where page=’$page’
AND repertoire=’$repertoire’ ORDER BY clef DESC LIMIT 1";
//vérifions la dernière date entrée dans la table pour cette page
$resultat=@mysql_query($sql,$id_link);

pour , c’est-à-dire "/". Pour éviter ce pro-
blème, il vaut mieux utiliser $SCRIPT_FILENAME et en enlever le chemin
au-dessus du répertoire web.
Tab. 7.13 : Découpage du chemin d’un fichier
Fonction Description
String basename (string chemin) Extrait le nom du fichier d’un chemin.
String dirname (string chemin) Retourne le chemin sans le nom de fichier.
La page d’affichage des statistiques de page
Si vous avez bien conçu votre site, vous avez groupé vos applications par
répertoire. Il devient alors intéressant de disposer de statistiques par
répertoire en plus des statistiques par fichier. Quant aux statistiques
quotidiennes et mensuelles, sans doute disposez-vous de chiffres fournis
par votre hébergeur. Les vôtres les compléteront et les affineront. Par
ailleurs, vous avez un certain nombre de fichiers chargés à chaque page.
Ce n’est pas la peine d’inclure ces derniers dans vos statistiques.
Pour la page, nous utiliserons des fonctions de manipulations de fichiers
et de répertoires.
La page comprend la liste des répertoires avec leurs statistiques par mois
classées par ordre décroissant. Pour chaque répertoire affiché, un menu
permet de choisir un fichier dont les statistiques s’ouvriront dans une
nouvelle fenêtre.
7
Des algorithmes, des outils et des fonctions
256 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Listing 7.14 : Affichage des statistiques : affichage_stats.php
<?
$extensions=array (’htm’, ’html’, ’php’, ’php3’);
echo ’<TABLE width="95%">’;
$sql="select SUM(fois) as somme, repertoire, an, mois from compteurs

echo "<input type=\"submit\" value=\"voir\">\n";
echo "</form>";
echo "</TD><TD>";
if ($an!=$dernier_an){
echo $an;
$dernier_an=$an;
}
echo "</TD><TD>";
echo $mois;
echo "</TD><TD>$somme</TD></TR>";
}
echo"<
/TABLE>";
?>
Compteurs et statistiques
Double Poche PHP & MySQL • 257
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Par le formulaire et son menu déroulant, nous envoyons le chemin du
fichier dont nous désirons afficher les statistiques. C’est le même fichier.
Dans le tableau HTML, il vous suffit d’enlever la colonne du formulaire
et d’ajouter une colonne pour afficher le jour.
N’oubliez pas d’ajouter les deux lignes suivantes :
$repertoire=dirname($fichier);
$page=basename($fichier);
Ensuite, la requête SQL est :
$sql="select SUM(fois) as somme, fichier, an, mois, jour from
compteurs GROUP BY fichier, an, mois, jour ORDER BY an,
mois, jour somme DESC";
7.6
Le chariot électronique

mencer, visitez plusieurs sites sur le même thème.
La promotion
La valeur promotion peut être constituée de la date de début, de la date de
fin, de la quantité et du prix sous la forme 2002090220020917330. Dans
l’exemple, la promotion commence le 2 septembre 2002 (8 premiers
chiffres 2002 09 02) et finit le 17 septembre 2002 (du 9
e
au 17
e
chiffre) ;
enfin, l’offre consiste en trois bouteilles (18
e
chiffre) pour 30 Q,ou30$(19
e
et 20
e
chiffres). Voilà des astuces qui économisent de la place dans la base.
Vous créez une fonction qui décode la référence et la promotion. Ce livre
n’étant pas spécialisé dans le commerce des vins, nous n’entrerons pas
dans le détail des références de vins. Si vous voulez approfondir, visitez
l’excellent site www.vitis.org. Étudions de plus près la fonction
promotion() :
Listing 7.15 : Transformation du chiffre de la colonne promotion :
fonction_promotion.php
$mois_franc=array(’’, ’janvier’, ’février’, ’mars’, ’avril’, ’mai’,
’juin’, ’juillet’, ’août’, ’septembre’, ’octobre’, ’novembre’,
’décembre’);
echo promotion("2002091020020929330")
function promotion($chiffre){
$debut=substr($chiffre,0,8);

number_format()
Cette fonction sert à formater un nombre pour le conformer aux usages
locaux.
Syntaxe :
string number_format ( float nombre [, int decimals [,
string point_dec [, string sep_milliers]]])
Pour formater un nombre en français, le code serait :
$prix_total=number_format ($prix_total, ’2’, ’,’, ’ ’);
Dans cet exemple, nous afficherons un nombre qui comprend deux
décimales après une virgule et utilise une espace pour séparer les milliers.
Le nombre formaté
Le nombre formaté a changé de nature. Il est non plus un
nombre à virgule flottante mais une chaîne de caractères. Cela
signifie que, si vous le traitez avec un opérateur arithmétique, il devient
un entier et perd ses décimales.
7
Des algorithmes, des outils et des fonctions
260 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Les tables à créer
Dans la table transport, vous avez deux champs, port et prix. Le chiffre
inscrit dans la colonne prix correspondra à la limite supérieure de
l’intervalle de prix pour un port donné. La table clients dépendra des
champs du formulaire. Inspirez-vous de celui que nous avons vu au
chapitre MySQL en action. La table commandes est un duplicata de la
table produits à laquelle vous ajoutez une colonne pour insérer la clé de
la table clients. Enfin, la table paiements contiendra la clef du client, la
somme totale, la date et l’heure ainsi que le mode de paiement. Vous
pouvez ajouter une table modes_paiement si vous le désirez, avec un code
et un nom pour chaque mode.

session_register("chariot");
include "../commun/connexion.inc.php";
include "../commun/fonctions.inc.php";
include "../commun/stats.inc.php";
Vous affichez ensuite le contenu du chariot.
L’action "voir le contenu du chariot"
L’action "voir le contenu du chariot" consiste à afficher le contenu de la
table produits en regard des numéros de clés, accompagné de la quantité
et du prix. Pour voir le contenu, faites sur le tableau une boucle foreach
dans laquelle vous envoyez une requête SQL. Sorti de la boucle,
multipliez la quantité par le prix à l’unité pour obtenir le prix correspon-
dant à chaque article :
<TABLE width="95%">
<TR><TD>….</TD><TD>unité</TD><TD>qté</TD><TD>total article</TD></TR>
<?
if ($action ==’voir’){
foreach ($chariot as $cle=>$val){
echo "$cle=>$val<br>";
$sql="select * from produits where clef=’$cle’";
$resultat=@mysql_query($sql,$id_link);
$rang=mysql_fetch_array($resultat);
//PRENONS PRIX PAR EXEMPLE//////
$prix_unit=$rang[’prix’];
$prix_total_article=$prix.*$val;
$sous_total_prix+=$prix_total_article;
//NOUS CALCULONS LE SOUS-TOTAL////
7
Des algorithmes, des outils et des fonctions
262 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.

$prix_total=number_format ($prix_total, ’2’, ’,’, ’ ’);
echo "<TR><TD>….</TD><TD></TD><TD>port</TD><TD>$port </TD></TR>\n";
echo "<TR><TD>….</TD><TD></TD><TD>Total</TD>
<TD>$prix_total </TD></TR>\n";
}
Vous aurez remarqué que $sous_total_prix n’est pas encadré de
guillemets simples car il s’agit d’une quantité.
L’action "commander les articles"
Pour créer la commande, il vous reste à définir un formulaire avec
des champs cachés dont les valeurs sont fournies par les variables de
chaque article. Le bouton commande envoie les données dans la table
commandes et ouvre le formulaire d’enregistrement du client. Dans ce
Le chariot électronique
Double Poche PHP & MySQL • 263
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
formulaire, nous conservons la clé de la table commandes avec la fonction
mysql_insert_id(), puis l’insérons dans un champ caché pour avoir la
possibilité d’ajouter la clé de la table clients, une fois les coordonnées de
l’internaute enregistrées. Pour ajouter ce numéro dans la table comman-
des, insérez ces lignes juste après la commande SQL pour la table clients :
$sql="insert into commandes (les différents champs)
VALUES (les différentes valeurs)";
@mysql_query($sql,$id_link);
$clef_commande=mysql_insert_id();
puis dans le formulaire :
<input type="hidden" name="clef_commande" value="$clef_commande">
Une fois les coordonnées du client insérées dans la table clients, ajoutez
dans la table commandes :
$clef_client=mysql_insert_id();
$sql="update commandes set $clef_client=’$clef_client’

Plus grande valeur de la liste.
mixed min (mixed nombre1, mixed
nombre2…)
Plus petite valeur de la liste.
float round (float nombre [, int
precision])
Arrondi. La précision optionnelle
donne le nombre de décimales
après la virgule.
7.7
Un magazine
Le magazine utilise des templates, qui sont des modèles, des gabarits ou
des moules dans lesquels nous coulons du texte. Nous employons
plusieurs techniques pour cela. Le modèle est défini sur un logiciel de
création de pages web. Nous utilisons du faux texte, extrait de n’importe
quel texte numérique. Les professionnels utilisent des textes en latin. Une
fois le modèle achevé, nous remplaçons les différents textes par des
balises. Puis le programme créera les fichiers fils à partir du modèle, les
fichiers qui, eux, seront véritablement affichés.
Le processus de création d’un numéro se fait à partir d’un formulaire qui
envoie du texte dans une table. Les colonnes ont le même nom que les
balises (numéro, rubrique, page, titre, accroche, chapô, article…). Une
fois le texte entré dans la base, le programme récupère le texte du modèle
et remplace, dans le fichier, les balises par le contenu des champs de même
nom avec une expression rationnelle. Enfin, il crée un fichier dans lequel
il coule le texte contenu.
Un magazine
Double Poche PHP & MySQL • 265
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Si vous voulez modifier l’article, il vous suffit ensuite de changer les

chèque.
7
Des algorithmes, des outils et des fonctions
266 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Un formulaire permet d’entrer les articles dans la table. Une date de
parution est décidée. Elle sera ajustée avec un formulaire capable de
modifier la date de parution de ce numéro. Dans le répertoire d’adminis-
tration, le magazine à paraître sera visible pour constater le travail effectué
et ce qui reste à modifier. Plusieurs magazines seront en chantier avant la
date de parution, jusqu’à ce qu’ils soient achevés.
Les images possèdent un nom qui comprend la place dans la page, le
numéro de page et le numéro du magazine. La page peut être divisée en
neuf et codée (hg pour haut gauche, md pour milieu droit, mm pour milieu
milieu, c’est-à-dire centre…). La première image située dans le milieu
gauche de la page 2 du numéro 4 s’appellera 012mg4, la deuxième image
située dans le haut gauche, 022hg4, etc.
Une fois la date arrivée, le numéro sera visible aux abonnés et un courriel,
envoyé automatiquement pour l’annoncer. Une application pour envoyer
les courriels sera créée. Cette application enverra un courriel trois mois,
puis un mois avant l’échéance de l’abonnement, pour demander à
l’abonné s’il veut prolonger son abonnement. Quelques jours avant la
parution du nouveau numéro, il recevra un sommaire du numéro à
paraître. S’il ne se réabonne pas, il recevra un questionnaire pour
connaître les raisons de son désabonnement. Dans cette application, la
plus grosse partie de votre temps sera consacrée à la réflexion et à l’étude
du projet. La partie la plus lourde du code utilisé est déjà contenue dans
ce livre. Nous allons diriger le projecteur sur des aspects particuliers de
l’application, comme étudier le procédé pour télécharger les images sur le
serveur par un formulaire.

balise form , MAX_FILE_SIZE en champ caché et <input
type=file name="userfile">, qui est un champ de chargement de
fichiers qui affichera automatiquement un bouton parcourir pour que
l’internaute puisse aller chercher le fichier sur son disque dur.
m
Figure 7.8 : Formulaire de téléchargement
7
Des algorithmes, des outils et des fonctions
268 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Listing 7.16 : le formulaire de téléchargement de l’image
images_mag.php
<?
if ($MAX_FILE_SIZE==2097152){
if ($userfile_size<$MAX_FILE_SIZE){
copy($userfile, "F:/Program Files/EasyPHP/tmp/"."$userfile_name");
$car_image=GetImageSize("$userfile");
$largeur=$car_image[0];
$hauteur=$car_image[1];
if (($largeur+$hauteur>500) || $largeur>300 || $hauteur>300){
echo ’<html><head><title>Erreur</title></head><body>’;
echo ’Votre image est trop grande, vous ne pouvez dépasser
les 300 x 200 pixels ou 200 x 300 pixels.<br>’;
echo "Revenir au <a href=\"images_mag.php\">formulaire</a>.";
echo ’</body></html>’;
exit();
}
$taille=$car_image[3];
$extension=substr($userfile_name,-4);
/* Le signe - signifie que nous commençons à la fin de la chaîne de

nom, après l’envoi du formulaire.
Vous l’aurez compris, la difficulté réside non pas dans le code mais dans
l’architecture de l’application. Dans le prochain chapitre, nous verrons
comment remplacer les balises du magazine par le contenu de la table
dans les fichiers et comment élaborer un moteur de recherche dans les
numéros et les pages du magazine.
7.8
Une galerie photo
L’application consiste à afficher des miniatures de photos dans plusieurs
pages reliées. Vous pourrez utiliser un formulaire du type de celui étudié
ci-dessus pour entrer les images. Celles-ci sont mises dans un répertoire
qui sert de sas, en attendant d’être traitées. Ce formulaire permet d’entrer
les informations concernant l’image dans la base de données. Le pro-
gramme crée une copie miniature avec un préfixe. Sans entrer dans le
détail de la pagination, nous allons voir le formulaire et son traitement et
l’affichage des pages.
Pour avoir plus de détails sur la pagination, reportez-vous à
l’annuaire de liens dans le chapitre Moteurs de recherche et
expressions rationnelles ou au magasin électronique dans le
chapitre Parsez-vous XML ?
Le formulaire est un formulaire de téléchargement que nous avons déjà vu
dans ce chapitre. À part les champs texte que vous y ajoutez, nous allons
voir comment mettre un champ menu qui affiche les différentes galeries en
lisant le répertoire principal et y relevant les différents dossiers qui y sont
contenus :
<select name="galeries" size="1">
<?
$dossier=’galeries’;
$repertoire=openDir(galeries);
while ($galerie=readDir($repertoire)){


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status