PHP et MySQL

118
PHP et MySQL Chiny Mohamed 4 ème année GI

Transcript of PHP et MySQL

Page 1: PHP et MySQL

PHP et MySQL

Chiny Mohamed

4ème année GI

Page 2: PHP et MySQL

Sommaire

• Première partie: PHP- Syntaxe PHP- Génération des pages HTML par les scripts PHP

• Deuxième partie: MySQL- Syntaxe SQL (rappel)- Interface graphique PHP/MyAdmin

• Troisième partie: Interfaçage PHP MySQL

Page 3: PHP et MySQL

Rappel du model Client-Serveur Web

Client

Base de données MySQL

Serveur

Script PHP

Internet

Requête

Réponse

Document Html

appel de la page

extraction de données exécution

Serveur d’application

Serveur de base de données

Serveur de fichiers

Page 4: PHP et MySQL

Pages Web Statiques et Dynamiques

• Pages Web statiques:Ce sont les pages Web inchangeables directement

sur le serveur. Ils nécessitent un rechargement sur un éditeur web (Dream Weaver par exemple) pour pouvoir modifier leur contenu, puis un ré-ébèrgement.

• Pages Web dynamiquesCe sont les pages Web modifiables directement sur

le serveur (interactifs). Elle sont souvent alimentées par une base de donnée. Ces pages sont donc mises à jour d’une façon dynamique et ne nécessitent souvent pas de ré-ébèrgement après chaque modification.

Page 5: PHP et MySQL

Pourquoi les pages dynamiques?

• Sites à contenu fréquemment modifiable (articles à vendre, annonces, avis…)

• Sites exigeant une adhérence (utilisateurs multiples, sessions…)

• Forums de discussion• Sites proposant des champs pour accueillir les avis des

visiteurs (livres d’or)• Sites de téléchargement• Sites de messagerie électronique

Avantage:• Génération automatiques de documents HTML selon les

données d’entrée (pages Web interactives).• Économie d’espace d’hébergement• Mise à jour automatique (site web qui se gère lui-même)

Page 6: PHP et MySQL

PHP

1ère partie

Page 7: PHP et MySQL

Qu’est ce que PHP? I

• Le PHP est un langage de programmation simple (un langage de script) que l’on intègre dans du code HTML, et qui est exécuté côté serveur. La syntaxe du PHP est un mélange de langage C et de Perl . C’est un langage Open Source, c’est à dire gratuit et libre de droits.

• Il a été créé par Rasmus Lerdorf qu’il l’a mis au point pour ses propres besoins en 1994 (projet personnel)

• Au début PHP signifiait: Personal Home Page • En 1998, grâce à la collaboration de Zeev Suraski et Andy

Gutmans, fondateurs de la société Zend, la version 3 voit le jour. Elle s’appelle désormais «PHP : Hypertext Preprocessor». La version 4 voit le jour en 2000.

• L’attribut de langage Open source de ce programme a permis à plusieurs milliers de développeurs de rendre PHP plus simple et plus convivial.

Page 8: PHP et MySQL

Qu’est ce que PHP? II

Les principaux atouts du PHP sont :• la gratuité et la disponibilité du code source (PHP est

distribué sous licence GNU GPL)• la simplicité d'écriture de scripts qui sont exécutés

directement sur le serveur, avant l’envoi de la page à l’internaute

• la possibilité d'inclure le script PHP au sein d'une page HTML

• la simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportés, mais le plus utilisé avec ce langage est MySQL, un SGBD gratuit disponible sur les plateformes Unix, Linux, et Windows

• la richesse fonctionnelle : PHP comporte plus de 1000 fonctions, parmi lesquelles les fonctions d’images, les protocoles Internet, etc. 

Page 9: PHP et MySQL

Qu’est ce que PHP? III

• La première version officielle de PHP était la version 3 (langage interprété). En 2000 la version 4 a vu le jour (langage compilé). Actuellement PHP est dans sa version 5 (compilé).

• Le concurrent franc du PHP est ASP (Acrive Server Page) de Microsoft

Le PHP est actuellement le langage de script (côté serveur) le plus utilisé pour la réalisation de sites web dynamiques. Langage très complet, il permet de réaliser la plupart des applications, mais il est principalement employé pour mettre des bases de données en ligne dans les sites web.

Page 10: PHP et MySQL

Intégration des scripts PHP dans une page HTML I

Les pages web sont au format html. Les pages web dynamiques générées avec PHP sont au format php (index.php par exemple). Le code source php est directement inséré dans le fichier HTML grâce aux balises (tags) suivantes:

- <?php … ?> (balise standard)- <? … ?> - <script language=‘’PHP’’> … </script>- <% … %> (balise ASP)

Les trois premières balises sont automatiquement reconnues par le serveur PHP (serveur APASH). Quant à la balise ASP, elle doit être définie dans le fichier de configuration du moteur PHP nommé PHP.INI

Page 11: PHP et MySQL

Intégration des scripts PHP dans une page HTML II

Exemple d’une page nommée index.php:

<html><head><title>Exemple de page PHP</title></head><body>

<p>Ceci est du HTML</p><?php echo ’’Ceci est du PHP’’?>

</body></html>

Page 12: PHP et MySQL

Exemple de scripts

Soit la page nommée index.php:

Code source

(coté serveur)

Aperçu sur le navigateur

(coté client)

Code source

(coté client)

On remarque que les balises PHP qui existent sur la page d’origine (coté serveur) ont disparu au coté client => confidentialité du code PHP

Page 13: PHP et MySQL

Les commentaires

Un script PHP se commente de la même façon qu’en C:

• // commentaire de fin de ligne (seule la ligne précédée par le double slash est commentée)

• /* commentaire */ commentaire sur plusieurs lignes (tout ce qui est compris entre /* et */ est traité en tant que commentaire

IL est recommandé de commenter largement ses scripts. Cela permettrait de modifier aisément ses pages Web ultérieurement.

Page 14: PHP et MySQL

Les variables

En PHP le typage des variable est implicite. Il n’est donc pas nécessaire de déclarer les types ni d’initialiser les variables. Il est même possible d’affecter à une variable des valeurs de types différents dans le même script.

Les identificateurs de variables sont précédées par le symbole « $ »

Exemple: $nom=‘‘ENSA’’;$c=$a+$b;

Les variables peuvent être de type entier (integer), réel (double), chaîne de caractères (string), tableau (array), booléen (boolean).

Il est possible de convertir le type d’une variable (le CAST)

Exemple:$str = ’’12’’; // $str vaut la chaîne ‘’12’’$nbr = (int)$str; // $nbr vaut le nombre 12

Page 15: PHP et MySQL

Les constantes

Les constantes PHP ne sont préfixées par aucun symboles. Elles sont déclarée de la façon suivante:

define(‘‘id_constante’’,‘‘valeur’’); // ou bien define(id_constante, ‘‘valeur’’);

Exemple:define(‘‘nom’’, ‘‘ENSA’’);

Dans ce cas la constante nom vaut la valeur ENSA

Les constantes ne sont définie qu’une seule fois dans le script. Leurs valeurs reste inchangées et leurs identificateurs ne sont pas sensibles à la casse (contrairement aux variables).

Page 16: PHP et MySQL

Les opérateur I

• Opérateurs arithmétiques :+ (addition), - (soustraction), * (multiplié), / (divisé), %

(modulo), ++ (incrément), --(décrément).

• Opérateurs d’assignement := (affectation), *= ($x*=$y équivalent à $x=$x*$y), /=, +=,

-=, %=

• Opérateurs logiques : and, && (et), or, || (ou), xor (ou exclusif), ! (non)

• Opérateurs de comparaison :== (égalité), < (inférieur strict), <= (inférieur large), >, >=, !

= (différence)

Page 17: PHP et MySQL

Les opérateur II

Il existe un opérateur très spécial qui équivaut à une structure conditionnelle complexe if then else à la différence qu’il renvoie un résultat de valeur pouvant ne pas être un booléen : l’opérateur ternaire.

Syntaxe :(condition)?(expression1):(expression2);Si la condition est vrai alors évalue et renvoie l’expression1

sinon évalue et renvoie l’expression2.

Exemple :$nbr = ($toto>10)?($toto):($toto%10);Dans cet exemple, la variable $nbr prend $toto pour valeur si

$toto est strictement supérieur à 10, sinon vaut le reste de la division entière de $toto par 10.

Page 18: PHP et MySQL

Les références

On peut à la manière des pointeurs en C faire référence à une variable grâce à l’opérateur & (ET commercial).

Exemple :$var1 = 100; // la variable $var1 est initialisée à la

valeur // 100

$var2 = &$var1; // la variable $var2 fait référence à // $var1

$var1++; // on change la valeur de $var1

echo $var2; // qui est répercutée sur $var2 qui // vaut alors 101

Page 19: PHP et MySQL

Fonctions agissant sur les variables

Quelques fonctions :• empty($var) : teste si la variable est vide ou non (renvoie

true ou false)• isset($var) : teste si la variable existe ou non (renvoie true

ou false)• unset($var) : détruit une variable• gettype($var) : retourne le type de la variable• settype($var, ’’type’’) : convertit la variable d’un type à un

autre (CAST)• is_int() : teste si la variable est de type entier ou non

(renvoie true ou false)• is_long(), is_double(), is_string(), is_array(), is_bool(),

is_float(), is_numeric(), is_integer() : Idem que is_int().

Page 20: PHP et MySQL

Fonctions agissant sur les variables

Une variable peut prendre comme identificateur la valeur d’une autre variable en utilisant la syntaxe suivante:

${$var} = valeur

Exemple: $variable = ‘‘bonjour’’; ${$variable} = 2007; echo $bonjour; // renvoie 2007

Dans cet exemple l’identificateur de la deuxième variable a pris la valeur de la première variable ‘‘bonjour’’.

Page 21: PHP et MySQL

Mathématiques

PHP dispose d’une grande série de fonctions mathématiques.Quelques fonctions:• abs($x) : renvoie la valeur absolue de $x• ceil($x) : arrondi supérieur• floor($x) : arrondi inférieur• pow($x,$y) : x exposant y• round($x,$i) : arrondi de x à la ième décimale• max($a, $b, $c …) : retourne l’argument de valeur

maximum• min($a, $b, $c …) : retourne l’argument de valeur minimum• pi() : retourne la valeur de PIEt aussi : cos, sin, tan, exp, log, sqrt… ainsi que des

constantes tels que M_PI, M_E

Page 22: PHP et MySQL

Mathématiques – suite -

Nombres aléatoiresLa fonction rand($x,$y) permet de générer un nombre

aléatoire compris entre $x et $y s’ils sont déclarés sinon génère un nombre aléatoire compris entre 0 et RAND_MAX

srand() initialise le générateur aléatoiregetrandmax() retourne la valeur du plus grand entier pouvant

être généré.

La fonction rand() se base sur de vielles algorithmes. Il a donc un comportement qui peut être prévisible. La nouvelle fonction mt_rand() est basée sur la cryptographie. Elle est plus rapide et plus imprévisible.

Les fonctions qui dérivent de la même famille sont mt_srand() et mt_getrandmax().

Page 23: PHP et MySQL

Mathématiques – suite -

Formatage d’un nombrenumber_format ($nbr,$dec,$a,$b) : retourne une chaîne de

caractères représentant le nombre $nbr avec $dec décimales après formatage. La chaîne $a représente le symbole faisant office de virgule et $b le séparateur de milliers.

Par défaut, le formatage est anglophone : $a = ‘’.’’ et $b = ‘’,’’Cette fonction est très utile pour représenter les nombres élevés au

format francophone

Exemples:number_format (1000000.3333); // affiche 1,000,000 number_format (1000000.3333,2); // affiche 1,000,000.33 number_format (1000000.3333,2,",","."); // affiche 1.000.000,33

Page 24: PHP et MySQL

Chaînes de caractère

Une variable chaîne de caractères n’est pas limitée en nombre de caractères. Elle est toujours délimitée par des simples quotes (‘) ou des doubles quotes (‘‘).

Exemples : $etablissement = ‘’ENSA’’;$ville = ‘Marrakech’;

Les doubles quotes permettent l’évaluation des variables et caractères spéciaux contenus dans la chaîne (comme en C) alors que les simples ne le permettent pas.

Exemples : echo ‘’$etablissement‘’; // affiche ENSAecho ‘$etablissement‘; // affiche $etablissement

Page 25: PHP et MySQL

Chaînes de caractère

Concaténation de chaînesExemple 1 :$var1 = ‘’Hello’’;$var2 = ‘’Word’’;echo $var1.$var2; // imprime HelloWord

Exemple 2 :$etab = ‘’ENSA’’;echo $etab.‘’Marrakech’’; // Affiche ENSAMarrakech

Exemple 3 :$var = ‘Université’;$var.= ‘’ Cadi Ayyad’’ echo $var; // affiche Université Cadi Ayyad

Page 26: PHP et MySQL

Chaînes de caractère

Affichage echo est la fonction d’affichage la plus utilisée en PHP. Exemple:echo ‘‘Bonjour’’ // Affiche Bonjour

Cependant ils existent d’autres fonction plus ou moins utilisées. À savoir: print() et printf()

print(‘‘ chaîne’’); // équivalent à echo ‘‘chaîne’’Printf(‘‘chaîne’’,’’format’’) // affichage formaté comme en C

Exemple: Printf(‘‘ENSA %s’’,’’Marrakech’’); // imprime ENSA Marrakech

Page 27: PHP et MySQL

Chaînes de caractère

Affichage –suite - On peut afficher des chaînes de caractères s’étalant sur

plusieurs lignes en utilisant la syntaxe suivante:

$str = <<<EODCette syntaxe permet de déclarer une chaînede caractères qui occupe plusieurs ligneEOD;echo $str; // Cette syntaxe permet de déclarer une // chaîne de caractères qui occupe plusieurs lignes

Page 28: PHP et MySQL

Chaînes de caractère

Quelques fonctions• strlen($str) : retourne la taille de la chaîne $str en

caractères.• strtolower($str) : conversion en minuscules• strtoupper($str) : conversion en majuscules• ucfirst($str) : convertit la première lettre en majuscule• trim($str) : suppression des espaces de début et de fin de

chaîne• substr($str,$i,$j) : retourne une sous chaîne de $str de taille

$j et débutant à la position $i• addslashes($str) : déspécialise les caractères spéciaux • ord($char) : retourne la valeur ASCII du caractère $char

Page 29: PHP et MySQL

Les structures de contrôle

La syntaxe des structures de contrôle est la même que celle en langage C.

Structures conditionnellesif( condition1 )

{traitement 1

} elseif(condition 2-1)

{traitement 2-1

} else

{traitement 2-2

}

Page 30: PHP et MySQL

Les structures de contrôle

Structures conditionnelles – suite - switch( paramètre_index ) {

case valeur 1 : { traitement 1 } breakcase valeur 2 : { traitement 2 } break…default : { traitement par défaut }

}

Structures de bouclesfor( $i=$n ; $i<$m ; $i++ ) {

traitement}

Page 31: PHP et MySQL

Les structures de contrôle

Structures de boucleswhile( condition ) {

traitement}

do {

traitement} while( condition )

Page 32: PHP et MySQL

Les structures de contrôle

L’instruction break permet de quitter prématurément une boucle.Exemple :while($nbr < 10) {

echo $nbr.’’<br>’’;if($nbr == 5)

break;$nbr++;

}

L’instruction continue permet d’ignorer le traitement associé à une valeur de la boucle

Exemple :for($i=1; $i<=10; $i++) {

if($i==5)continue;

echo $i;}

Page 33: PHP et MySQL

Les tableaux

La fonction array() permet de créer des tableaux dynamiques qui seront exploités par les scripts PHP. Un tableau array est temporaire et ne reste généré que le temps du déroulement du script.

Les tableaux array servent souvent à stoker les données provenant d’une base de données en attendant le traitement. Elles permettent aussi aux fonctions de retourner plusieurs résultats au lieu d’une seule.

Remarque: les tableaux dynamiques ou arrays n'ont rien à voir avec les

tableaux HTML, qui servent à la mise en forme des données de la page Web.

Page 34: PHP et MySQL

Les tableaux

Pour initialiser un tableau on utilise plusieurs méthodes:

Méthode 1: (classique)$tableau= array($val1,$val2,$val3,…);

Exemple:$tab=array(‘’ENSA’’,2007,’Marrakech’);dans ce cas $tab[0]=‘’ENSA’’

$tab[1]=2007 $tab[2]=‘Marrakech’

Méthode 2: (initialisation directe)$tableau[0]=$val0;$tableau[1]=$val1;$tableau[10]=$val10; …

Page 35: PHP et MySQL

Les tableaux

Méthode 3: (initialisation directe implicite)$tableau[]=$val0; (sous-entend $tableau[0]=$val0) $tableau[]=$val1; (sous-entend $tableau[1]=$val1) $tableau[]=$val2; …

L’appel d’un élément du tableau se fait à l’aide de son indiceExemple:Echo $tab[0];

Parcours d’un tableau$i=0;while($i <= count($tab)) // count() retourne le nombre d’éléments{ echo $tab[$i].’’<br>’’; $i++;}

Page 36: PHP et MySQL

Les tableaux

Parcours d’un tableauLa méthode la plus simple pour parcourir un tableau consiste à

l’utilisation de la boucle foreachLa syntaxe est la suivante:

foreach($tableau as $element) { traitement;}La variable $element prend pour valeurs successives tous les

éléments du tableau nommé $tableau.Exemple:foreach($tab as $elem) { echo $elem.’’<br>’’;}

Page 37: PHP et MySQL

Les tableaux

Fonctions manipulant les tableauxcount(), sizeof() : retournent le nombre d’éléments du tableauin_array($var,$tab) : dit si la valeur de $var existe dans le tableau $tablist($var1,$var2…) : transforme un tableau en liste de variables.range($i,$j) : retourne un tableau contenant un intervalle de valeursshuffle($tab) : mélange les éléments d’un tableausort($tab) : trie alphanumérique les éléments du tableaursort($tab) : trie alphanumérique inverse les éléments du tableauimplode($str,$tab), join : retournent une chaîne de caractères contenant

les éléments du tableau $tab joints par la chaîne de jointure $strexplode($delim,$str) : retourne un tableau dont les éléments proviennent

de la chaîne $str et dont le délimiteur est $delimarray_merge($tab1,$tab2,$tab3…) : concatène les tableaux passés en

argumentsarray_rand($tab) : retourne un élément du tableau au hasard

Page 38: PHP et MySQL

Tableaux associatifs

Dans un tableau associatif on associe à chacun de ses éléments une clé dont la valeur est de type chaîne de caractères.

L’initialisation d’un tableau associatif est similaire à celle d’un tableau normal.

Exemple 1 : $personne = array(‘’Nom’’ => ‘’César’’, ‘’Prénom’’ => ‘’Jules’’);

Exemple 2 :$personne[‘’Nom’’] = ‘’César’’;$personne[‘’Prénom’’] = ‘’Jules’’;

Ici à la clé ‘’Nom’’ est associée la valeur ‘’César’’.

Page 39: PHP et MySQL

Tableaux associatifs

Parcours d’un tableau associatif$personne = array(‘’Nom’’ => ‘’César’’, ‘’Prénom’’ => ‘’Jules’’);

Exemple 1 :foreach($personne as $elem) { echo $elem;}Ici on accède directement aux éléments du tableau comme c’est le

cas pour les tableaux indexés

Exemple 2 :foreach($personne as $key => $elem) { echo ‘’$key : $elem’’;}Ici on accède simultanément aux clés et aux éléments.

Page 40: PHP et MySQL

Tableaux associatifs

Quelques fonctionsarray_count_values($tab) : retourne un tableau associatif contenant

les valeurs du tableau $tab comme clés et leurs fréquence comme valeur (utile pour évaluer les redondances)

array_keys($tab) : retourne un tableau contenant les clés du tableau associatif $tab

array_values($tab) : retourne un tableau contenant les valeurs du tableau associatif $tab

array_search($val,$tab) : retourne la clé associée à la valeur $val

L’élément d’un tableau peut être un autre tableau.

Les tableaux associatifs permettent de préserver une structure de données.

Page 41: PHP et MySQL

Tableaux associatifs

Quelques fonctionsreset($tab) : place le pointeur sur le premier élémentcurrent($tab) : retourne la valeur de l’élément courantnext($tab) : place le pointeur sur l’élément suivantprev($tab) : place le pointeur sur l’élément précédanteach($tab) : retourne la paire clé/valeur courante et avance le pointeur

Exemple :$colors = array(‘’red’’, ’’green’’, ’’blue’’);$nbr = count($colors);reset($colors);for($i=1; $i<=$nbr; $i++) {

echo current($colors).’’<br>’’;next($colors);

}

Page 42: PHP et MySQL

Les fonctions

Une fonction est un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal.

Comme tout langage de programmation. PHP permet l’écriture des fonction.

La syntaxe est la suivante:

function ma_fonction($argument1, $argument2,…){Liste des instructions;Return ($valeur_de_retour);}

Une fonction peut ne pas avoir de valeurs d’entrée (arguments) ou encore retourner de valeurs (le cas d’une fonction d’affichage de message d’erreur).

Page 43: PHP et MySQL

Les fonctions

Variable locale et variable globale d’une fonctionToute variable déclarée au sein d’une fonction est de portée locale de

cette fonction. Elle n’est pas reconnue dans le reste du programme.

global permet de travailler sur une variable de portée globale au programme. Le tableau associatif $GLOBALS permet d’accéder aux variables globales du script ($GLOBALS[‘’var’’] accède à la variable $var).

Exemple :function change() {

global $var; // définit $var comme globale$GLOBALS[‘’toto’’] ++; // incrémente la variable globale $toto$var++; // cela sera répercuté dans le reste du programme

}

Page 44: PHP et MySQL

Les fonctions

On peut donner une valeur par défaut aux arguments lors de la déclaration de la fonction.

Exemple :function Set_Color($color=‘’black’’) {

global $car;$car[‘’color’’] = $color;

}

Forcer le passage de paramètre par référence Exemple : function change(&$var) { // force le passage par référence

$var += 100; // incrémentation de +100}$toto = 12; // $toto vaut 12change($toto); echo $toto; // $toto vaut 112

Page 45: PHP et MySQL

Les fonctions

Même sans paramètre, un entête de fonction doit porter des parenthèses ( ). Les différents arguments sont séparés par une virgule et le corps de la fonction est délimité par des accolades { }.

Quelques exemples :function afficher($str1, $str2) { // passage de deux paramètres

echo ‘’$str1, $str2’’;}

function bonjour() { // passage d’aucun paramètreecho ‘’Bonjour’’;

}

function GetColor() { // retour d’une variable return ‘’black’’;}

Page 46: PHP et MySQL

Les fonctions

En version 3 du PHP (version interprétée), une fonction ne peut être appelée qu’après sa définition. En version 4 et 5 (compilées) une fonction peut être appelée avant sa définition.

Exemple :function f1() { // définition de la fonction f1

echo ‘’fonction f1…’’;}f1(); // appel de la fonction f1 définie plus hautf2(); // appel de la fonction f2 pas encore définiefunction f2() { // définition de la fonction f2

echo ‘’fonction f2’’;}

Cet exemple affichera : fonction f1…fonction f2!.

Page 47: PHP et MySQL

Les fonctions

Il est possible de faire retourner plusieurs valeurs d’une fonction en utilisant les tableaux ayant pour éléments les variables à retourner. Dans l’appel de la fonction, il faudra alors utiliser la procédure list() qui prend en paramètre les variables à qui ont doit affecter les valeurs retournées. On affecte à list() le retour de la fonction.

Exemple :function trigo($nbr) {

return array(sin($nbr), cos($nbr), tan($nbr)); // retour d’un // tableau

}$r = M_PI;list($a, $b, $c) = trigo($r); /* affectation aux variables $a,$b

et $c des éléments du tableau retourné par la fonction trigo */

Page 48: PHP et MySQL

Les inclusions

On peut inclure dans un script PHP le contenu d’un autre fichier.require insert dans le code le contenu du fichier spécifié même si ce

n’est pas du code php. ( équivalent au préprocesseur #include du C )

Syntaxe:require(‘’fichier.php’’);

include évalue et insert à chaque appel (même dans une boucle) le contenu du fichier passé en argument.

Syntaxe:include(‘’fichier.php’’);

Les inclusions sont très utiles lors de l’appel d’une base de donnée. Les paramètres de connexions sont stockés sur un fichiers à part.

Page 49: PHP et MySQL

Arrêt prématuré

Pour stopper prématurément un script, il existe deux fonctions.die arrête un script et affiche un message d’erreur dans le

navigateur.

Exemple :if(mysql_query($requette) == false)

die(‘’Erreur de base de données à la requête’’);

exit l’arrête aussi mais sans afficher de message d’erreur.

Exemple :function mafonc() {

exit();}

Ces fonctions stoppent tout le script et pas seulement le bloc en cours.

Page 50: PHP et MySQL

Les sessions

Les sessions permettent le passage des variables (variables de session) d’une page à une autre tout au cours de la visite du site web.

Les variables de session ne sont pas visibles dans l’URL et peuvent être de types différents (tableau, float…).

Cette méthode permet de conserver les paramètres de connexions d’un visiteur et conserver ses choix (sauvegarder son panier e-commerce par exemple)

Les informations de sessions sont conservées en local sur le serveur tandis qu’un identifiant de session est posté sous la forme d’un cookie chez le client.

Page 51: PHP et MySQL

Les sessions - suite -

Fonctionssession_start() : démarre une sessionsession_destroy() : détruit les données de session et ferme la session

session_start() doit être présente sur toutes les pages qui utilisent les variables de sessions et doit être déclarée avant tout envoie au navigateur du client.

Une variable de session est manipulée de la façon suivante:

$_SESSION[’’nom_de_la_variable’’]

Exemple:$_SESSION[’’etablissement’’]=’’ENSA’’;

Page 52: PHP et MySQL

Variables d’environnement

Les variables d'environnement sont, comme leur nom l'indique, des données permettant au programme d'avoir des informations sur son environnement. L'environnement dans le cas du script PHP est :

• Le client• Le serveur

Les variables d’environnement permettent d'avoir des informations sur le type de serveur, l’emplacement de la page en cours (l’arborescence sur le serveur), la date à laquelle le script a été appelé, l'adresse IP du client, nom du hôte client, le type de navigateur du client, la page qui a renvoyé le navigateur au script en cours…

L’exécution de la fonction phpinfo() permet de lister les variables d’environnement supportés par le serveur

Page 53: PHP et MySQL

Variables d’environnement - suite -

Quelques variables$HTTP_HOST: nom d'hôte de la machine du client $HTTP_REFERER: URL de la page qui a appelé le script PHP (cette

variable permet de connaître le site web qui a renvoyé le client sur la page en cours: le moteur de recherche utilisé par exemple)

$HTTP_USER_AGENT: permet d'avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d'exploitation.

$REMOTE_ADDR: contient l’adresse IP du client appelant le script $DOCUMENT_ROOT: chemin de la page en cours sur le serveur$SERVER_ADDR: contient l’adresse IP du serveur$DATE_GMT: date et heure actuelle au format GMT$DATE_LOCAL: date et heure actuelle au format local

Pour afficher la valeur de la variable d’environnement:echo getenv(’’nom_de_la_variable’’)

Page 54: PHP et MySQL

Constantes PHP

Quelques constantes prédéfinies du PHP :__FILE__ : nom du fichier en cours__LINE__ : numéro de ligne en coursPHP_VERSION : version de PHPPHP_OS : nom du système d'exploitation qui est utilisé par la

machine qui fait tourner le PHPTRUE : la valeur vraie booléenneFALSE : la valeur faux booléenne

Exemples :$test = true;echo __file__, __line__;

Page 55: PHP et MySQL

Les fichiers I

Les fichiers en PHP sont très souvent utilisées pour stocker les données. Les bases de données sont encore plus puissantes à ce niveau, mais il est parfois ennuyeux de les utiliser pour accueillir certaines formes de données. Exemple : un compteur de visite

Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La plus simple est la fonction file_get_contents(). Elle prend comme

paramètre le nom du fichier et elle affecte son contenu à une variable type chaîne de caractère.

Exemple: Le fichier test.txt contient le texte suivant: Salut, c’est un test…Pour afficher le contenu de ce fichier sur une page web:$str=file_get_contents(’’test.txt’’);echo $str; // affiche: Salut c’est un test…

Page 56: PHP et MySQL

Les fichiers II

La manipulation de fichier se fait grâce à un identifiant de fichier.

Quelques fonctions:fopen($file ,$mode) : ouverture du fichier identifié par son nom $file

et dans un mode $mode particulier, retourne un identificateur de fichier $fp ou FALSE si échec

fclose($fp) : ferme le fichier identifié par le $fpfgets($fp, $length) : lit une ligne de $length caractères au maximum.

Si la longueur de la ligne est inférieur à $length, lit jusqu’à la fin de la ligne.

fputs($fp, $str) : écrit la chaîne $str dans le fichier identifié par $fpfgetc($fp) : lit un caractèrefeof($fp) : teste la fin du fichier retourne TRUE ou FALSEfile_exists($file) : indique si le fichier $file existe dans le dossier

courant. Retourne TRUE ou FALSE. Le nom du fichier peut être une arborescence de répertoire.

Page 57: PHP et MySQL

Les fichiers III

Quelques fonctions - suite - :filesize($file) : retourne la taille du fichier $file en octetfiletype($file) : retourne le type du fichier $fileunlink($file) : détruit le fichier $filecopy($source, $dest) : copie le fichier $source vers $destreadfile($file) : affiche le fichier $filerename($old, $new) : renomme le fichier $old en $newfseek($fp,$pos) : place le pointeur du fichier identifié par $fp à la

position $pos.

Modes d’ouverture de fichiers:'r' lecture seule 'r+' lecture et écriture 'w' création et écriture seule'w+‘ création et lecture/écriture

Page 58: PHP et MySQL

Les fichiers IV

Exemple typique d’affichage du contenu d’un fichier :

<?php $file = ‘’fichier.txt’’ ;if( $fd = fopen($file, ‘’r’’)) { // ouverture du fichier en

lecturewhile ( ! feof($fd) ) { // teste la fin de fichier

$str .= fgets($fd, 1024); /* lecture jusqu’à fin de ligne où des 1024 premiers caractères */} fclose ($fd); // fermeture du fichierecho $str; // affichage

} else {die(‘’Ouverture du fichier <b>$file</b> impossible.’’);

}?>

Page 59: PHP et MySQL

Les fichiers V

La fonction fopen permet d’ouvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi d’ouvrir des ressources avec les protocols HTTP ou FTP. Elle renvoie FALSE si l’ouverture échoue.

Exemples :$fp = fopen(‘’../docs/rapport.txt’’, ‘’r’’); $fp = fopen(‘’http://www.php.net/’’,’’r’’); $fp = fopen(’’ftp://user:[email protected]/’’, ‘’w’’);

Page 60: PHP et MySQL

Dates et heures I

Les fonctions de dates et heures sont très utilisées sur internent. En PHP il existe plusieurs fonctions qui permettent de manipuler les dates.

Quelques fonctions :date(‘’$format’’) : retourne une chaîne de caractères contenant la

date et/ou l’heure locale au format spécifiégetdate() : retourne un tableau associatif contenant la date et l’heurecheckdate($month, $day, $year) : vérifie la validité d’une datemktime ($hour, $minute, $second, $month,$day, $year) : retourne le

timestamp UNIX correspondant aux arguments fournis c’est-à-dire le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970) et le temps spécifié

time() : retourne le timestamp UNIX de l’heure locale

Page 61: PHP et MySQL

Dates et heures II

Exemple 1 :echo date(''Y-m-d H:i:s'');/* affiche la date au format MySQL : ‘2007-04-09 14:30:29’ */

Exemple 2 :if(checkdate(12, 31,2001))

echo ‘’Cette date est valide’’;

Exemple 3 :$aujourdhui = getdate();$mois = $aujourdhui['mon'];$jour = $aujourdhui['mday'];$annee = $aujourdhui['year'];echo ''$jour/$mois/$annee''; // affiche ‘12/3/2007’

Page 62: PHP et MySQL

Dates et heures III

Les formats pour date

d Jour du mois sur deux chiffres [01..31] j Jour du mois sans les zéros initiaux l Jour de la semaine textuel en version longue et en anglaisD Jour de la semaine textuel en trois lettres et en anglaisW Jour de la semaine numérique [0..6] (0: dimanche)z Jour de l'année [0..365]m Mois de l'année sur deux chiffres [01..12] n Mois sans les zéros initiauxF Mois textuel en version longue et en anglaisM Mois textuel en trois lettresY Année sur 4 chiffresy Année sur 2 chiffresh Heure au format 12h [01..12] g Heure au format 12h sans les zéros initiaux

Page 63: PHP et MySQL

Dates et heures III

Les formats pour date - suite –

H Heure au format 24h [00..23] G Heure au format 24h sans les zéros initiauxi Minutes [00..59]s Secondes [00.59]a am ou pmA AM ou PML Booléen pour savoir si l'année est bissextile (1) ou pas (0)S Suffixe ordinal anglais d'un nombre (ex: nd pour 2)t Nombre de jour dans le mois donné [28..31]Z Décalage horaire en secondes [-43200..43200]

Page 64: PHP et MySQL

Dates et heures IV

Les clés du tableau associatif retourné par getdate

seconds : secondesminutes : minuteshours : heuresmday : jour du moiswday : jour de la semaine, numériquemon : mois de l'année, numériqueyear : année numériqueyday : jour de l'année numériqueweekday : jour de la semaine, textuel complet en anglaismonth : mois textuel complet en anglais

Page 65: PHP et MySQL

Expressions régulières I

Les expressions régulières sont un outil puissant pour la recherche de motifs dans une chaîne de caractères.

Fonctions ereg($motif, $str) : teste l’existence du motif $motif dans la chaîne

$strereg_replace($motif, $newstr, $str) : remplace les occurrences de

$motif dans $str par la chaîne $newstrsplit($motif, $str) : retourne un tableau des sous-chaînes de $str

délimitées par les occurrences de $motif (semblable à explode())

Les fonctions eregi, eregi_replace et spliti sont insensibles à la casse (c’est-à-dire ne différencient pas les majuscules et minuscules).

Exemple if (eregi(‘’Paris’’, $adresse))

echo ‘’Vous habitez Paris.’’;

Page 66: PHP et MySQL

Expressions régulières II

Les motifs peuvent être très complexes et contenir des caractères spéciaux.

Les caractères spéciaux

[abcdef] : intervalle de caractères, teste si l’un d’eux est présent[a-f] : plage de caractères, teste la présence de l’un des caractères

compris entre a et f^ : le motif suivant doit apparaître en début de chaîne\^ : recherche du caractère ’^’ que l’on déspécialise par l’antislash . : remplace un caractère* : remplace plusieurs caractères? : rend facultatif le caractère qu’il précède$ : le motif précédant doit apparaître en fin de chaîne

Page 67: PHP et MySQL

Expressions régulières III

Exemples de motifs

‘’[A-Z]’’ : recherche toutes les majuscules‘’[a-zA-Z]’’ : recherche toutes les lettres de l’alphabet minuscules ou

majuscules‘’^Le ’’ : toute chaîne commençant par le mot ‘’Le ‘‘ suivi d’un

espace‘’\.com$’’ : toute chaîne se terminant par ’’.com’’ (déspécialise le

point)

Exemples :if ( ereg(‘’^.*@wanadoo\.fr’’, $email) ) {

echo ‘’Vous êtes chez Wanadoo de France Télécom.’’;}

Page 68: PHP et MySQL

Expressions régulières IV

Il existe des séquences types :[[:alnum:]] : [A-Za-z0-9] – caractères alphanumériques[[:alpha:]] : [A-Za-z] – caractères alphabétiques[[:digit:]] : [0-9] – caractères numériques[[:blank:]] : espaces ou tabulation[[:xdigit:]] : [0-9a-fA-F] – caractères hexadécimaux[[:graph:]] : caractères affichables et imprimables[[:lower:]] : [a-z] – caractères minuscules[[:upper:]] : [A-Z] – caractères majuscules[[:punct:]] : caractères de ponctuation[[:space:]] : tout type d’espace[[:cntrl:]] : caractères d’échappement

Page 69: PHP et MySQL

Cryptage

crypt($str,$salt) : Retourne une chaîne de caractères. Crypte la chaîne de caractères $str. La chaîne optionnelle $salt sert de base au cryptage. Cet argument optionnel est appelé « grain de sel ». L’algorythme de cryptage utilisé par PHP n’est a priori pas défini (il peut varier d’un système à un autre), mais c’est en général le DES standard ou bien encore MD5. Le système utilisé est injectif, c’est-à-dire qu’il n’existe pas d’algorithme symétrique pour décrypter la chaîne codée résultante.

md5($str) : Crypte la chaîne $str en utilisant la méthode MD5.crc32($str) : Retourne la somme de vérification de redondance

cyclique (32 bit) de la chaîne $str. Cette valeur sert généralement à vérifier l'intégrité de données transmises.

Exemple:$pass_crypt=md5($_POST[‘’pass’’]); //code en md5 le mot de passe

//passé en formulaire par POST.

Page 70: PHP et MySQL

Chargement de fichiers I

Les formulaires permettent de transmettre des informations sous forme de chaînes de caractères. Ils peuvent aussi permettre à un internaute de transmettre un fichier vers le serveur.

La balise HTML suivante : <input type=‘’file’’> permet le chargement de fichiers. La balise FORM doit nécessairement posséder l’attribut ENCTYPE de valeur ‘’multipart/form-data’’. La méthode utilisée sera POST. De plus, il est utile d’imposer au navigateur une taille de fichier limite par le paramètre MAX_FILE_SIZE dont la valeur numérique a pour unité l’octet.

Exemple <form action=‘’index.php’’ method=‘’POST’’ ENCTYPE=‘’multipart/form-data’’><input type=‘’hidden’’ name=‘’MAX_FILE_SIZE’’ value=‘’1024000’’><input type=‘’file’’ name=‘’mon_fichier’’><br><input type=‘’submit’’ value=‘’envoyer’’></form>

Page 71: PHP et MySQL

Chargement de fichiers II

Pour récupérer le fichier, il faut utiliser la variable d’environnement $HTTP_POST_FILES qui est un tableau associatif dont les champs sont les noms des champs HTML file du formulaire. Par exemple : $HTTP_POST_FILES[‘mon_fichier‘] où mon_fichier est le nom donné au champs du formulaire HTML de type file.

La variable $HTTP_POST_FILES[‘mon_fichier‘] est elle aussi un tableau associatif possédant les champs suivants :

- name: nom du fichier chez le client- tmp_name: nom temporaire du fichier sur le serveur- size: taille du ficher en octets- type: type mime du ficher (txt, jpeg…)

Exemple:$nom_fichier = $HTTP_POST_FILES[‘’nom_fichier’’][‘’name’’];Remarque:Pour la version 4 et 5 du PHP la syntaxe $HTTP_POST_FILES[] peut se

réduire à $_FILES[]

Page 72: PHP et MySQL

Chargement de fichiers IV

Il est important de vérifier avec is_file() (ou file_exists())si un fichier du même nom existe déjà sur le serveur à l’emplacement où on veut copier le nouveau fichier. On pourra supprimer l’ancien fichier avec unlink() (qui ne fonctionne pas avec tous les serveurs fonctionnant sous Windows).

Même si le paramètre MAX_FILE_SIZE est inclus dans le formulaire, il est important de vérifier la taille du fichier réceptionné.

La vérification du type MIME du fichier est également importante dans le cas où on ne souhaite réceptionner que des types de fichiers bien particuliers (des images GIF, JPEG ou PNG par exemple).

Page 73: PHP et MySQL

Chargement de fichiers III

La durée de vie du fichier temporaire sur le serveur est limitée au temps d’exécution du script. Pour pouvoir exploiter ultérieurement le fichier sur le serveur, il faut le sauvegarder dans un répertoire et lui donner un vrai nom.

Si aucun fichier n’a été envoyé par le client, la variable $mon_fichier vaudra la chaîne de caractères : ‘’none’’ ou bien ‘‘’’ (chaîne vide).

Exemple:<input type=‘’file’’ name=‘’fichier’’><input type=‘’hidden’’ name=‘’max_file_size’’ value=‘’1024000’’><input type=‘’submit’’ value=‘’Valider l’envoie du fichier’’><?phpecho $HTTP_POST_FILES[‘’fichier’’][‘’name’’].’’<br>’’;echo $HTTP_POST_FILES[‘’fichier’’][‘’tmp_name’’] .’’<br>’’;echo $HTTP_POST_FILES[‘’fichier’’][‘’size’’] .’’<br>’’;echo $HTTP_POST_FILES[‘’fichier’’][‘’type’’] .’’<br>’’;?>

Page 74: PHP et MySQL

Chargement de fichiers IV

On peut charger simultanément plusieurs fichiers en utilisant dans le formulaire HTML des champs file de noms différents.

Exemple :<input type=‘’file’’ name=‘’mon_fichier’’><input type=‘’file’’ name=‘’mon_autre_fichier’’>

A la réception, chaque fichier est traité individuellement

Exemple :$file = $HTTP_POST_FILES[‘mon_fichier’];// puis faire le traitement vu précédemment$file = $HTTP_POST_FILES[‘mon_autre_fichier’];// puis refaire encore le même traitement

Page 75: PHP et MySQL

Mail I

La fonction mail() envoie un message électronique.

Syntaxe : mail($destinataire, $sujet, $message, $entêtes);

Exemple : $message = ‘’Rendez-vous à l’ENSA de Marrakech lundi 8 Avril à

16h.’’;mail(‘’[email protected]’’, ‘’Rendez-vous’’, $message);

Les arguments obligatoires sont le destinataire, le sujet du message ainsi que le message proprement dit. Les entêtes et paramètres additionnels sont facultatifs.

Note: cette fonction ne marche que si un programme de messagerie électronique (appelé « mailer ») est préalablement installé sur le serveur.

Page 76: PHP et MySQL

Mail II

Exemple

<?php$destinataire = ‘’etudiants <[email protected]>, ‘’; $destinataire.= ‘’enseignants<[email protected]>’’;$sujet = ‘’La Semaine Nationale de la Science’’;$message = ‘’La SNS 2007 est prévue la première semaine de Mai’’;$message .= ‘’Cette date n’est pas définitive’’;$entêtes = ‘’From: ucam <[email protected]>’’;mail($destinataire, $sujet, $message, $entêtes);?>

La fonction mail() renvoie true si l’envoie du message a été effectué avec succès sinon elle renvoie false.

Page 77: PHP et MySQL

Mail III

Quelques entêtes :

From: [email protected]: PHP\n // maileurX-Priority: 1\n // Message urgent!Return-Path: [email protected] // @ retour pour erreursCc: [email protected] // Champs CCReply-To: <[email protected]> // @ de retour

Format général des entêtes :Nom-Entete: valeur

Page 78: PHP et MySQL

MySQL

2ème partie

Page 79: PHP et MySQL

Introduction

MySQL dérive directement de SQL (Structured Query Language) qui est un langage de requête vers les bases de données exploitant le modèle relationnel.

Il en reprend la syntaxe mais n’en conserve pas toute la puissance puisque de nombreuses fonctionnalités de SQL n’apparaissent pas dans MySQL (clés étrangères par exemple)

Le serveur de base de données MySQL est très souvent utilisé avec le langage de création de pages web dynamiques PHP.

Serveur

Base de DonnéesMySQL

Script PHP

Client

Page HTML

RequêtesSQL HTTP

Page 80: PHP et MySQL

Théorie de bases de données I

Domaine : ensemble des valeurs d’un attribut.Relation : C’est en fait un tableau à deux dimensions dont les

colonnes correspondent aux domaines et dont les lignes contiennent des tuples. On associe un nom à chaque colonne.

Attribut : une colonne d’une relation, caractérisé par un nom.Tuple : liste des valeurs d’une ligne d’une relation.

Page 81: PHP et MySQL

Théorie de bases de données II

Une relation est une table comportant des colonnes (appelées aussi attributs) dont le nom et le type caractérisent le contenu qui sera inséré dans la table.

Imaginons que l’on veuille stocker dans notre base de données notre carnet d’adresses. On va donc créer la relation Personne qui aura pour attributs : nom, prénom, adresse, téléphone. Autrement dit, c’est une table nommée Personne possédant les colonnes : nom, prénom, adresse, téléphone.

Les lignes que contiendra cette table seront appelées enregistrements ou tuples.

nom prénom adresse téléphone

ENSA Marrakech Guéliz-Marrakech 024242424

Page 82: PHP et MySQL

Algèbre relationnelle I

L’algèbre relationnelle regroupe toutes les opérations possibles sur les relations. Voici la liste des opérations possibles :

Projection : on ne sélectionne qu’un ou plusieurs attributs d’une relation (on ignore les autres). Par exemple n’afficher que les colonnes nom et prénom de la table Personnes.

Jointure : on fabrique une nouvelle relation à partir de 2 ou plusieurs autres en prenant comme pivot 1 ou plusieurs attributs. Par exemple, on concatène la table du carnet d’adresse et celle des inscrits à la bibliothèque en fonction du nom de famille.

Sélection : on sélectionne tous les tuples ou bien seulement une partie en fonction de critères de sélection qui portent sur les valeurs des attributs. Par exemple n’afficher que les lignes de la table Personnes qui vérifient la condition suivante : le nom ne commence pas par la lettre ‘C’.

Cette algèbre est facilement possible avec les commandes de MySQL (SELECT… FROM… WHERE…)

Page 83: PHP et MySQL

Algèbre relationnelle II

Projection

SELECT champ1,champ2,champ3 FROM table

Jointure

SELECT table1.champ_a, table2.champ_bFROM table1, table2WHERE table1.champ_pivot = table2.champ_pivot

Sélection

SELECT *

FROM table

WHERE champ_a = ‘’valeur’’

Page 84: PHP et MySQL

Syntaxe MySQL

Type des attributs

Les propriétés des objets peuvent être de types différents : - Nombre entier signé ou non (quantité commandée, âge) - Nombre à virgule (prix, taille) - Chaîne de caractères (nom, adresse, article) - Date et heure (date de naissance, heure de parution)

Il s’agit de choisir le plus adapté aux besoins.

Ces types requièrent une plus ou moins grande quantité de données à stocker. Par exemple, ne pas choisir un LONGTEXT pour stocker un prénom mais plutôt un VACHAR(40) !

Page 85: PHP et MySQL

Type des attributs: entiers

nom borne inférieure borne supérieure

TINYINT -128 127

TINYINT UNSIGNED 0 255

SMALLINT -32768 32767

SMALLINT UNSIGNED 0 65535

MEDIUMINT -8388608 8388607

MEDIUMINT UNSIGNED 0 16777215

INT * -2147483648 2147483647

INT * UNSIGNED 0 4294967295

BIGINT -9223372036854775808 9223372036854775807

BIGINT UNSIGNED 0 18446744073709551615

(*) : INTEGER est un synonyme de INTUNSIGNED permet d’avoir un type non signé

Page 86: PHP et MySQL

Type des attributs: flottants

Les flottants – dits aussi nombres réels – sont des nombres à virgule. Contrairement aux entiers, leur domaine n’est pas continu du fait de l’impossibilité de les représenter avec une précision absolue.

nom domaine négatif :borne inférieureborne supérieure

Domaine positif :borne inférieureborne supérieure

FLOAT -3.402823466 E+38-1.175494351 E-38

1.175494351 E-38 3.402823466 E+38

DOUBLE* -1.7976931348623157 E+308-2.2250738585072014 E-308

2.2250738585072014 E-3081.7976931348623157 E+308

(*) : REAL est un synonyme de DOUBLE

Page 87: PHP et MySQL

Type des attributs: chaînes I

nom longueur

CHAR(M) Chaîne de taille fixée à M, où 1<M<256, complétée avec des espaces si nécessaire.

CHAR(M) BINARY Idem, mais insensible à la casse lors des tris et recherches.

VARCHAR(M) Chaîne de taille variable, de taille maximum M, où 1<M<256, complété avec des espaces si nécessaire.

VARCHAR(M) BINARY Idem, mais insensible à la casse lors des tris et recherches.

TINYTEXT Longueur maximale de 255 caractères.

TEXT Longueur maximale de 65535 caractères.

MEDIUMTEXT Longueur maximale de 16777215 caractères.

LONGTEXT Longueur maximale de 4294967295 caractères.

DECIMAL(M,D) * Simule un nombre flottant de D chiffres après la virgule et de M chiffres au maximum. Chaque chiffre ainsi que la virgule et le signe moins (pas le plus) occupe un caractère.

(*) : NUMERIC est un synonyme de DECIMAL

Page 88: PHP et MySQL

Type des attributs: chaînes II

Les types TINYTEXT, TEXT, MEDIUMTEXT et LONGTEXT peuvent être judicieusement remplacés respectivement par TINYBLOB, BLOB, MEDIUMBLOB et LONGBLOB.

Ils ne diffèrent que par la sensibilité à la casse qui caractérise la famille des BLOB. Alors que la famille des TEXT sont insensibles à la casse lors des tris et recherches.

Les VARCHAR, TEXT et BLOB sont de taille variable. Alors que les CHAR et DECIMAL sont de taille fixe.

Page 89: PHP et MySQL

Type des attributs: dates et heures

nom description

TIMESTAMP(2) AA

TIMESTAMP(4) AAMM

TIMESTAMP(6) AAMMJJ

TIMESTAMP(8) AAAAMMJJ

TIMESTAMP(10) AAMMJJHHMM

TIMESTAMP(12) AAMMJJHHMMSS

TIMESTAMP(14) AAAAMMJJHHMMSS

nom description

DATE Date au format anglophone AAAA-MM-JJ.

DATETIME Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS.

TIMESTAMP Affiche la date et l’heure sans séparateur : AAAAMMJJHHMMSS.

TIMESTAMP(M) Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers caractères de TIMESTAMP.

TIME Heure au format HH:MM:SS.

YEAR Année au format AAAA.

En cas d’insertion d’un enregistrement en laissant vide un attribut de type TIMESTAMP, celui-ci prendra automatiquement la date et heure de l’insertion. Contrairement à Unix (où le timestamp est le nombre de secondes écoulées depuis le 1er

janvier 1970), en MySQL, il est une chaîne de format comme indiqué ci-contre.

Page 90: PHP et MySQL

Identificateurs

Les noms des bases, relations et attributs sont constitués de caractères alphanumériques et des caractères _ et $.

Un nom comporte au maximum 64 caractères.Comme les bases de données et les relations sont codées

directement dans le système de fichiers, la sensibilité à la casse de MySQL dépend de celle du système d’exploitation sur lequel il repose. Sous Windows, la casse n’a pas d’importance ; alors que sous Unix, elle en a !

Le point . est un caractère réservé utilisé comme séparateur entre le nom d’une base et celui d’une relation, entre le nom d’une relation et celui d’un attribut.

Exemple SELECT base1.table25.attribut5FROM base1.table25

Page 91: PHP et MySQL

Créer une relation

La création d’une relation utilise la commande CREATE TABLE selon la syntaxe suivante :

CREATE [temporary] TABLE nom_relation (nom_attribut TYPE_ATTRIBUT OPTIONS…

)

TEMPORARY donne pour durée de vie à la table : le temps de la connexion de l’utilisateur au serveur, après, elle sera détruite. En l’absence de cette option, la table sera permanente à moins d’être détruite par la commande DROP TABLE.

A l’intérieur des parenthèses, il sera listé tous les attributs, clés et indexs de la table.

Page 92: PHP et MySQL

Clé primaire

Pour des raisons pratiques, nous souhaitons pouvoir associer à chacun des enregistrements de la relation un identifiant numérique unique qui puise être passé en paramètre à nos scripts PHP.

Pour cela on rajoute un nouvelle attribut de type entier. Pour nous faciliter la tâche, cet entier ne devra pas être signé mais être suffisamment grand pour identifier tous nos enregistrements car destiné à un décompte (donc débute forcément à 1 et pas à -127 par exemple).

Une table contenant un carnet d’adresse ne devrait pas excéder plusieurs centaines de personnes. Ainsi un attribut de type SMALLINT UNSIGNED devrait faire l’affaire. Recommandé : id.

Cet attribut devra ne jamais être vide, il faut donc préciser l’option NOT NULL pour le forcer à prendre une valeur de son domaine (entre 0 et 65535).

Il devra aussi être unique, c’est-à-dire que deux enregistrements ne pourront pas avoir une valeur identique de id. Il faut alors faire la déclaration suivante : UNIQUE (id) à la suite de la liste des attributs.

Pour simplifier, on utilisera l’option PRIMARY KEY qui regroupe NOT NULL et UNIQUE en remplacement des deux dernières déclarations.

Et pour finir, il faut signifier que cette valeur doit s’incrémenter automatiquement à chaque insertion d’un enregistrement grâce à l’option AUTO_INCREMENT.

Page 93: PHP et MySQL

Attribut non nul

Considérons que l’on souhaite que certains attributs aient obligatoirement une valeur. On utilisera l’option NOT NULL.

Dans ce cas, si malgré tout, aucune valeur n’est fournie, la valeur par défaut – si elle est déclarée à la création de la relation – sera automatiquement affectée à cet attribut dans l’enregistrement.

Si aucune valeur par défaut n’est déclarée : - la chaîne vide ‘’’’ sera affectée à l’attribut s’il est de type chaîne de

caractères - la valeur zéro 0 s’il est de type nombre- la date nulle 0000-00-00 et/ou l’heure nulle 00:00:00 s’il est de type

date, heure ou date et heure.

Exempleadresse TINYTEXT NOT NULL

Au contraire, on utilisera l’option NULL si on autorise l’absence de valeur.

Page 94: PHP et MySQL

Valeur par défaut

Pour donner une valeur par défaut à un attribut, on utilise l’option DEFAULT.

Lors de l’ajout d’un enregistrement cette valeur sera affectée à l’attribut si aucune valeur n’est donnée.

Exemple‘téléphone’ DECIMAL(10,0) DEFAULT ‘0123456789’

Les attributs de type chaîne de caractères de la famille TEXT et BLOB ne peuvent pas avoir de valeur par défaut.

Page 95: PHP et MySQL

Attribut sans doublon

Pour interdire l’apparition de doublon pour un attribut, on utilise l’option UNIQUE.

Syntaxe: UNIQUE (liste des attributs)

Exemple: Pour interdire tout doublon de l’attribut nom :UNIQUE (nom)

Pour interdire les doublons sur l’attribut nom mais les interdire aussi sur ‘prénom’, tout en les laissant indépendants :UNIQUE (nom)UNIQUE (‘prénom’)

Pour interdire tout doublon à un ensemble d’attributs (tuple), on passe en paramètre à UNIQUE la liste des attributs concernés.

Exemple:Pour interdit tout doublon du couple (nom,prénom) :

UNIQUE(nom,prénom)

Page 96: PHP et MySQL

Supprimer une relation

La commande DROP TABLE prend en paramètre le nom de la table à supprimer. Toutes les données qu’elle contient sont supprimées et sa définition aussi.

Syntaxe

DROP TABLE relation

Exemple

DROP TABLE Personnes

Si on s’aperçoit qu’une relation a été mal définie au départ, plutôt que de la supprimer et de la reconstruire bien comme il faut, on peut la modifier très simplement. Cela évite de perdre les données qu’elle contient.

Page 97: PHP et MySQL

Modifier une relation

La création d’une relation par CREATE TABLE n’en rend pas définitives les spécifications. Il est possible d’en modifier la définition par la suite, à tout moment par la commande ALTER TABLE.

Voici ce qu’il est possible de réaliser :

- ajouter/supprimer un attribut

- créer/supprimer une clé primaire

- ajouter une contrainte d’unicité (interdire les doublons)

- changer la valeur par défaut d’un attribut

- changer totalement la définition d’un attribut

- changer le nom de la relation

Page 98: PHP et MySQL

Ajouter un attribut

Syntaxe ALTER TABLE relation ADD définition [ FIRST | AFTER attribut]

Ajoutons l’attribut fax qui est une chaîne représentant un nombre de 10 chiffres:ALTER TABLE Personnes ADD fax DECIMAL(10,0)

Nous aurions pu forcer la place où doit apparaître cet attribut. Pour le mettre en tête de la liste des attributs de la relation, il faut ajouter l’option FIRST en fin de commande. Pour le mettre après l’attribut ‘téléphone’, il aurait fallu ajouter AFTER ‘téléphone’.

Note : il ne doit pas déjà y avoir dans la relation un attribut du même nom !

Page 99: PHP et MySQL

Supprimer un attribut

Attention!! Supprimer un attribut implique la suppression des valeurs qui se

trouvent dans la colonne qui correspond à cet attribut, sauf à utiliser l’option.

SyntaxeALTER TABLE relation DROP attribut

ExempleALTER TABLE Personnes DROP prénom

Page 100: PHP et MySQL

Créer une clé primaire

La création d’une clé primaire n’est possible qu’en l’absence de clé primaire dans la relation.

SyntaxeALTER TABLE relation ADD PRIMARY KEY (attribut)

ExempleALTER TABLE Personnes ADD PRIMARY KEY (nom)

Page 101: PHP et MySQL

Supprimer une clé primaire

Comme une clé primaire est unique, il n’y a aucune ambiguïté lors de la suppression.

SyntaxeALTER TABLE relation DROP PRIMARY KEY

ExempleALTER TABLE Personnes ADD PRIMARY KEY

S’il n’y a aucune clé primaire lorsque cette commande est exécutée, aucun message d’erreur ne sera généré, la commande sera simplement ignorée.

Page 102: PHP et MySQL

Ajout d’une contrainte d’unicité

Si les valeurs déjà présentes dans la relation sont en contradiction avec cette nouvelle contrainte, alors cette dernière ne sera pas appliquée et une erreur sera générée.

SyntaxeALTER TABLE relation ADD UNIQUE (attributs)

Exemple pour interdire tout doublon sur l’attribut fax de la relation Personnes

ALTER TABLE Personnes ADD UNIQUE (fax)

Page 103: PHP et MySQL

Modifier la valeur par défaut d’un attribut

Pour changer ou supprimer la valeur par défaut d’un attribut. Attention aux types qui n’acceptent pas de valeur par défaut (les

familles BLOB et TEXT).

SyntaxeALTER TABLE relation ALTER attribut { SET DEFAULT valeur | DROP DEFAULT }

Changer sa valeur par défaut :ALTER TABLE Personnes ALTER ‘téléphone’ SET DEFAULT ‘9999999999’

Supprimer sa valeur par défaut :ALTER TABLE Personnes ALTER ‘téléphone’ DROP DEFAULT

Page 104: PHP et MySQL

Changer le nom de la relation

Syntaxe ALTER TABLE relation RENAME nouveau_nom

ExempleALTER TABLE Personnes RENAME Carnet

Cela consiste à renommer la table, et donc le fichier qui la stocke.

Page 105: PHP et MySQL

Ajouter un enregistrement I

Ajouter un enregistrement à une relation revient à ajouter une ligne à la table. Pour cela, pour chacun des attributs, il faudra en préciser la valeur. Si certaines valeurs sont omises, alors les valeurs par défauts définie lors de la création de la relation seront utilisées. Si on ne dispose pas non plus de ces valeurs par défaut, alors MySQL mettra 0 pour un nombre, ‘’’’ pour une chaîne, 0000-00-00 pour une date, 00:00:00 pour une heure, 00000000000000 pour un timestamp (si le champs poste la contrainte NOT NULL). Dans le cas où l’attribut porte la contrainte NULL (par défaut) alors la valeur par défaut de l’attribut – quelque soit sont type – sera la suivante : NULL.

Syntaxe d’une « insertion étendue »INSERT INTO relation(liste des attributs) VALUES(liste des valeurs)

ExempleINSERT INTO Personnes(nom,prénom) VALUES(‘Martin’,’Jean’)

REPLACE est un synonyme de INSERT, mais sans doublon.

Page 106: PHP et MySQL

Ajouter un enregistrement II

Syntaxe d’une « insertion standard »INSERT INTO relation VALUES (liste ordonnée des valeurs)

Cela impose que la liste des valeurs suivant le mot clé VALUES soit exactement celle définie dans la table et qu’elles soient dans l’ordre défini dans la définition de la table, sinon des erreurs seront produites.

Syntaxe d’une « insertion complète »INSERT INTO relation VALUES (1ère liste des valeurs), (2ème liste des

valeurs), (3ème liste des valeurs), …

Page 107: PHP et MySQL

Modifier un enregistrement

Pour modifier un ou des enregistrement(s) d’une relation, il faut préciser un critère de sélection des enregistrement à modifier (clause WHERE), il faut aussi dire quels sont les attributs dont on va modifier la valeur et quelles sont ces nouvelles valeurs (clause SET).

SyntaxeUPDATE relation SET attribut=valeur, … [ WHERE condition ]

ExempleUPDATE agenda SET téléphone=’012345678’ WHERE nom=‘ENSA’ AND prénom = ‘Marrakech’

Page 108: PHP et MySQL

Supprimer un enregistrement

Attention, la suppression est définitive !

SyntaxeDELETE FROM relation [ WHERE condition ]

ExempleDELETE FROM Personnes WHERE nom=‘Martin’ AND prénom=‘Marc’

Pour vider une table de tous ces éléments, ne pas mettre de clause WHERE. Cela efface et recrée la table, au lieu de supprimer un à un chacun des tuples de la table (ce qui serait très long).

ExempleDELETE FROM Personnes

Page 109: PHP et MySQL

Sélectionner des enregistrements I

Pour extraire de la base de données des informations, comme la liste des personnes d’un carnet d’adresse qui vivent à Marrakech.

Syntaxe généraleSELECT [ DISTINCT ] attributs

[ FROM relation ][ WHERE condition ][ GROUP BY attributs [ ASC | DESC ] ][ ORDER BY attributs ][ LIMIT [a,] b ]

ExempleSELECT nom,prénom FROM Personnes WHERE adresse LIKE ‘%Marrakech%’

Page 110: PHP et MySQL

Sélectionner des enregistrements II

Nom Description

SELECT Spécifie les attributs dont on souhaite connaître les valeurs.

DISTINCT Permet d’ignorer les doublons de ligne de résultat.

FROM Spécifie le ou les relations sur lesquelles effectuer la sélection.

WHERE Définie le ou les critères de sélection sur des attributs.

GROUP BY Permet de grouper les lignes de résultats selon un ou des attributs.

ORDER BY Permet de définir l’ordre (ASCendant par défaut ou DESCendant) dans l’envoi des résultats.

LIMIT Permet de limiter le nombre de lignes du résultats

Page 111: PHP et MySQL

Jointure évoluée I

Expression de la jointure classique:

SELECT Personnes.nom, Bibliothèque.nblivresFROM Personnes, BibliothèqueWHERE Personnes.nom = Bibliothèque.nom

qui permet de concaténer deux relation en prenant un attribut comme pivot.

Il est possible de concaténer deux relation sur plusieurs attributs à la fois, ou même de concaténer X relation sur Y attributs.

Une syntaxe spéciale et plus rapide a été créée; JOIN que l’on utilise de la façon suivante en l’appliquant sur l’exemple précédant:

SELECT Personnes.nom, Bibliothèque.nblivresFROM Personnes INNER JOIN BibliothèqueUSING (nom)

ce qui signifie que les deux relations Personnes et Bibliothèque sont concaténée (INNER JOIN) en utilisant (USING) l’attribut nom.

Page 112: PHP et MySQL

Jointure évoluée II

La syntaxe USING permet de lister les attributs servant de pivot. Ces attributs doivent porter le même nom dans chacune des tables devant être concaténées.

Si les attributs pivots ne portent pas le même nom, il faut utiliser la syntaxe ON.

Ainsi la jointure précédente peut s’écrire sous la forme:

SELECT Personnes.nom, Bibliothèque.nblivresFROM Personnes INNER JOIN BibliothèqueON Personnes.nom = Bibliothèque.nom

Page 113: PHP et MySQL

Les fonctions MySQL I

Les opérateurs

- les parenthèses ( )- les opérateurs arithmétiques (+, -, *, /, %), - les opérateurs binaires (<, << , >, >>, |, &), - les opérateurs logiques qui retournent 0 (faux) ou 1 (vrai) (AND, OR,

NOT, BETWEEN, IN), - les opérateurs relationnels (<, <=, =, >, >=, <>).- Les opérateurs et les fonctions peuvent êtres composés entre eux

pour donner des expressions très complexes.

Exemples

SELECT nom,prénom FROM élèves WHERE age BETWEEN 12 AND 16SELECT modèle FROM voitures WHERE couleur IN (‘rouge’, ‘blanc’)SELECT nom FROM produits WHERE prix <= 100.5

Page 114: PHP et MySQL

Les fonctions MySQL II

Fonctions de comparaison de chaînes

Le mot clé LIKE permet de comparer deux chaînes.Le caractère ‘%’ est spécial et signifie : 0 ou plusieurs caractères.Le caractère ‘_’ est spécial et signifie : 1 seul caractère

L’exemple suivant permet de rechercher tous les clients dont le prénom commence par ‘Jean’ (Jean-Pierre, Jean-Michel…):

SELECT nom FROM clients WHERE prénom LIKE ‘Jean%’

Pour utiliser les caractères spéciaux ci-dessus en leur enlevant leur fonction spéciale, il faut les faire précéder de l’antislash : ‘\’.

Exemplepour lister les produit dont le code commence par la chaîne ‘_XE’ :

SELECT * FROM produit WHERE code LIKE ‘\_XE%’

Page 115: PHP et MySQL

Les fonctions MySQL III

Fonctions Mathématiques

Fonction Description

ABS(x) Valeur absolue de x.

SIGN(x) Signe de X, retourne -1, 0 ou 1.

FLOOR(x) Arrondi à l’entier inférieur.

CEILING(x) Arrondi à l’entier supérieur.

ROUND(x) Arrondi à l’entier le plus proche.

EXP(x), LOG(x), SIN(x), COS(x), TAN(x), PI()

Bon, là c’est les fonctions de maths de base…

POW(x,y) Retourne X à la puissance Y.

RAND(), RAND(x) Retourne un nombre aléatoire entre 0 et 1.0 Si x est spécifié, entre 0 et x

TRUNCATE(x,y) Tronque le nombre x à la yème décimale.

Page 116: PHP et MySQL

Les fonctions MySQL IV

Fonctions de chaînes

Fonction Description

TRIM(x) Supprime les espaces de début et de fin de chaîne.

LOWER(x) Converti en minuscules.

UPPER(x) Converti en majuscules.

LONGUEUR(x) Retourne la taille de la chaîne.

SUBSTRING(s,i,n) Retourne les n derniers caractères de s en commençant à partir de la position i.

SOUNDEX(x) Retourne une représentation phonétique de x.

SELECT UPPER(nom)FROM clientsWHERE SOUNDEX(nom) = SOUNDEX(‘Dupond’)

On affiche en majuscules le nom de tous les clients dont le nom ressemble à ‘Dupond’

Page 117: PHP et MySQL

Les fonctions MySQL V

Fonctions de dates et heures

Fonction Description

NOW() Retourne la date et heure du jour.

TO_DAYS(x) Conversion de la date X en nombre de jours depuis le 1er janvier 1970.

DAYOFWEEK(x) Retourne le jour de la semaine de la date x sous la forme d’un index qui commence à 1 (1=dimanche, 2=lundi…)

DAYOFMONTH(x) Retourne le jour du mois (entre 1 et 31).

DAYOFYEAR(x) Retourne le jour de l’année (entre 1 et 366).

SECOND(x), MINUTE(x),HOUR(x), MONTH(x), YEAR(x), WEEK(x)

Retournent respectivement les secondes, minutes, heures, mois, année et semaine de la date.

SELECT titre FROM article WHERE(TO_DAYS(NOW()) – TO_DAYS(parution)) < 30

Cet exemple affiche le titre des articles parus il y a moins de 30 jours.

Page 118: PHP et MySQL

Interfaçage avec PHP