MySQL et CSS- P3 - Pdf 76

La portée d’une variable dans une fonction
Une variable à l’extérieur d’une fonction possède une portée limitée à la
périphérie de la fonction, c’est-à-dire que la variable n’existe pas dans ce
périmètre. Seuls un ou plusieurs paramètres seront envoyés dans la
fonction par l’intermédiaire des parenthèses, mais le nom de la variable
n’a aucune importance. C’est d’ailleurs ce qui fait son intérêt.
Parfois cependant, il est intéressant de récupérer une variable qui existe
dans la même page en dehors de la fonction. Pour cela, il est possible
d’utiliser le mot-clé global afin que la portée de la variable se situant à
l’extérieur de la fonction soit étendue à toute la page.
Dans l’exemple cité précédemment, il est possible de mettre les sépara-
teurs avant la fonction pour une meilleure visibilité :
$motif []=" ";
$motif []="-";
Ensuite, dans la fonction vous déclarez :
global $motif;
Ainsi, la fonction pourra utiliser le tableau $motif même s’il est situé à
l’extérieur de la fonction. Précédé du mot global, il est opérationnel dans
la fonction.
Méfiez-vous des variables globales
Si vous modifiez votre variable et que vous avez oublié
qu’elle est opérante dans la fonction, vous risquez d’avoir une
surprise dont il sera difficile de déceler la cause.
Les fonctions imbriquées
Il est intéressant, parfois, de créer une fonction pour appeler plusieurs
fonctions. Ainsi, lorsque vous relirez votre programme, vous obtiendrez
une sorte de hiérarchie de fonctions.
Les fonctions
Double Poche PHP & MySQL • 101
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Nous pourrions avoir, par exemple :

}
?>
Les deux premiers tests avec if et elseif concernent les deux premiers
nombres qu’il faut générer, puis la fonction s’appelle deux fois et retourne
3
Les clefs du PHP
102 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
le résultat. La boucle for est là pour créer la liste des nombres obtenus.
Le calcul au-delà de 30 dépend de la capacité de votre machine.
Afficher vos date et heure locales
Le programme proposé ici est l’occasion de revoir des fonctions imbri-
quées ainsi que d’autres notions telles que les dates, les tableaux et
l’opérateur de contrôle d’erreur.
Pour afficher le jour de la semaine en français, nous créons un tableau car
le jour est un nombre de0à6enpartant du dimanche. Le paramètre
envoyé $moment est un timestamp que nous calculons avant l’appel.
Nous tenons compte du décalage avec l’heure GMT pendant l’heure
d’hiver. L’heure d’hiver commence le dernier dimanche d’octobre à 1h
GMT et finit le dernier dimanche de mars à 1h GMT.
<?
function affiche_jour($moment){
$jour=date("w", $moment);
$les_jours=array(’dimanche’, ’lundi’, ’mardi’, ’mercredi’,
’jeudi’, ’vendredi’, ’samedi’);
$jour=$les_jours[$jour];
return $jour;
}
m
Figure 3.10 : La fonction de Fibonacci

$jourdesemaine=gmdate("w", mktime(1,0,0, 3,31,gmdate("Y")));
//variable pour connaître le jour de semaine du 31 mars
$limite_inf=mktime(1,0,0, 3,31-$jourdesemaine,gmdate("Y"));
/*variable pour trouver le dernier dimanche de mars pour l’année
courante*/
$jourdesemaine=gmdate("w", mktime(1,0,0, 10,31,gmdate("Y")));
/*variable pour connaître le jour de semaine du 31 octobre*/
$limite_sup=mktime(1,0,0, 10,31-$jourdesemaine,gmdate("Y"));
3
Les clefs du PHP
104 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
/*variable pour trouver le dernier dimanche d’octobre pour l’année
courante*/
Maintenant, nous testons la date pour savoir si elle est comprise entre les
deux limites. Dans ce cas, elle est en heure d’été :
if ($temps>$limite_inf && $temps<$limite_sup){
$decalage=$decalage_hiver+1;
}
else {
$decalage=$decalage_hiver;
}
$moment=mktime(gmdate("G")+$decalage,gmdate("i"),0,
gmdate("n"),gmdate("j"),gmdate("Y"));
Enfin, nous fabriquons le timestamp avec mktime(), en incluant le
décalage avec l’heure GMT :
Listing 3.20 : Fonctions d’affichage de date : date.php
$ladate=affiche_jour($moment) ." ".date("j", $moment)." ".
affiche_mois($moment) ." ". date("Y", $moment);
/*la date inclut le mois en français grâce à l’appel de

3
Les clefs du PHP
106 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4
MySQL
en action
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Nous allons bientôt pouvoir nous aventurer en ligne. Mais avant cela,
revenons à notre internaute qui souhaite créer son club des Bon Vivants.
Il va lui falloir mettre de l’ordre dans ses idées car avec MySQL, il passe
à la vitesse supérieure.
MySQL a été créée par Michael Widenius de la société TcX, en réaction à
certaines insuffisances de la base de données mSQL. La version 1.0 sort en
mai 1995. Son créateur décide de la distribuer gratuitement via Internet.
L’emploi d’une base de données est lié à l’utilisation des formulaires et à
la nécessité de classer les informations données par l’internaute. Il est bien
sûr possible d’employer un simple fichier texte avec un séparateur entre
les champs mais cette solution comporte plusieurs inconvénients.
4.1
Le fichier face à la base de données
Le fichier est fragile. Vous devez créer un double de votre fichier car tout
fichier peut être vidé par un accès simultané. Il faut donc en verrouiller
l’accès avec un verrou logiciel que le langage PHP fournit.
Votre séparateur doit être un signe que vous n’utilisez jamais, pour qu’on
ne le confonde pas avec un élément de votre texte.
La base de données est gratuite et proposée par tous les hébergeurs. Elle
est robuste (en particulier MySQL) et rapide. De plus, elle propose des
fonctions qui économisent des lignes de code. L’application de ce chapitre
vous permettra de mieux comprendre tout cela.

Le prénom est intéressant et le nom optionnel.
Voyez également si l’adresse postale et le téléphone sont indispensables.
Les contacts peuvent se faire par courriel. S’ils le désirent, les membres
s’échangeront ces deux informations.
Le problème est que le membre du club qui change d’adresse e-mail (ce
qui peut arriver souvent) demandera éventuellement au webmestre d’ef-
fectuer le changement. Cela peut prendre du temps si le club comprend de
nombreux membres. Il est plus intéressant de permettre au membre un
accès direct à ses données pour qu’il puisse, au besoin, les modifier. Mais
comment être sûr qu’il s’agit de la personne en question et non d’une
autre ? La solution ici passe par l’authentification. Nous l’étudierons au
chapitre 5. Il faut ajouter un nom d’usage et un mot de passe. Le nom
d’usage apporte un anonymat et le mot de passe garantit l’identité de la
personne.
Créons maintenant ensemble la table dans la base de données.
4.3
Création d’une table
Sachez qu’il est intéressant dans une table de créer une clé unique qui
identifie chaque nouvelle ligne. MySQL propose une fonction
Création d’une table
Double Poche PHP & MySQL • 109
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
AUTO_INCREMENT qui permet de créer automatiquement une clé qui
s’incrémente de 1 à chaque nouvelle ligne. Chaque nom d’usage dans le
club sera unique puisqu’il identifiera un membre, donc nom_usage peut
servir de deuxième clé, de clé secondaire.
Chaque clé auto-incrémentée est unique
Chaque nouvelle ligne dispose d’une clé unique. Si vous
effacez une ligne par la suite, la clé disparaîtra aussi.
Par exemple, vous avez une ligne avec une clé 1 puis vous l’effacez.

L’homogénéité des noms
Il est plus simple de gérer des noms homogènes. Ainsi, vous
pouvez utiliser des _ ou des capitales pour nommer un champ
mot de passe : mot_de_passe, MotdePasse, motdepasse ou mot-
_passe. Choisissez un système de nommage et conservez-le. Des
erreurs peuvent être générées par les noms. Si le champ d’une clé
auto-incrémentée s’appelle toujours clef, vous n’aurez pas besoin de
vérifier le nom à chaque programme.
Récapitulons la liste des données :
¶ clef numérique AUTO_INCREMENT 11 (caractères) ;
¶ nom_usage texte 25 ;
¶ mot_passe texte 20 ;
¶ prenom texte 30 ;
¶ code_postal texte 12 ;
¶ ville texte 35 ;
¶ pays texte 35 ;
¶ email texte 50.
Nous avons tous les éléments pour créer notre table avec la commande
CREATE de MySQL :
CREATE TABLE membres (
clef int(11) NOT NULL auto_increment,
nom_usage varchar(25) NOT NULL default ’’,
mot_passe varchar(20) NOT NULL default ’’,
prenom varchar(30) NOT NULL default ’’,
code_postal varchar(12) NOT NULL default ’’,
ville varchar(35) NOT NULL default ’’,
pays varchar(35) NOT NULL default ’’,
email varchar(50) NOT NULL default ’’,
PRIMARY KEY (clef),
INDEX (clef),

Imaginez que deux membres s’inscrivent en même temps. Le deuxième
membre ne pourra pas insérer ses données car le champ sera vide
dans les colonnes nom_usage et mot_passe pour les deux lignes, donc
considéré par MySQL comme un doublon.
L’indexation améliore les temps de réponse d’une table. La clé primaire
est systématiquement indexée pour permettre à MySQL de vérifier si elle
existe déjà dans la table lors d’une insertion. Chaque champ avec la
caractéristique UNIQUE comprend un index.
4
MySQL en action
112 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4.4
Modification d’une table
En imaginant votre site, vous vous apercevez que vous aimeriez ajouter la
date d’inscription de chaque membre.
Avec MySQL, deux options existent pour la date. Soit vous entrez une
date, soit vous utilisez un format qui la crée automatiquement. Cette
dernière option évite de créer une donnée pour l’insérer et économise du
code. Il s’agit du type TIMESTAMP. L’inconvénient majeur de ce format de
colonne est que si vous modifiez une donnée dans la ligne, comme par
exemple l’e-mail, le champ modifiera aussi la date. C’est pourquoi nous
conseillons l’autre option de date.
Nous pouvons mettre les deux types de colonne. Ainsi, nous saurons si le
membre du club a modifié ses données, donc s’il est actif dans le club.
Pour insérer ces deux champs, nous utiliserons la commande ALTER. Les
champs s’appelleront date_inscription et date_misajour :
ALTER TABLE membres
ADD date_inscription DATE not null,
ADD date_misajour TIMESTAMP(8) not null

des menus déroulants à l’intérieur d’un formulaire, elles auront
toutes deux colonnes communes : code et nom.
CREATE TABLE pays (
code char(3) NOT NULL default ’’,
nom varchar(100) NOT NULL default ’’,
PRIMARY KEY (code),
UNIQUE KEY code (code)
)
Vous trouverez les données pour créer une table sur le site www.microapp
.com. Les trois lettres garantissent un code unique. Ainsi, dans la table
membres, le champ pays renfermera une donnée texte d’une longueur fixe
de 3. Vous écrivez donc dans le champ requête de PHPmyAdmin, la
commande :
ALTER TABLE membres
CHANGE pays pays CHAR (3) not null
Précédemment, nous avions employé ADD. Nous changeons maintenant la
nature de la colonne avec CHANGE.
4
MySQL en action
114 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Ainsi la donnée insérée dans la table membres et concernant le pays est
une clé étrangère car elle a comme référence, la clé primaire d’une autre
table. La clé étrangère est prise en compte avec la version 4.1 de MySQL
(Nous en sommes à la 3.23).
Pour afficher le contenu de la table dans une page avec le code de la table
membres remplacé par le nom de la table pays, nous utiliserons une
jointure.
4.6
Les jointures de tables

dans l’amas des données et demandent plus de ressources serveur.
Tab. 4.1 : Les types texte et binaire
Type Taille en bytes Description
char(n) Longueur Un champ de texte d’une longueur fixe.
Les chaînes plus courtes sont
complétées (1 à 255).
varchar(n) Longueur Un champ de texte d’une longueur
maximum de n (1 à 255)
text Longueur + 2 Un champ de texte d’une longueur
maximum de 64Kb
blob Longueur + 2 Un champ binaire d’une longueur
maximum de 64Kb
Pour le commerce électronique, les prix seront stockés dans des colonnes
de type DECIMAL. Les différences de taille permettent d’économiser de la
m
Figure 4.1 : Jointure
4
MySQL en action
116 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
place, ce qui est intéressant uniquement si vous avez de grandes quantités
de données car alors, un octet de différence sur plusieurs centaines de
milliers de champs peut créer une légère différence de temps de réponse
et un gain de place sur le disque dur du serveur.
Tab. 4.2 : Les types numériques
Type Taille Description
TINYINT(n) 1 Entier non signé (unsigned) de 0 à 255, signé
de -128 à 127
SMALLINT(n) 2 Entier non signé de 0 à 65535, signé de -32768
à 32767

Double Poche PHP & MySQL • 117
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Tab. 4.3 : Les types date et heure
Type Taille Description
TIME 3 Formaté HH:MM:SS même si l’entrée est sous la
forme HHMMSS ou HHMM…
DATETIME 8 Formaté AAAA-MM-JJ HH:MM:SS quel que soit son
format d’entrée
4.8
La sauvegarde de la base
Transportons maintenant la base de données de votre machine sur votre
nouveau site.
Avec PHPmyAdmin, il est simple et pratique de sauvegarder la base. Il
vous suffit d’aller dans la rubrique Affıcher le schéma de la base. Vous
avez alors le choix de son contenu, soit uniquement la structure, la
structure et les données, ou encore les données seulement. Ensuite, vous
m
Figure 4.2 : Sauvegarde de la base de données
4
MySQL en action
118 • Double Poche PHP & MySQL
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
avez la possibilité de d’enregistrer la base sur votre disque dur en fichier
texte ou compressé. Faites une sauvegarde régulière. Sinon, en cas de
problèmes, vous ne récupérerez peut-être pas les internautes inscrits
depuis la dernière sauvegarde.
4.9
Les formulaires
Une des principales utilisations de PHP et raisons de son succès est la
facilité qu’il procure au webmestre pour traiter les données envoyées par un

}
if (!mysql_select_db($dbname, $id_link )) {
echo ’Sélection de base de données impossible’;
exit;
}
?>
Ces quelques lignes composent votre fichier de connexion. Sur votre site,
vous allez créer un répertoire nommé commun. Dans ce répertoire, vous
placerez tous vos programmes (fichiers inclus et fonctions). Ce fichier qui
est un fichier inclus dans toutes les pages demandant une connexion à la
base de données, s’appellera connexion.inc.php. inc est l’abréviation de
include. Ce type d’architecture est pratique car elle facilite la migration
d’une application d’un serveur vers un autre. Ainsi, il vous sera facile de
transporter votre application, de votre serveur de test sur votre machine
personnelle à celui de l’hébergeur, sans faire de changement majeur. Il
vous suffira de modifier ce fichier.
Les fichiers inclus
Ils sont appelés depuis un autre fichier PHP avec la ligne
include ’commun/connexion.inc.php’. Il est nécessaire dans ce
type de fichier d’utiliser les balises PHP, bien qu’il soit inclus dans un
fichier qui en comporte déjà.
La fonction mysql_connect() renvoie l’identifiant de connexion MySQL
en cas de succès et FALSE si la connexion n’a pu se faire. Par les deux
conditions (if…), l’action est générée et si la fonction renvoie FALSE,le
bloc conditionnel est exécuté. Le message affiché en cas d’échec de la
connexion ou de la sélection de la base de données est minimal, il vous
appartient de le personnaliser et de l’agrémenter.
Exit
N’oubliez pas la commande exit à la fin de votre bloc
conditionnel, sinon le reste de l’application sera exécuté et vous


Nhờ tải bản gốc
Music ♫

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