1. Trang chủ
  2. » Công Nghệ Thông Tin

MySQL et CSS- P4

50 327 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề MySQL et CSS- P4
Trường học Standard University
Chuyên ngành Computer Science
Thể loại bachelor thesis
Năm xuất bản 2023
Thành phố standard city
Định dạng
Số trang 50
Dung lượng 1,06 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

L’ouverture d’une fenêtre avec une fonction Javascript Le formulaire oubli.php n’a pas besoin de tout l’écran pour s’afficher, nous allons donc créer une nouvelle fenêtre avec une foncti

Trang 1

} session_register(tentative);

}

Ainsi quand l’internaute atteint la fin de la troisième tentative avec uneréponse fausse à la question, un nouvel écran lui demande d’envoyer uncourriel au webmestre

L’ouverture d’une fenêtre avec une fonction Javascript

Le formulaire oubli.php n’a pas besoin de tout l’écran pour s’afficher,

nous allons donc créer une nouvelle fenêtre avec une fonction Javascriptque nous appellerons ouvrir_vasistas() :

<SCRIPT LANGUAGE="JavaScript">

function ouvrir_vasistas(adresse, nom_fenêtre,caracteristiques) { window.open(adresse, nom_fenêtre,caracteristiques);

<! }

</SCRIPT>

Quittez la page oubli.php et dans votre page d’accueil, ajoutez le lien :

Vous êtes déjà membre et vous avez peut-être

<a href="#"

onClick="ouvrir_vasistas(’oubli.php’,’vasistas’,’menubar=no, scrollbars=no,statusbar=no, width=300,height=200’)" >

oublié votre mot de passe </A>.

L’application est alors bouclée

des requêtes

Au cours de ce chapitre, l’apprentissage de la syntaxe SQL et desfonctions MySQL a été dispensé au fur et à mesure des applications.Récapitulons-les

Récapitulation de la syntaxe des requêtes

Trang 2

Voici d’abord les principales commandes SQL Ce sont des commandescommunes à la plupart des bases de données Seule leur syntaxe peutprésenter des petites particularités (les types de guillemets…).

Tab 4.9 : Les principales commandes SQL

CREATE Crée une table CREATE TABLEnom_table

(nom_colonne type(longueur)…)

DELETE Efface des données DELETE FROMnom_table

INSERT Insère des données INSERT INTOnom_table

Les fonctions de MySQL présentent l’inconvénient de consommer de la

ressource serveur, surtout si votre base est bien remplie Mais ellespermettent de vous épargner des lignes de codes en langage PHP

Tab 4.10 : Quelques fonctions MySQL

AVG() Retourne la moyenne des différents

nombres

AVG(nom_colonne1) COUNT() Compte le nombre de lignes COUNT (*) RAND() Permet d’effectuer un tri aléatoire avec

ORDER BY

ORDER BY RAND ()

Trang 3

Voici un certain nombre de clauses SQL qui modulent le résultat :

WHEREDétermine les données sur lesquelles s’appliquent les commandes SQLDELETE, SELECT, UPDATE

Syntaxe : WHERE nom_colonne=’valeur’

Options AND, OR, NOT

Exemple DELETE FROM nom_table where nom_colonne1=2 OR

nom_colonne1=5

Explication AND: les deux expressions sont vraies, OR : une expression

est vraie, NOT : une expression est fausse Ces troisopérateurs peuvent se combiner avec des parenthèsesPrenons par exemple :

SELECT * from membres where (pays=’HTI’ OR pays=’DMA’)AND date_misajour BETWEEN 20020401 AND 20020430

Les parenthèses donnent des priorités, ainsi OR est traité avant AND

DISTINCTRegroupe les données identiques

Syntaxe : DISTINCT nom_colonne

Options sans

Exemple SELECT DISTINCT nom_colonne1 FROM nom_table

Explication retire les doublons du résultat

GROUP BYRegroupe les données identiques

Syntaxe : GROUP BY nom_colonne1, nom_colonne2…

Options sans

Récapitulation de la syntaxe des requêtes

Trang 4

Exemple SELECT * FROM nom_table where nom_colonne1=2 GROUP

BY nom_colonne2

Explication partitionne les résultats par champ sur lesquels il effectue les

fonctions

ORDER BYOrdonne les données selon la ou les colonnes choisies

Syntaxe : ORDER BY nom_colonne1, nom_colonne2…

Options ASC(par défaut) : ordre croissant), DESC : ordre décroissant

Exemple SELECT * FROM nom_table where nom_colonne1=2 ORDER

BY nom_colonne2 DESC

Explication trie selon l’ordre de la table des caractères ASCII (chiffre,

capitale, bas de casse…)

LIMITLimite le résultat de la requête à un certain nombre de lignes

Syntaxe : LIMIT nombre_de_lignes

Options LIMIT [ligne_de_début,] nombre_de_lignes

Exemple SELECT * FROM nom_table where nom_colonne1=2 LIMIT

AS Désigne une donnée par un alias.

LIKE Permet une recherche sur une partie de la valeur du

champ avec des caractères génériques comme % ou _ RLIKE Permet une recherche avec des expressions

rationnelles.

Trang 5

$sql="select COUNT(*) as compte, pays.nom as nation from membres, pays where pays.code=membres.pays GROUP BY nation";

un autre au pays Nous définissons le champ avec la table, ainsipays.codedésigne le champ code dans la table pays.

Voici une requête composée avec LIKE :

$sql="select COUNT(*) as compte from membres, pays where membres.nom_usage LIKE ’b%’";

Dans cette requête, % remplace plusieurs caractères Ainsi la recherche sefait sur le nombre de membres dont le nom d’usage commence par b Sinous avions utilisé ’%b%’, la requête aurait demandé à la base de trouver

un nom d’usage comportant la lettre b Le caractère _, lui, remplace unseul caractère

$sql="select COUNT(*) as compte from membres, pays where membres.nom_usage LIKE ’b _’";

Dans cette requête, nous avons inséré trois blancs soulignés, cela signifieque nous comptons le nombre de membres dont le nom d’usagecommence par b et comprend quatre lettres

Au cours des chapitres suivants, vous retrouvez ces fonctions dansdiverses applications

Récapitulation de la syntaxe des requêtes

Trang 6

4.14 Les procédures stockées

Avec sa version 5, MySQL propose l’utilisation de procédures stockées

Ce type de fonctionnalité économise du code PHP et rend les requêtesréutilisables Cela crée une sorte d’interface entre la base de données et lescript La commande est compilée sur le serveur et est alors disponiblepour des requêtes L’application PHP appelle la procédure en lui envoyant

de nouveaux paramètres, celle-ci s’exécute en une fois et renvoie unrésultat L’opération est plus rapide qu’une requête envoyée simplementpar une fonction PHP car la requête n’a besoin d’être analysée qu’uneseule fois Cette version répondra à la norme SQL 2003

SQLite est proposée avec la version 5 de PHP C’est une base de donnéessans serveur Elle se sert de fichiers pour stocker ses données, ce qui larend très rapide et très simple à mettre en place Le fichier est verrouillépour toute requête pendant un accès en écriture, ce qui rend SQLiteimpropre à une utilisation comportant de nombreux accès écriture.Une des particularités de SQLite est que vous pouvez créer une base dans

la mémoire pour faire une opération pendant la durée de votre script

echo "Résultats trouvés : <UL>"

while ($rang = sqlite_fetch_array($resultat)){

$commune=$rang[’commune’];

$codepostal=$rang[’codepostal’];

echo " <LI>$commune $codepostal</LI>"

} echo " <UL>"

sqlite_close($db);

Trang 7

} echo <form method=\"post\" action=\"$PHP_SELF\">";

echo ’Tapez le nom de la commune <input name="commune" size="20">

<input type="submit" value="Chercher">

</form>’;

Les droits sur votre répertoire de base de données

N’oubliez pas de donner des droits d’écriture à votre toire de travail.

réper-Cette base est très facile à monter et comporte de nombreuses nalités comme la possibilité de faire des requêtes imbriquées pour destables jointes par exemple dans le cas d’un catalogue de livre ó lacollection est représenté par un numéro qui est reporté dans une tablecollections avec le nom en clair :

fonction-SELECT titre FROM catalogue WHERE collection = (SELECT code FROM collections WHERE nom = ’e-poche’)

ou

SELECT catalogue.titre FROM catalogue, collections WHERE catalogue.collection = collection.code AND collection.nom = ’e-poche’

Un autre des traits de SQLite est la possibilité d’y enregistrer desfonctions PHP Par exemple, vous pouvez décider, pour continuer l’exem-ple précédent de glisser une espace dans le code postal pour mettre envaleur le numéro de département comme par exemple 35 270

function formater_codepostal($codepostal) { return substr_replace($codepostal, ’ ’, 2, 0);

} sqlite_create_function($db, ’format_code’, ’ formater_codepostal’, 1);

$rangs = sqlite_array_query($db, ’SELECT format_code(’codepostal’) from ’codePostaux.db’);

Cette présentation succincte sert d’introduction à cette base de donnéesqui propose avec simplicité un certain nombre de fonctionnalités trèsutiles tout en ayant une capacité de 2 téraoctets Elle est adéquate pourtout site web moyen, c’est-à-dire la grande majorité des sites

SQLite

Trang 9

Le PHP

et l’appr oche

objet

Trang 10

Le langage PHP, rappelez-vous, est un langage procédural, c’est-à-direque l’application parcourt le fichier PHP ligne à ligne, de droite à gauche,lisant les instructions au fur et à mesure d’une manière linéaire PHP 4 aintégré la programmation objet d’une façon hybride, c’est-à-dire sans enintégrer toutes les implications En PHP 4, on peut éviter d’utiliser laprogrammation objet et programmer ce que l’on veut Si maintenant vousdésirez exploiter les nouvelles possibilités de PHP 5, qui a particulière-ment développé cet aspect, il vous faut en comprendre les multiplesaspects.

Nous verrons les différences de conception entre PHP 4 et PHP 5 en fin dechapitre pour ne pas nuire à la clarté de l’explication

Pourquoi vouloir encombrer PHP avec une option qui lui est étrangère,telle que celle d’objet ?

m Figure 5.1 : Langage procédural

Trang 11

5.1 Qu’est-ce que l’objet ?

Le livre que vous tenez en main est un objet ; le siège sur lequel vous êtesprobablement assis est un objet C’est un élément autonome et entier avecdes propriétés et des fonctions

C’est une capsule percée de plusieurs ouvertures Ces capsules sont desunités indépendantes du contexte dans lequel elles sont utilisées, ellespeuvent donc être utilisées dans tous les contextes Vous pouvez voir cescapsules comme des briques de programme Ces bouts de programmessont donc autonomes

La classe est le modèle, et l’objet est une création à partir de ce modèle(une instance) La classe est le prototype et l’objet, son application dansdes situations concrètes

Cet objet a des propriétés ou des attributs Ces propriétés sont portées pardes variables à l’intérieur de la classe Les fonctions ou méthodes de laclasse concernent les actions traitées par cette classe Une des fonctions de

la civilisation est de classer différents objets

m Figure 5.2 : Langage à objets

Qu’est-ce que l’objet ?

Trang 12

Pour créer une classe, il faut d’abord modéliser un objet, c’est-à-diredistinguer et choisir les différentes propriétés et méthodes dont vous avezbesoin pour le générer.

Prenons l’objet deux-roues ; nous allons énumérer les différentes tés qui le distinguent d’un autre deux-roues :

var $taille=’adulte’;

var $etat="est arrêté";

function deux_roues ($couleur, $taille, $etat){

$this- > couleur = $couleur;

$this- > taille = $taille;

$this- > etat = $etat;

} function affiche (){

echo "mon deux-roues ".$this- >couleur." " $this->etat " Il est

de taille " $this- >taille " et de type " $this->type " avec ".$this- >nbreVitesses " vitesses.";

} function rouletil (){

Nous avons ici une classe avec les attributs et la méthode deux_roues().Comme vous l’avez remarqué, cette méthode porte le même nom que laclasse, ce qui la désigne comme constructeur Cette méthode va servir àconstruire l’objet quand la classe sera appelée avec la méthode new()

Trang 13

À l’intérieur de la fonction, nous employons la variable this gnée de l’opérateur −> La variable this est une variable passe-partoutqui évite de donner à chaque fois un nom pour une variable qui est locale

accompa-à la classe et donc temporaire L’opérateur −> référence une classe, uneméthode ou une propriété d’une classe

Pour appeler l’objet deux_roues :

include("deux_roues_class.php");

$mondeux_roues=new deux_roues(’vert’, ’enfant’, ’roule’);

echo "Mon deux-roues est ".$mondeux-roues - >couleur;

echo "Mon deux-roues " $mondeux-roues - >rouletil();

La première ligne inclut la classe deux_roues Il est conseillé de mettreune seule classe par fichier pour pouvoir s’y retrouver par la suite

La deuxième ligne appelle la classe deux_roues pour en créer uneinstance nommée $mondeux_roues à laquelle j’envoie des attributs.Dans le cas du PHP 4, le programme crée une copie de l’objet Cetteopération est consommatrice de ressources, ce qui ralentit l’opération Lesecond problème est que vous agissez non pas sur l’objet lui-même maissur sa copie

Dans la catégorie, il existe plusieurs types d’objets comme vélo, moto.Ces objets sont dérivés de l’objet deux-roues La classe deux-roues est laclasse parente de la classe vélo, qui est une classe dérivée

Avec le PHP 4, une classe ne peut hériter que d’une seule classe parente.Les héritages se font avec le mot clé ’ extends ’ La classe dérivée héritedes propriétés et des méthodes de la classe parente tout en ayant lapossibilité d’ajouter les siennes

class velo extends deux_roues{

var $nbreVitesses=18;

var $type="VTT";

function velo ($nbreVitesses, $type){

$this- > nbreVitesses = $nbreVitesses;

$this- > type = $type;

$this- > etat = $etat;

L’héritage

Trang 14

} }

Pour appeler cette classe dérivée :

include("deux_roues_class.php");

include("velo_class.php");

$monvelo=new velo ();

$monvelo- >etat = "roule";

$monvelo- >couleur = "rouge";

$monvelo- >taille = "adulte";

$monvelo- >nbreVitesses = "12";

$monvelo- >type = "VTC";

echo "mon vélo ".$monvelo- >couleur." ".$monvelo->etat." Il est de taille ".$monvelo- >taille." et de type ".$monvelo->type." avec

"$monvelo- >nbreVitesses." vitesses.".";

Si la classe dérivée contient une propriété ou une méthode contenue dans

la classe parente alors c’est la méthode ou la propriété cette classe dérivéequi prévaut sur celles de la classe parente

class velo extends deux_roues{

var $nbreVitesses=18;

var $type="VTT";

function velo ($nbreVitesses, $type){

$this- > nbreVitesses = $nbreVitesses;

$this- > type = $type;

$this- > etat = $etat;

$this- > identite="mon velo ";

} function affiche (){

echo $this- >identite.$this->couleur." " $this->etat " Il est de taille " $this- >taille " et de type " $this->type " avec ".

$this- >nbreVitesses " vitesses.";

} }

Nous utilisons ici une méthode du même nom, affiche() Si nousutilisons la méthode affiche() de la classe velo, nous n’avons plusaccès à la méthode affiche() de la classe deux_roues

Maintenant, nous allons faire une classe vélomoteurs et motos

class velomoteur extends deux_roues{

Trang 15

$this- > puissance = $puissance;

$this- > type = $type;

$this- > marque = $marque;

$this- > identite="ma moto ";

} function affiche (){

echo $this- >identite.$this->couleur." "

.$this- >etat." Il est de taille "

.$this- >taille." et de type ".$this->type." avec "

.$this- >nbreVitesses." vitesses.";

} }

Cela va devenir plus difficile de s’y retrouver, et nous allons donc utiliser

un ersatz de surcharge avec une sorte d’interface

Surcharger une méthode ou une propriété consiste, dans la programmationobjet, à donner le même nom à deux propriétés ou à deux méthodes ouplus Cette commodité est exploitée dans des langages typés dans lamesure ó ces différentes méthodes utilisent des données de type différent,

ou un nombre différent de paramètres, ce qui n’est pas possible en PHP 4mais le devient en PHP 5 Pour les propriétés de même nom, il fautqu’elles soient de type différent

C’est pratique pour réunir dans une même classe les mêmes fonctionsavec des variantes pour des situations différentes sans pour autant créerune classe dérivée

En PHP 4, nous pouvons utiliser une astuce avec la fonctionfunc_num_args(), qui donne le nombre de paramètres envoyés à lafonction Ainsi, imaginons que les fonctions velo() et velomoteur()soient à l’intérieur de la classe vehicule Dans la méthode constructeur

de la classe vehicule, on inclut une sorte d’aiguillage conditionné par lenombre d’arguments

class vehicule { function vehicule() {

Trang 16

$this- >$name($argument1, $argument2);

} elseif (func_num_args()==3){

$this- > puissance = $puissance;

$this- > type = $type;

$this- > marque = $marque;

$this- > identite="ma moto ";

} function velo ($nbreVitesses, $type){

$this- > nbreVitesses = $nbreVitesses;

$this- > type = $type;

$this- > etat = $etat;

$this- > identite="mon velo ";

} } /* ensuite vous appelez la classe vehicule pour créer un objet véhicule avec la méthode velo().*/

Dans les exemples précédents, nous avons la classe velo et la classevelomoteurainsi que la classe parente deux_roues avec pour chacune laméthode affiche() Le polymorphisme nous évite de choisir, leprogramme le fait pour nous

$obj1=new velo(18, "VTT");

$obj2=new velomoteur (750, "trial", "Suzuki");

$deux_roues - >affiche($obj1);

$deux_roues - >affiche($obj2);

Trang 17

5.5 Passer un argument par référence

Avec PHP 4, l’argument passé à une fonction contient par défaut la copie

de la variable, ce qui pose un problème si vous modifiez cette variable

Référence et valeur

Quand vous créez une variable, le système alloue une case mémoire pour contenir la valeur de la variable Quand vous passez une valeur à une fonction ou à une méthode, le programme copie la valeur de cette variable en laissant la variable originale intacte.

En revanche, quand vous passez une variable par référence, la valeur qui est passée à la méthode est l’adresse de l’original ; donc, les modifications à l’intérieur de cette méthode sont faites sur le contenu de

la case mémoire originale, directement sur la source.

Pour qu’un argument soit toujours passé par référence à une fonction,ajoutez une esperluette devant l’argument dans la fonction :

function convertir_dollar_vers_euro (&$prix) {

echo $phrase; // résultat ’’Cet article vaut 125"

Pour qu’un argument soit passé par défaut à une fonction qui ne le fait paspar défaut, ajoutez une esperluette devant l’argument dans l’appel à lafonction :

function convertir_dollar_vers_euro ($prix) {

Trang 18

echo $phrase; // résultat ’’Cet article vaut 15$"

/*il n’a pas été converti, c’est sa copie interne à la fonction qui a été convertie */

fonction-Le pointeur

PHP 5 n’utilise plus la copie de l’argument comme PHP 4 mais se sert

d’un pointeur (handle) du type de celui utilisé pour les fichiers Pour

continuer à utiliser les objets comme dans PHP 4, vous disposez de laméthode induite _clone()

Les privilèges

Les privilèges d’accès aux méthodes et aux propriétés sont de trois types :

¶ private conditionne l’accès à la méthode ou à la propriété pour lesméthodes de la classe

¶ protected conditionne l’accès à la méthode ou à la propriété pour lesméthodes de la classe ou des classes héritières ou dérivées

¶ public ouvre l’accès à la méthode ou à la propriété pour toutes lesclasses

Trang 19

De la même manière, la méthode _destruct() permet de détruire l’objet.D’autres fonctionnalités enrichissent cette version, qui révolutionne l’ap-proche du développeur PHP Nous les développons encore dans lesquelques chapitres suivants, en particulier dans le chapitre intitulé

Parsez-vous XML ?

PHP 5 et l’objet

Trang 21

L’internaute est d’abor d

une personne

Trang 22

En face de son écran, l’internaute est une personne Aussi, le webmestredoit toucher l’internaute qui se sentira reconnu par la personnalisation etprotégé par l’authentification.

La personnalisation et l’authentification entretiennent des liens étroits Lemembre du club est identifié par son nom d’usage et son mot de passe, cequi lui donne accès à des données Cette identification permet également

de personnaliser les pages et d’y inclure le surnom de ce membre ou dedonner un aspect à la page tenant compte de ses gỏts Au fur et à mesureque cet internaute se connecte, envoie des e-mails, entre des données,utilise des applications, il devient une personne pour le webmestre Cetterencontre virtuelle peut prendre de la consistance et déboucher éventuel-lement sur une vraie rencontre Il en va de même entre les membres duclub Le Web remplit alors réellement sa fonction

Dans votre site, veillez à définir une page Contact pour vous présenter.Placez-y éventuellement votre photo Ainsi vous ne serez pas tout à fait uninconnu pour les visiteurs Vous direz dans cette page pourquoi vous avezcréé ce site et ce que vous en attendez

Au centre des communications et des applications existe un lieu que l’onappelle tableau de bord Cette page permet au membre de voir lesapplications à sa disposition, éventuellement de recevoir des messagesd’information, de modifier ses données, etc

Le webmestre dispose lui aussi d’un tableau de bord pour gérer le site,ajouter des pages, regarder les statistiques ou analyser l’activité du club

L’authentification en langage PHP est assez simple Une fenêtre s’ouvrelors de l’accès à la page demandant un nom d’usage et un mot de passe.L’application vérifie ensuite l’existence des données dans la base.Pour authentifier un visiteur, nous créerons un fichier inclus, grâce à lacommande include, dans toutes les pages du club Vous avez créé votrepage d’accueil et un certain nombre de pages publiques mais avantd’entrer ou d’avoir envie de faire partie du club, l’internaute doit vousconnaỵtre un peu pour vous accorder sa confiance

Trang 23

PHP dispose de deux variables de serveur : $_SERVER["PHP_AUTH_USER"]qui récupère le nom d’usage entré dans la fenêtre (login/ mot depasse) et $_SERVER["PHP_AUTH_PW"] qui contient le mot de passe saisipar le visiteur Ces variables sont opérationnelles le temps de la visite dusite, l’authentification ne sera donc demandée qu’une fois Par contre,pour que le visiteur n’ait pas besoin d’entrer son identité à chaque visite

du site, il vous faudra lui proposer un cookie qui enregistrera ces donnéessur son disque dur

Pour lancer la fenêtre d’authentification, utilisez la fonction header() :

header(’WWW-Authenticate: Basic realm="Club des Bons Vivants"’); header(’HTTP/1.0 401 Unauthorized’);

m Figure 6.1 : Authentification

L’authentification

Trang 24

La première ligne lance la fenêtre d’authentification et la deuxième

aiguille le visiteur qui a cliqué sur annuler vers la page par défaut du

serveur Apache pour une erreur 401 Cette dernière indique que l’accès àcette page n’est pas autorisé

La fenêtre jaillit au moment du chargement de la page Elle offre troispossibilités à l’internaute :

1. entrer le bon mot de passe et le bon login ;

2. entrer un mauvais mot de passe ;

3. cliquer sur annuler.

Si nous laissions les lignes en l’état, le visiteur reviendrait constammentsur cette fenêtre d’authentification, quels que soient les nom d’usage et

mot de passe saisis S’il cliquait sur le bouton annuler, il arriverait sur la

page d’erreur 401

Il nous faut donc comparer les informations aux données de la table

membres et statuer sur la réponse Si elle est vraie, l’internaute ne verra

m Figure 6.2 : Erreur 401

Trang 25

plus apparaỵtre cette fenêtre Si elle est fausse, il verra la fenêtreréapparaỵtre encore deux fois.

Pour les cas 2 et 3, nous renverrons l’internaute vers le formulaired’inscription au club

initia-la table membres.

Quand l’internaute tape le nom d’usage et le mot de passe, le programmeest rechargé avec ces deux variables puis entre dans le bloc conditionneladéquat Un bloc s’exécute en cas d’existence des variables, l’autre dans

le cas ó elles n’existent pas Sur le schéma, le visiteur commence soncheminement par l’étape 1 s’il n’a jamais été authentifié, par l’étape 3 s’il

a déjà été identifié

Dans le schéma, nous remplacerons l’erreur 401 par une redirection vers

la page d’inscription Ensuite, nous introduirons la variable $fois ensession, ce qui limitera le nombre de fois ó l’internaute pourra taper sonmot de passe La limitation du nombre de tentatives est introduite pour desraisons de sécurité Cela protège contre les logiciels de type Force

b Figure 6.3 :

Cheminement de l’authentification

L’authentification

Ngày đăng: 07/11/2013, 18:15

Xem thêm

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN