Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Initiation PHP et MYSQL
DEUST TMIC Philippe ELIES
2
1ère partie : le PHP Naissance du PHP Intérêt et fonctionnement
Les outils Le langage Syntaxe de base Les variables, constantes et types les opérateurs Les structures de contrôles Les chaînes de caractères Les tableaux Les fonctions Les formulaires Transfert de fichiers vers le serveur Les fichiers Cookies Sessions Programmation orientée objet Création d’images Penser à structurer vos applications
3
Langage PHP Naissance du PHP
Personal Home Page devient Php Hypetext Preprocessor Né en en 1994 d’un programme en langage PERL écrit par Rasmus Lerdorf pour analyser les visites de son CV en ligne. Il réécrit l’application en C, et l’ouvre à la communauté du libre. Avec l’aide de nombreux développeurs, les fonctions deviennent nombreuses. Sa popularité ne cessent de grandir: 2002 : 8 millions de sites en php 2007 : + de 20 millions 2013 : + de 244 millions La version actuelle est la version 5 sortie le 13 juillet 2004. La dernière mise à jour est la datant du 28 aout 2014. En juillet 2014, la communauté PHP décida que la prochaine version de PHP serait la 7 et non pas 6 abandonnée en 2010. Comme de nombreux projets Open Source, PHP possède une mascotte. Il s'agit de l'éléPHPant, dessiné en 1998 par El Roubio Perl1 est un langage de programmation créé par Larry Wall en 1987 pour traiter facilement de l'information de type textuel. Ce langage, interprété, s'inspire des structures de contrôle et d'impression du langage C, mais aussi de langages de scripts sed, awk et shell (sh). Il prend en charge les expressions régulières dans sa syntaxe même, permettant ainsi directement des actions sur l'aspect général de séquences de texte. PHP est un langage de programmation libre4 principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP3, mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet comme C++ Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le Web En 2002, PHP est utilisé par plus de 8 millions de sites Web à travers le monde7, en 2007 par plus de 20 millions8 et en 2013 par plus de 244 millions9. La version actuelle est la version 5, sortie le 13 juillet 2004 La dernière mise à jour est la datant du 28 août 2014
4
Langage PHP Intérêts : Inconvénients :
Il est libre, portable, simple d’utilisation et d’installation. Il permet de créer des pages Web Dynamiques ou Interactives. Le plus simple (en comparaison avec Perl, JSP et ASP), apprentissage rapide. Il est multi-plateforme. Il est suffisamment souple, robuste et rapide pour intéresser les professionnels, et sa richesse d’outils et des bibliothèques en fera sans doute un des langages privilégiés dans les entreprises. Inconvénients : C’est un langage peu typé d’où sa simplicité d’apprentissage, de ce fait des failles de sécurité peuvent rapidement apparaître.
5
Génération fichier HTML
Langage PHP Fonctionnement Le noyau PHP est un moteur en langage C localisé sur le serveur Noyau PHP 2 Fichier PHP 1 Fichier HTML 1 Génération fichier HTML 3 2 Un fichier PHP est soit : un programme du HTML embarqué en PHP du PHP embarqué en HTML En particulier, sa syntaxe et sa construction ressemblent à celles des langages Java et Perl, à la différence que du code PHP peut facilement être mélangé avec du code HTML au sein d'un fichier PHP. Dans une utilisation Web, l'exécution du code PHP se déroule ainsi : lorsqu'un visiteur demande à consulter une page Web, son navigateur envoie une requête au serveur HTTP correspondant. Si la page est identifiée comme un script PHP (généralement grâce à l'extension .php), le serveur appelle l'interprète PHP qui va traiter et générer le code final de la page (constitué généralement d'HTML ou de XHTML, mais aussi souvent de CSS et de JS). Ce contenu est renvoyé au serveur HTTP, qui l'envoie finalement au client. Une étape supplémentaire est souvent ajoutée : celle du dialogue entre PHP et la base de données. Classiquement, PHP ouvre une connexion au serveur de SGBD voulu, lui transmet des requêtes et en récupère le résultat, avant de fermer la connexion. 4 Navigateur web
6
Langage PHP Quand utiliser PHP :
Si vous êtes tenté en de vouloir convertir tout votre site en PHP et donc remplacer le code (X)HTML par des echo() en rafale, ce n'est pas une bonne solution. Vous ne devez pas utiliser PHP pour générer du contenu statique. Si votre page n'est pas destinée à être dynamique, laissez-la en HTML. Vous gagnerez en performances et soulagerez le serveur d’hébergement. Mais avant d’utiliser le langage php, une bonne connaissance du HTML est indispensable, car vous allez programmer de pages web, donc afficher avec votre navigateur, qui lui ne comprend que le HTML.
7
Langage PHP Les outils Mise au point : debugger intégré dans la distribution PHP Edition : PhpEd, PhpCoder, Xemacs, Blocnote … Developpement : EasyPHP ou PHPTriad, ou encore WAMP 5 (pour windows) incluent un serveur web Apache accompagné du module PHP et de la base de données MySQL pour votre machine sous windows Transfert : utilisation d’un logiciel FTP (Files Transfert Protocole) pour télécharger vos fichiers de votre machine vers le serveur d’hébergement. Vous pouvez utiliser FileZilla qui est très complet
8
Langage PHP Les outils EasyPHP : outils que nous allons utiliser
9
Langage PHP Les outils : EasyPHP
10
Langage PHP Le code PHP doit être inséré entre des balises <?php et ?>, et vous pouvez très bien mélanger du code PHP et du code HTML sur la même page. Votre première page en PHP: <?php echo " bonjour " ?> Ou encore : <?php echo " bonjour" ?> N’oubliez pas que l’on génère une page html : Penser à visualiser le code généré. <?php echo " <html> <body> bonjour </body> </html> " ?> <html> <body> <?php echo " bonjour" ?> </body> </html>
11
Langage PHP Il existe de nombreuse fonctions simple à utiliser :
<html> <head> <title>Bonjour</title> </head> <body> Il est exactement : <?php echo date(" H:i:s ");?> </body> </html>
12
Langage PHP Exercice : Configuration du serveur <?php // info.php
// affichage des informations de configuration du serveur // affichage de l'entête HTML (fond de la page en orange) echo " <html> <head> <title>Configuration du serveur</title> </head> <body bgcolor=\"#ffb050\" > " ; phpinfo() ; // affichage de la fin de la sortie HTML </body> </html> " ; ?>
13
Langage PHP Le langage : Syntaxe de base
Séparateur d’instructions : le point-virgule <?php Instruction1; Instruction2; ?> Commentaires : Commenter un bloc : /* … */ Commenter une ligne ou une fin de ligne : // Caractère d’échappement : \ echo "\"Salut tout le monde\""; affiche : "Salut tout le monde"
14
Langage PHP Le langage : Les variables, constantes et types
Une variable est un objet repéré par son nom pouvant contenir des données qui pourront être modifiées lors de l'exécution du programme. Une variable doit être obligatoirement précédée du caractère $ Les variables scalaires contiennent qu’une seule valeur contrairement aux tableaux. un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_" (pas par un chiffre) Attention le PHP distingue la casse $test ≠ $Test ≠ $TEST Type en français exemple Integer ou int Entier 345 Float Nombre à virgule 345,2 String Chaîne de caractères Ceci est un exemple Boolean booléen False ou True
15
Langage PHP Le langage : Les variables, constantes et types
Les variables sont typées implicitement, il n’y a pas besoin de les déclarer, cependant il est possible de forcer le type: $code_postal= " "; $code_postal=(int)$code_postal; $code_postal serait naturellement de type string (" "). Le forcage du type en int lui enlève le premier 0. Les entiers sont simples à utiliser $a=1; $b=2; $c=$a+$b; $c contient la valeur 3
16
Langage PHP Le langage : Les variables, constantes et types $a=‘1’;
$c=$a+$b; $c=? Toujours 3, car Php vous facilite la vie le ‘+’ fait qu’il devine qu’il s’agit de valeurs numériques.
17
Langage PHP Le langage : Les variables, constantes et types <?php
$reel=0.3; $entier=22; $chaine= " bonjour ! "; $phrase1= " bonjour $chaine! "; $phrase2=' bonjour $chaine '; echo " un reel : $reel<br /> un entier : $entier <br /> une chaine : $chaine <br /> guillemets double : $phrase1 <br /> guillemets simple : $phrase2 <br /> "; ?> Donner l’exemple : echo "bonjour".$chaine."!"; un reel : 0.3 un entier : 22 une chaine : bonjour! guillemets double: bonjour bonjour !! guillemets simple : bonjour $chaine
18
Langage PHP Le langage : Les variables, constantes et types
Les variables peuvent être assignées par références (elles deviennent un alias sur la variable qu’elles référencent): <?php $chaine1= "Bonjour"; $chaine2=&$chaine1; //reference $chaine1 par $chaine2 $chaine2= "$chaine2 tout le monde "; echo $chaine1."<br />"; echo $chaine2."<br />"; $chaine1="changement"; echo $chaine2.« <br />"; ?> Cela signifie que $chaine1 et $chaine2 pointent sur la même variable. Ce n’est pas 1 qui pointe vers 2 ni vice versa, 1 et 2 sont completement egale Affichage : Bonjour tout le monde
19
Langage PHP Le langage : Les variables, constantes et types
Les variables prédéfinies : elles sont visibles par phpinfo() et sont créées par le serveur Apache. Quelques exemples de variables prédéfinies : $HTTP_REFERER : de la page qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas $REMOTE_ADDR : IP du client qui demande la page courante … Les variables PHP : les variables qui sont créées par PHP lui-même: $HTTP_COOKIE_VARS : un tableau associatif des variables passées au script courant via les HTTP cookies; uniquement possible si le suivi des variables a été activé avec trak_vars (cf valeur dans phpino())
20
Langage PHP Le langage : Les variables, constantes et types
Portée des variables : la portée d’une variable dépend du contexte dans lequel la variable est définie. Lorsque vous définissez une fonction, la portée d’une variable définie dans cette fonction est locale à la fonction: <?php $a=1; //portée globale function test() { echo $a; //portée locale } test(); $b=2; function somme () { global $a, $b; $b=$a + $b; somme (); echo $b; ?> Rien ne s’affiche à l’écran La valeur 3 s’affiche
21
Langage PHP Le langage : Les variables, constantes et types
Les constantes : elles représentent un confort, évitent une perte de temps, et les programmes gagnent en lisibilité. Elles s’écrivent en capitales et sont déclarées par la fonction define () : <?php define ('PI', ); define ('MAIL', echo " la valeur de Pi est ".PI."<br>"; echo " la valeur de Pi est PI<br>"; ?> Rq : la constante ne peut être utilisée dans les guillemets Affichage : la valeur de Pi est la valeur de Pi est PI
22
Langage PHP Les opérateurs :
arithmétiques +, -, * , / (quotient), % (reste) d’assignation = : <?php $a=($b=4) + 5; // $a est maintenant égale à 9 et $b vaut 4 $a+=5; // affecte la valeur 14 à $a $b=“Bonjour “; $b.=“tout le monde”; //affecte la valeur “Bonjour tout le monde à $b ?> sur les bits : & (et), | (ou), ^ (ou exclusif), ~ (non), << (décalage à gauche, *2), >> (décalage à droite /2) de comparaison : == (egal), === (identique), != (différent), <> (différent), < (plus petit), > (plus grand), <= (inférieur ou égal), >= (supérieur ou égal)
23
Langage PHP Les opérateurs : d’incrémentation/décrémentation :
++$a Pré-incrémente, Incrémente $a de 1, puis retourne $a. $a++ Post-incrémente, Retourne $a, puis incrémente $a --$a Pré-décrémente, Décrémente $a de 1, puis retourne $a. $a-- Post-décrémente, Retourne $a, puis décrémente $a de 1. logiques : ($a and $b) équivalent à ($a&&$b) : vrai si $a et $b sont vrais ($a or $b) équivalent à ($a || $b) : vrai si $a et $b sont faux $a xor $b : vrai si $a ou $b est vrai, mais pas les deux vrais !$a : vrai si $a est faux
24
Langage PHP Exercice : <?php echo 'Post-incrémentation'; $a = 5;
echo 'devrait valoir 5 : '.$a++.'<br/>'; echo 'devrait valoir 6 : '.$a.'<br/>'; echo 'Pre-incrémentation'; echo 'devrait valoir 6 : '.++$a.'<br/>'; echo 'Post-décrémentation'; echo 'devrait valoir 5 : '.$a--.'<br/>'; echo 'devrait valoir 4 : '.$a.'<br/>'; echo 'Pret-décrémentation'; echo 'devrait valoir 4 : '.--$a.'<br/>'; ?>
25
Langage PHP Le langage : Les structures de contrôles
Conditionnelle if : elle permet l’exécution conditionnelle d’une partie de code <?php If ($a > $b) { echo "a est plus grand que b " ; } else { echo "b est plus grand que a " ; } ?> Le elseif est une combinaison de if et de else } elseif ($a==$b) { echo "a est égal à b " ;
26
Exercice PHP Rédiger une expression conditionnelle pour tester si un nombre est à la fois un multiple de 3 et de 5.
27
Correction Exercice Rédiger une expression conditionnelle pour tester si un nombre est à la fois un multiple de 3 et de 5 : <?php $x=1245; if($x%3==0 AND $x%5==0) { echo "$x est multiple de 3 et de 5 <br />"; } else echo "$x n'est pas multiple de 3 et de 5 <br />"; ?>
28
Exercice PHP Écrire une expression conditionnelle utilisant les variables $age et $sexe dans une instruction if pour sélectionner une personne de sexe féminin dont l’age est compris entre 21 et 40 ans et afficher un message de bienvenue approprié.
29
Correction Exercice Écrire une expression conditionnelle utilisant les variables $age et $sexe dans une instruction if pour sélectionner une personne de sexe féminin dont l’age est compris entre 21 et 40 ans et afficher un message de bienvenue approprié. <?php $sexe="F"; $age=43; if($sexe=="F" AND $age>=21 AND $age <= 40) { echo "Bonjour Madame vous avez entre 21 et 40 ans <br />"; } else { echo "Désolé, vous ne remplissez pas les conditions <br />"; ?>
30
Langage PHP Le langage : Les structures de contrôles
La boucle while est le moyen le plus simple d’implémenter une boucle en PHP, deux syntaxes sont possibles : <? php $i=1; while ($i <= 10) { echo $i++; } ?> <?php while ($i <= 10) : echo $i; $i++; Endwhile;
31
Exercice PHP Effectuer une suite de tirages de nombres aléatoires jusqu’à obtenir une suite composée d’un nombre pair suivi de deux nombres impairs.
32
Correction Exercice Effectuer une suite de tirages de nombres aléatoires jusqu’à obtenir une suite composée d’un nombre pair suivi de deux nombres impairs. <?php $compteur=0; do { $x=rand(0,1000); $y=rand(0,1000); $z=rand(0,1000); $compteur++; echo $x. "," . $y. "," . $z."<br />"; } while($x%2==1 OR $y%2==0 OR $z%2==0); echo "Résultat obtenu en $compteur coups"; ?>
33
Langage PHP Le langage : Les structures de contrôles
Les boucles for sont les boucles les plus complexes en PHP <?php for ($i=1; $i<=10;$i++) { echo $i; } ?> <?php for ($i=1;;$i++) { if ($i >10) { break; } echo $i; $i=1; ?> <?php For (;;) { if ($i>10) { break; } echo $i++; ?>
34
Langage PHP Le langage : Les structures de contrôles
Les boucles for sont les boucles les plus complexes en PHP <?php for ($i=1; $i<=10; print $i, $i++) ; ?> Une autre syntaxe est possible : For (expr1; expr2; expr3) : statement; …; endfor;
35
Exercice PHP Choisir un nombre de trois chiffres. Effectuer ensuite des tirages aléatoires et compter le nombre de tirages nécessaire pour obtenir le nombre initial. Arrêter les tirages et afficher le nombre de coups réalisés. Réaliser ce script avec l’instruction for
36
Correction Exercice Choisir un nombre de trois chiffres. Effectuer ensuite des tirages aléatoires et compter le nombre de tirages nécessaire pour obtenir le nombre initial. Arrêter les tirages et afficher le nombre de coups réalisés. Réaliser ce script avec l’instruction for <?php //Nombre à trouver $nb=789; //boucle de tirage for($coup=1;$x!=$nb;$coup++) { $x=rand(0,1000); //echo $x,"<br />"; //pour afficher tous les tirages } echo "$nb trouvé en $coup coups "; ?>
37
Exercice PHP Afficher la table de multiplication de 19 en utilisant deux boucles imbriquées.
38
Langage PHP Afficher la table de multiplication de 19 en utilisant deux boucles imbriquées. <?php echo "<table border='1' style ='background-color:yellow'>"; for ($i=1;$i<10;$i++) { echo "<tr>"; for ($j=1;$j<10;$j++) { echo "<td style='background-color:red;color:white'> $i*$j</td> "; } echo " </tr> "; echo " </table> "; ?>
39
Langage PHP Afficher la table de multiplication de 19 en utilisant deux boucles imbriquées avec les balises de titres <?php echo "<table border='1' style ='background-color:yellow'><th> X</th>"; for ($i=1;$i<10;$i++) { echo" <th> $i </th>"; } echo "<tr><th> $i </th> "; for ($j=1;$j<10;$j++) { echo "<td style='background-color:red;color:white'> $i*$j</td> "; echo " </tr> "; echo " </table> "; ?>
40
Langage PHP Le langage : Les structures de contrôles
Le break permet de sorti d’une structure for, while, foreach ou switch. Il accepte un paramètre optionnel qui permet de préciser le nombre de boucles imbriquées qu’il faut casser. <?php $i=0; while ($i<10) { if ($arr[$i] == "stop") { break; } $i++;
41
Langage PHP Le langage : Les structures de contrôles
L’instruction continue est utilisée dans une boucle pour arrêter l’itération courante et passer à la suivante, paramètre optionnel qui permet de préciser le nombres de structures emboîtées à ignorer . Application : afficher les nombres compris entre 0 et 20 à l’exception des multiples de 5 <?php for ($i=0;$i<20;$i++) { if ($i%5==0) {continue;} echo $i. "<br/> "; } ?>
42
Langage PHP Le langage : Les structures de contrôles
L’instruction switch équivaut à une série d’instruction if : <?php switch ($i) { case 0 : echo " i egal 0 "; break; case 1 : echo " i egal 1 "; case 2 : echo " i egal 2 "; default: echo " i est different de 0, 1 et 2 "; } ?>
43
Langage PHP Le langage : Les structures de contrôles
L’instruction switch équivaut à une série d’instruction if, la même chose avec des chaines de caractères : <?php $i="a"; switch ($i) { case "a" : echo " si a on peut traiter... "; break; case "b" : echo " i egal b "; case "c" : echo " i egal c "; default: echo " i est different de 0, 1 et 2 "; } ?>
44
Langage PHP Le langage : Les structures de contrôles
La boucle do … while est la même que la boucle while, mais à la différence de while, elle initie un tour avant d’entrer dans la boucle, que la condition soit vérifiée ou pas, car la valeur est testée en fin de boucle. Cette structure est très peu employée.
45
Langage PHP Le langage : Les chaînes de caractères
Guillemets simples : echo ‘ceci est une chaîne simple’; echo ‘l\ ‘utilisation du caractère d’échappement’; Guillemets doubles : PHP va alors comprendre certaines séquences de caractères: \\ antislash \$ caractère $ \“ guillemets doubles …
46
Langage PHP Le langage : Les chaînes de caractères
Accès aux caractères d’une chaîne : Ils sont accessibles en spécifiant leur offset (le premier caractère ayant 0 comme offset) entre accolade après le nom de la variable $var1=‘ceci est un test’; $premier=$var1[0]; $longueur= strlen($var1); $last=$var1[$longueur-1]; echo " le premier $premier, la longueur $longueur... "; Opérateurs de chaînes : l’opérateur de concaténation (‘.’), qui retourne la concaténation des arguments: $a= "bonjour"; $b= $a . " tout le monde "; l’opérateur d’assignation concaténant (‘.=‘) : $b="bonjour"; $b.=" tout le monde ";
47
Langage PHP Le langage : Les chaînes de caractères
Il existe de nombreuses fonctions pour effectuer des opérations sur les chaînes, en voici quelques unes : strlen ($chaine) : retourne la longueur de la chaîne strtolower ($chaine) : conversion en minuscule strtoupper ($chaine) : conversion en majuscule htmlspecialchars ($chaine) : convertit les caractères spéciaux en entités html (ex: < devient <) trim ($chaine) : supprime les espaces de début et fin de chaine rtrim ($chaine) :supprime les espaces en fin de chaine substr ($chaine,$deb,$long) : renvoie la sous-chaîne de taille $long qui commence à l’indice $deb strcasecmp ($chaine1,$chaine2) : comparaison sans tenir compte de la casse … cf doc.
48
Exercice PHP Transformez une chaîne écrite dans des casses différentes afin que chaque mot ait une initiale en majuscule.
49
Correction Exercice Transformez une chaîne écrite dans des casses différentes afin que chaque mot ait une initiale en majuscule. <?php $ch="TransFOrmeZ unE ChaîNE écRITe dans des cASses diFFéreNTes afiN qUe chAQue MOT ait une inITiale en MAJUSCULE"; echo ucwords(strtolower($ch)); ?>
50
Exercice PHP En utilisant la fonction strlen()écrivez une boucle qui affiche chaque lettre de la chaîne PHP 5sur une ligne différente.
51
Correction Exercice En utilisant la fonction strlen()écrivez une boucle qui affiche chaque lettre de la chaîne PHP 5sur une ligne différente. <?php $ch="PHP 5"; for($i=0;$i<strlen($ch);$i++) { echo "<h3> $ch[$i] </h3>"; } ?>
52
Exercice PHP À partir de deux chaînes quelconques contenues dans des variables, effectuez une comparaison entre elles pour pouvoir les afficher en ordre alphabétique naturel. Nous utilisons la fonction strtolower()avant d’opérer la comparaison, sinon tous les caractères de A à Z sont avant les caractères a à z.
53
Correction Exercice 8 À partir de deux chaînes quelconques contenues dans des variables, effectuez une comparaison entre elles pour pouvoir les afficher en ordre alphabétique naturel. Nous utilisons la fonction strtolower()avant d’opérer la comparaison, sinon tous les caractères de A à Z sont avant les caractères a à z. <?php $ch1="alpha"; $ch2="Azéma"; if(strtolower($ch1)<strtolower($ch2)) echo $ch1 ," est avant ", $ch2; else echo $ch2 ," est avant ", $ch1; ?>
54
Exercice PHP Dans la chaîne « PHP 5 \n est meilleur \n que ASP \n et JSP \n réunis », remplacez les caractères \n par <br/> en utilisant une expression régulière. Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au modèle. En réalité il s'agit d'un système fort ingénieux (et aussi très puissant) permettant de retrouver un mot, ou une phrase (et même beaucoup d'autres choses en réalité) dans un texte, ressemblant au modèle que l'on a construit..
55
Correction Exercice Dans la chaîne « PHP 5 \n est meilleur \n que ASP \n et JSP \n réunis », remplacez les caractères \n par <br/> en utilisant une expression régulière. <?php $ch="PHP 5 \n est meilleur \n que ASP \n et JSP \n réunis"; echo ereg_replace("\n","<br />",$ch); ?> Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au modèle. En réalité il s'agit d'un système fort ingénieux (et aussi très puissant) permettant de retrouver un mot, ou une phrase (et même beaucoup d'autres choses en réalité) dans un texte, ressemblant au modèle que l'on a construit..
56
Langage PHP Le langage : Les tableaux
Un tableau PHP est une association ordonnée. Une association est un type qui fait correspondre des valeurs à des clés. Il peut être soit scalaire ou associatif $tab[12], $tab[$n], $tab["jkkkjh"] (il peut être indexé par n’importe quoi) Les tableaux peuvent être multidimensionnels $coord ["top"][$x][$y] Création d’un tableau avec la fonction array(), cette fonction prend en argument des structures key=>value séparées par des virgules Si vous omettez une clé lors de la spécification d’un tableau, l’indice maximum +1 sera utilisé comme clé par défaut. Si aucun indice numérique n’a été généré, ce sera 0. Si vous spécifier une clé déjà assignée, la nouvelle valeur écrasera la précédente.
57
Langage PHP Le langage : Les tableaux
Le remplissage d’un tableau peut se faire de trois manières pour le tableau à une dimension : $tab=array("b", "o", "n"); $tab[0]= "b"; $tab[1]= "o"; $tab[3]= "n"; $tab[]= "b"; $tab[]= "o"; $tab[]= "n"; Nombre d’élément dans le tableau : $nb=count($tab) Pour les tableaux associatifs: $tab["cle"]=$valeur; $tab=array("cle1"=>$valeur1, "cle2"=>$valeur2,…) Accès à un élément : $individu["cle"]; Accès aux éléments : each() retourne la paire (clé/valeur) courante du tableau array et avance le pointeur de tableau next() retourne l'élément suivant du tableau, ou FALSE s'il n'y a plus d'éléments prev() repositionne le pointeur interne de tableau à la dernière place qu'il occupait, ou bien retourne FALSE s'il ne reste plus d'éléments.
58
Langage PHP Le langage : Les tableaux
Le tri des tableaux est assurées par plusieurs fonctions: sort() trie le tableau en ordre. Les éléments seront triés du plus petit au plus grand. asort() trie un tableau en ordre de telle manière que la corrélation entre les index et les valeurs soit conservée asort() trie un tableau en ordre inverse de telle manière que la corrélation entre les index et les valeurs soit conservée ksort() trie un tableau suivant les clés, en maintenant la correspondance entre les clés et les valeurs. Cette fonction est pratique pour les tableaux associatifs. array_multisort() sert à trier simultanément plusieurs tableaux, ou bien à trier un tableau multi−dimensionnel, suivant l'une ou l'autre de ses dimensions. Les clés sont préservées. Et les autres : natsort(), natcasesort(), rsort(), uasort(), uksort() et usort() Asort : tri les valeur et pas les cles pour les tableaux associatifs
59
Langage PHP Le langage : Les tableaux
Quelques fonctions intéressantes: array_splice() supprime les éléments désignés par offset et length du tableau input et les remplace par les éléments du tableau replacement, si ce dernier est présent array_slice() retourne une série d' élément du tableau array commençant à l'offset offset et représentant length éléments array_sum() retourne la somme des valeurs du tableau, sous forme d'un entier ou d'un nombre à virgule flottante array_unshift() ajoute les éléments passés en argument au début du tableau array. Notez que les éléments sont ajoutés comme un tout, et qu'ils restent dans le même ordre end() déplace le pointeur interne du tableau array jusqu'au dernier élément in_array (mixed needle, array haystack, boolean strict) , in_array() recherche needle dans haystack et retourne TRUE s'il s'y trouve, ou FALSE sinon …
60
Langage PHP Le langage : Les tableaux
Nous pouvons parcourir un tableau en combinant la fonction count ( qui donne le nombre d’éléments du tableau) associée à une boucle FOR : <?php $tab1 = array( 1, 1, 2, 3, 5, 8, 13 ); $taille=count($tab1); for($i=0;$i<$taille;$i++) echo $tab1[$i]."<br>"; ?> Ou alors en utilisant l’instruction FOREACH qui se décline en deux versions : <?php $tab2 = array( 1, 1, 2, 3, 5, 8, 13 ); foreach( $tab2 as $valeur ) echo $valeur . "<br /> "; ?> Pour cet exemple, il n’apparaît pas d’avantage à utiliser l’une ou l’autre des méthodes…
61
Langage PHP Le langage : Les tableaux
Étudions maintenant le cas d’un tableau associatif : <?php $tab3 = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3'); ?> Ici, les indices des éléments ne sont pas des nombres (0, 1, 2, ...) mais des chaînes de caractères (clés). Pour accéder au deuxième élément, je dois procéder comme suit: $tab3['deuxieme'], il paraît alors évident qu’il est impossible d'utiliser la boucle for. Par contre, avec foreach, aucun problème: <?php $tab3 = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3'); foreach( $tab3 as $value ) echo $value . "<br /> "; ?>
62
Langage PHP Le langage : Les tableaux
La deuxième version de foreach permet de connaître, en plus de la valeur de l'élément courant, sa clé: <?php $tab4 = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3'); foreach( $tab4 as $key => $value ) echo " Cet élément a pour clé " . $key . " et pour valeur " . $value . " <br /> "; ?>
63
Langage PHP Le langage : Les structures de contrôles
L’instruction foreach permet de passer en revue un tableau <?php foreach (array_expression as $value) commandes; foreach (array_expression as $key => $value) commandes ; ?> La première instruction passe en revue le tableau array_expression, a chaque itération la valeur de l’élément courant est assigné à $value et le pointeur interne de tableau est avancé d’un élément. La deuxième fait exactement la même chose, mais c’est la clé de l’élément courant qui est assigné à la variable $key. Lorsque foreach démarre le pointeur interne de fichier est automatiquement réinitialisé.
64
Langage PHP Le langage : Les structures de contrôles Affichage :
$a= array ( "un" =>1, "deux" =>2, "trois" =>3, "dix-sept" =>17 ); foreach ($a as $k=>$v) { echo "\$a[$k] => $v</br>"; echo $v."</br>"; echo $k."</br>"; echo "$a[$k]</br></br>"; } ?> Affichage : $a[un] => 1. $a[deux] => 2. $a[trois] => 3. $a[dix-sept] => 17.
65
Exercice PHP Créer un tableau dont les indices varient de 11 à 36 et dont les valeurs sont des lettres de A à Z. Lire ensuite ce tableau avec une boucle for puis une boucle foreach et afficher les indices et les valeurs (la fonction chr(n)retourne le caractère dont le code ASCII vaut n).
66
Correction Exercice Créer un tableau dont les indices varient de 11 à 36 et dont les valeurs sont des lettres de A à Z. Lire ensuite ce tableau avec une boucle for puis une boucle foreach et afficher les indices et les valeurs (la fonction chr(n)retourne le caractère dont le code ASCII vaut n). <?php for($i=11;$i<=36;$i++) $tab[$i]=chr(54+$i); //Lecture avec for echo "Elément d'indice $i : $tab[$i] <br />"; //Lecture avec foreach foreach($tab as $cle=>$valeur) echo "Elément d'indice $cle : $valeur <br />"; ?>
67
Langage PHP Le langage : Les fonctions
Une fonction peut être définie en utilisant la syntaxe suivante : <?php function mafonction ($arg_1, $arg_2, ..., $arg_n) { // code de la fonction return $retval; } mafonction ($a,$b…); //pour appeler la fonction mafonction (4, "exemple",…); ?> Depuis PHP4, il n’est plus nécessaire de définir les fonctions avant de les utiliser Une fonction est définie par l’entête function suivie du nom de la fonction et de parenthèses. Il est déconseillé de donner un nom commençant par __ début de nom réservé pour les fonctions natives du PHP Il est interdit de donner un nom de fonction déjà utilisé pour une autre fonction sinon Fatal error : Cannot redeclare …
68
Langage PHP Le langage : Les fonctions
Les fonctions qui ne retournent pas de valeur: <?php function ladate () { //sans argument echo date("l, d/m/Y \i\l \\e\s\\t h:i:s ") ; } function ladate2 ($a) { //avec argument echo "$a",date("l, d/m/Y \i\l \e\s\\t h:i:s ") ; echo ladate(); echo ladate2(" bonjour "); echo ladate2(); ?> A vous d’essayer…
69
Langage PHP Le langage : Les fonctions
Les fonctions qui retournent une valeur : Au sens mathématiques, une fonction se doit de retourne une valeur calculée à partir des paramètres qui lui sont passés Utilisation de l’instruction return $var PHP n’offre pas la possibilité de retourner explicitement plusieurs variables, pour palier à cet inconvénient, il suffit d retourner une variable du type array contenant autant de valeurs que désiré return array ("module"=>$mod, "argument"=>$arg); Les fonctions avec un nombre de paramètres variable: En passant un tableau comme paramètre à une fonction, cette dernière n’a en apparence qu’un seul paramètre. Ce sont en fait les éléments du tableau qui sont utilisés, chacun devenant un paramètre particulier. c’est donc dans le corps de la fonction que vous pourrez déterminer le nombre d’élément du tableau.
70
Exercice PHP Exercice : 1. Utilisation de fonctions
But : Afficher la date et l’heure du serveur Intérêt : Utiliser la valeur retournée par une fonction Fichier : date.php Indication : Écrire le fichier date.php 2. Écriture de fonctions But : Afficher la date et l’heure du serveur. Intérêt : Écrire et appeler une fonction. Fichier : date_fonctions.php. Indications : Créer deux fonctions debut_html() et fin_html() qui écrivent sur la sortie standard du programme le début et la fin de la sortie HTML. La fonction debut_html doit avoir un paramètre (le titre de la page). Le paramètre doit être facultatif.
71
Langage PHP Utilisation de fonctions : <? // date.php
// affichage de la date et de l'heure du serveur echo " <html> <head> <title>Configuration du serveur</title> </head> <body bgcolor="ff9900">" ; // affichage de la date et de l’heure du serveur $jour = date("d/m/Y") ; $heure = date("H\hi") ; echo " <p>Nous sommes le <b>$jour</b> et il est exactement <b>$heure</b>.</p>" ; // affichage de la fin de la sortie HTML </body> </html>" ; ?>
72
Langage PHP Ecriture de fonctions : <?
// date_fonctions.php affichage de la date et de l'heure du serveur // affichage de l'entête HTML function debut_html($titre="(pas de titre)") { echo "<html><head><title></title></head><body bgcolor=\"ffb050\">" ; } // affichage de la fin de la sortie HTML function fin_html() { echo "</body></html>" ; debut_html("Date et heure du serveur") ; // affichage de l'heure du serveur $jour = date("d/m/Y") ; $heure = date("H\hi") ; echo " <p align=\"center\">Nous sommes le <b>$jour</b> et il est exactement <b>$heure</b>.</p>" ; fin_html() ; ?>
73
Langage PHP Le langage : Les formulaires Exemple : Rappel en html :
<form action="prog.php" method="get"> <input type="submit" name="go"> </form> • Action : URL cible • Method : dans la pratique GET ou POST Rappel en html : Boutons d’action <input type="submit" name="nom" value="valeur"> <input type="reset" name="nom" value="valeur"> <input type="image" name="nom" src="source"> Entrées textuelles <input type="text" name="nom" value="valeur"> <input type="hidden" name="nom" value="valeur"> <input type="password" name="nom" value="valeur"> Boites de saisie <textarea name="nom" rows="r" cols="c">texte...</textarea>
74
Langage PHP Le langage : Les formulaires Listes à choix
<select [multiple] name="nom"> <option value="valeur">texte</option> ... </select> Boutons radio <input type="radio" name="nom" value="valeur" [selected] > Boutons à cocher <input type="checkbox" name="nom" value="valeur" [checked] >
75
action="<?$_REQUEST["PHP_SELF"] ?>“
Langage PHP Le langage : Les formulaires L’action du formulaire est redirigé vers un script qui peut être le fichier formulaire lui-même. Dans ce cas, on peut spécifier le paramètre action comme suit : action="<?$_REQUEST["PHP_SELF"] ?>“ Récupération des données saisies : lorsque l’utilisateur clique sur le bouton envoi, une requête HTTP est envoyée au serveur vers le script action,cette requête contient toutes les association entre les noms, les champs et leur valeur. Cette requête se trouve dans l’entête HTTP si la méthode POST est utilisée, ou dans l’URL si il s’agit de la méthode GET. Depuis PHP 4.1, ces valeurs sont contenues sur le serveur dans des tableaux associatifs dits superglobaux $_POST ou $_GET. Les clés de ces tableaux sont les noms associés aux champs par l’attribue name.
76
Langage PHP Transfert de fichiers vers le serveur
L’utilisation de élément HTML <input type= "file"> dans un formulaire permet de transférer un fichier: Attribut accept de l’élément input qui peut prendre un grand nombre de valeur correspondant aux type MIME des fichiers acceptés, ex : "image/gif" L’élément <form> doit avoir l’attribut mehod à post et l’attribut enctype à multipart/form-data Possibilité de limiter la taille des fichiers en ajoutant au formulaire un champ caché MAX_FILE_SIZE dont l’attribut value contient la taille max admise en octet, qui est récupérée dans $POST["MAX_FILE_SIZE"]. Par défaut la taille est limité dans php.ini (cf phpinfo()) Lorsque le fichier est transféré, il se retrouve sur un répertoire tampon défini par la directive upload_tmp_dir sous un nom donné par le serveur. Si vous ne l’utilisez pas, ce fichier est perdu à la déconnexion de l’utilisateur Les informations nécessaires au traitement du fichier sont contenues dans $_FILES (tableau associatif) cf page 175 ed Erolles
77
Langage PHP Transfert de fichiers vers le serveur
Si vous avez donné la valeur fich_trans à l’attribut name de l’élément <input type= "file" name="fich_trans" >, vous pouvez alors récupérer: le nom de fichier sur le poste client : $FILES["fich_trans"]["name"] le type MINE : $FILES["fich_trans"]["type"] le nom donné par le serveur : $FILES["fich_trans"]["tmp_name"] le code erreur éventuel : $FILES["fich_trans"]["error"] la taille du fichier : $FILES["fich_trans"]["size"] Il ne vous reste plus qu’a déplacer et renommer le fichier vers le répertoire de votre choix : boolean move_uploaded_file ($FILES["fich_trans"]["tmp_name"] , string "rep_nom_final"); Il est possible de transférer plusieurs fichiers en une seule fois, à condition que les éléments <input type="file" > soit tous id : <input type= "file " name="fich_trans[]" > Récupération : $FILES["fich_trans"]["name"][X]
78
Langage PHP Exemple 1 : <form action="tab.php" method= "post">
Nom : <input type="text" name="p[nom]"><br> <input type="text" name="p[ ]"><br> <input type="submit" name="bouton" value="envoyer"> </form> seule la méthode POST permet de passer des tableaux (et moins limité par la taille) Dans tab.php $_REQUEST["bouton"] vaut "envoyer" $_REQUEST["p"]["nom"] et $_REQUEST["p"][" "] valent ce que l’utilisateur à saisi dans les champs du formulaire
79
Langage PHP Exemple 2 : <form action="selection.php" method="POST"> <select multiple name="selection"> <option value="x">Mlle X</option> <option value="y">Mme Y</option> <option value="z">M. Z</option> </select> <input type="submit" name="bouton" value="envoyer"> </form> • Dans selection.php $_REQUEST["bouton"] vaut "envoyer" $_REQUEST["selection"] a pour taille le nombre d’options sélectionnées et pour valeurs les options sélectionnées
80
Langage PHP Exemple 3: <form action="image.php" method="post">
Cliquez sur l’image :<br> <input type="image" src="image.gif" name="coordonnees"> </form> Dans image.php $_REQUEST["coordonnees_x"] et $_REQUEST["coordonnees_y"] ont pour valeur les coordonnées du point de l’image sur lequel l’utilisateur a cliqué
81
Langage PHP Exercice formulaire:
But : Demander une chaîne de format à l’utilisateur (date_format.html) et afficher la date et l’heure du serveur selon ce format (date_format.php). Intérêt : Écrire un formulaire simple (une boite de dialogue et un bouton) ; Fichiers : date_format.html, le fichier HTML affichant le formulaire. date_format.php, le programme PHP qui prend les données du formulaire.
82
Langage PHP Fichier HTML affichant le formulaire
<! date_format.html > <html> <head> <title>Date et heure du serveur (formulaire)</title> </head> <body bgcolor="ffb050"> <center> <form action="date_format.php" method="get"> Entrez la chaîne de format :<br> <input type="text" name="format"><br> <input type="submit" name="afficher" value="Afficher"> </form> </center> </body> </html>
83
Langage PHP Fichier traitant le formulaire <? // date_format.php
// affichage de la date et de l'heure du serveur // (inclusion de sortie.inc) require("sortie.inc") ; debut_html("Date et heure du serveur") ; // affichage de l'heure du serveur $date_heure = date($_REQUEST["format"]) ; echo "<p align=\"center\"> La date affichée avec la chaîne de format donnée (\"".$_REQUEST["format"]."\") est la suivante :<br> <b>$date_heure</b>.</p>" ; fin_html() ; ?>
84
Exercice PHP Exercice : Exemple de formulaire avec saisie de champs obligatoires (nom*, prenom,mail*) En quelques étapes nous allons passer d’un formulaire html, à un formulaire php avec champs obligatoires et enregistrement des données saisies dans un fichier texte.
85
Langage PHP Exercice : Exemple de formulaire avec saisie de champs obligatoires (nom*, prenom,mail*) <? if ($formulaire){ $echec=""; if ($nom=="") $echec=$echec."<br>Veuillez saisir votre nom"; if ($mail=="") $echec=$echec."<br>Veuillez saisir votre mail"; if ($echec=="") {// traitement du formulaire } else echo $erreur // on affiche les champs incomplets if(!$formulaire || $echec != "") { echo" <form name=‘nom_form' action=‘le_fichier_lui_meme.php‘ method='post'> <input type='hidden' name='formulaire' value='true'> Nom * :<input type='text' name='nom' size='40' "; if ($nom!="") echo "value=$nom"; ……… echo " <input type='submit' name='submitButtonName'></p> </form> "; ?>
86
Langage PHP Le langage : Les fichiers Inclusion de fichiers
require ("fichier.inc"); Inclut le fichier.inc Évaluation en pré-processing include ("fichier.inc"); Évaluation à chaque fois inclusion unique include_once() require_once() Les includes sont conditionnels. Ils peuvent être placés dans une condition IF ou bien dans une boucle FOR, WHILE... les requires sont nécessaires et devrait donc se trouver toujours en début de script. En cas d’erreur dans le script contenu dans le fichier requis (instruction require), il stoppera le script alors que include() n'émettra qu'une alerte de type E_WARNING, ce qui permet au script de continuer. Les _once sont la pour dire "si le fichier n'a pas encore été chargé, alors charge le, évite plusieurs chargements
87
Langage PHP Le langage : Les fichiers Exercice : Inclusion de fichiers
But : Afficher la date et l’heure du serveur. Intérêt : Utiliser l’inclusion de fichier pour modulariser le code PHP. Fichiers : sortie.inc, le fichier définissant les fonctions ; date_appel.php, le fichier qui inclut sortie.inc. Indications : Déplacer les deux fonctions debut_html() et fin_html() dans un fichier sortie.inc. Inclure sortie.inc dans date_appel.php.
88
Langage PHP Inclusion de fichiers <?php //sortie.inc.php
// affichage de l'entête HTML, fonctions d'affichage de la sortie HTML function debut_html($titre="(pas de titre)") { echo "<html><head><title>$titre</title></head><body bgcolor=\"ffb050\">" ; } // affichage de la fin de la sortie HTML function fin_html() { echo "</body></html>" ; ?> <?php // date_appel.php affichage de la date et de l'heure du serveur require("sortie.inc") ; // (inclusion de sortie.inc) debut_html("Date et heure du serveur") ; $jour = date("d/m/Y") ; $heure = date("H\hi") ; echo " <p align=\"center\">Nous sommes le <b>$jour</b> et il est exactement <b>$heure</b>.</p>" ; fin_html() ;
89
fopen (string filename, string mode)
Langage PHP Le langage : Les fichiers Utilisation de fichiers pour la sauvegarde d’informations de volume relativement modeste, ne nécessitant pas le recours à une base de donnée plus complexe à mettre en œuvre et à manipuler Création d’un fichier : if (!file_exists("mon_fichier.txt")) { touch("mon_fichier.txt", time());} Détournement de la fonction touch de UNIX (date de dernière modification du fichier). Ouverture d’un fichier :nécessaire avant toute opération sur le fichier fopen() fopen (string filename, string mode) Si filename commence par " (insensible à la casse), une connexion HTTP 1.x est ouverte avec le serveur spécifié, Si filename commence par "ftp://" (insensible à la casse), une connexion FTP est ouverte avec le serveurspécifié, Si filename commence par n'importe quoi d'autre, PHP tentera de lire ce fichier dans le système local
90
Langage PHP Le langage : Les fichiers
Mode peut prendre les valeurs suivantes : 'r' − Ouvre en lecture seule, et place le pointeur de fichier au début du fichier. 'r+' − Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier. 'w' − Ouvre en écriture seule; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer. 'w+' − Ouvre en lecture et écriture; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer. 'a' − Ouvre en écriture seule; place le pointeur de fichier à la fin du fichier file. Si le fichier n'existe pas, on tente de le créer. 'a+' − Ouvre en lecture et écriture; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer. Identifiant de fichier : $id_file= fopen (string filename, string mode)
91
Langage PHP Le langage : Les fichiers boolean fclose($id_file)
Il faut également penser à fermer le fichier, une fois les opérations effectuées : boolean fclose($id_file) Verrouillage des fichiers : pb si plusieurs utilisateurs tentent d’accéder au même fichier. PHP dispose d'un système complet de verrouillage de fichiers. Tous les programmes qui accèdent au fichier doivent utiliser la même méthode de verrouillage pour qu'il soit efficace boolean flock (int fp, int operation) flock() agit sur le fichier fp qui doit avoir été ouvert au préalable. operation est une des valeurs suivantes : Acquisition d'un verrou : operation = 1 Acquisition d'un verrou exclusif (écriture), operation = 2 Libération d'un verrou (partagé ou exclusif), operation=3 Si vous voulez que flock() ne se bloque pas durant le verrouillage, ajoutez 4 à operation.
92
Langage PHP Le langage : Les fichiers
Ecriture dans un fichier : int fwrite (int fp, string string, int length ) fwrite() écrit le contenu de la chaîne string dans le fichier pointé par fp. Si la longueur length est fournie, l'écriture s'arrêtera après length octets, ou à la fin de la chaîne (le premier des deux) fputs() est un alias de fwrite Lecture dans un fichier : il existe plusieurs méthodes Lire une ligne à la fois : fgets() retourne la chaîne lue jusqu'à la longueur length − 1 octet, ou bien la fin du fichier, ou encore un retour chariot (le premier des trois qui sera rencontré) Lire un nombre de caractères donnés : fread() lit jusqu'à length octets dans le fichier. La lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin du fichier, ou qu'une erreur survient (le premier des trois).
93
Langage PHP Le langage : Les fichiers
Lire un caractère à la fois : fgetc() retourne une chaîne contenant un seul caractère Lecture de données formatées : array fgetcvs(resource $id_file, integer nb_octets, string séparateur) Lecture de la totalité d’un fichier : array file(string "nom_fichier") Renommer un fichier : boolean rename (string "nom_actuel", string "nom_futur") Effacer un fichier : boolean unlink (string "nom_actuel") Information sur les fichiers : existence : file_exists() taille : filesize() date : fileatime() dernier accès; filemtime() dernière mdification; filectime() dernière modification des permissions
94
Langage PHP Le langage : Les fichiers
Chemin d’accès à un fichier : basename() prend en paramètre le chemin complet d'un fichier et en extrait le nom du fichier pathinfo() retourne un tableau associatif, contenant les informations sur le chemin path. Les éléments suivants sont retournés : dirname, basename et extension realpath() résoud tous les liens symboliques, et remplace toutes les références '/./', '/../' et '/' de path puis retourne le chemin canonique absolu ainsi trouvé. Le résultat ne contient aucun lien symbolique, '/./' ou '/../'.
95
Langage PHP Le langage : Les fichiers Gestion des répertoires :
Système de fichiers : Gestion des répertoires : mkdir(), opendir(), readdir(), closedir(), dir Affichage des entrées d’un répertoire $d = dir("."); echo "Pointeur: ".$d->handle."<br>\n"; echo "Chemin: ".$d->path."<br>\n"; while($entry=$d->read()) { echo $entry."<br>\n"; } $d->close();
96
Langage PHP Le langage : Cookies
Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'authentification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante du "header" HTTP, et donc la fonction setcookie() doit être appelée avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction header(). Tout cookie envoyé depuis le client sur le serveur sera automatiquement stocké sous forme de variable, comme pour la méthode POST ou GET. Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie. setcookie ("MonCookie[]", "test", time()+3600); Les cookies ne sont récupérables dans la page qui les a créées que lors d’un rechargement de cette page, les autres pages ont un accès immédiat dès leur chargement. Les données sont lisibles dans le tableau (super variable) $_COOKIE["MonCookie"] Limitation : taille 4Ko par cookie, 300 cookies par navigateur, 20 cookies par utilisateur par serveur, refus possible par utilisateur Pensez a utiliser les redirection pour valider la lecture d’un cookkie
97
Langage PHP Le langage : Cookies
Puisqu'ils résident côté client, ils peuvent être modifiés ou supprimés par le client. Ceci implique de : ne pas s'en servir pour conserver des informations sensibles ou importantes ; ne jamais se fier à ces informations (prévoir un cas par défaut, valider l'information) . Pensez a utiliser les redirection pour valider la lecture d’un cookkie
98
Langage PHP Le langage : Cookies <?php
Exemple : <?php setcookie("achat[premier]", "livre",time()+3600); setcookie("achat[deuxieme]", "CD",time()+3600); setcookie("achat[troisieme]", "video",time()+3600); foreach($_COOKIE["achat"] as $cle=>$valeur) { echo "le cookie nommé : $cle contient la valeur: $valeur<br/>"; } ?> La lecture des cookies peut être faite dans un autre fichier Affiche : le cookie nommé : premier contient la valeur: livre le cookie nommé : deuxième contient la valeur: CD le cookie nommé : troisième contient la valeur: video
99
Langage PHP Le langage : sessions
Au niveau de leur but, les sessions sont en tout point similaire aux cookies : stocker de manière temporaire des données propres à chaque client. Mais elles diffèrent des cookies en plusieurs points clés : les données résident sur le serveur, le client n'y a pas accès : elles sont (théoriquement) sûres et privées, ce qui étend significativement leur intérêt par rapport à des données sensibles ; leur espace de stockage est théoriquement illimité quand les cookies sont limités à 4 ko par valeur et 80 ko en tout (la norme imposant un minimum de 20 valeurs par hôte/domaine) ; elles possèdent une durée de vie (délai maximal entre deux requêtes) généralement plus limitée (un peu moins de 30 minutes par défaut).
100
Langage PHP Le langage : sessions
Un visiteur arrive sur votre site. On demande à créer une session pour lui. PHP génère alors un numéro unique. Ce numéro est souvent très gros et écrit en hexadécimal, par exemple : a02bbffc6198e6e0cc bc3766f. Ce numéro sert d'identifiant et est appelé « ID de session ». PHP transmet automatiquement cet ID de page en page en utilisant généralement un cookie. Une fois la session générée, on peut créer une infinité de variables de session pour nos besoins. Par exemple, on peut créer une variable $_SESSION['nom'] qui contient le nom du visiteur, $_SESSION['prenom'] qui contient le prénom, etc. Le serveur conserve ces variables même lorsque la page PHP a fini d'être générée. Cela veut dire que, quelle que soit la page de votre site, vous pourrez récupérer par exemple le nom et le prénom du visiteur via la superglobale $_SESSION ! Lorsque le visiteur se déconnecte de votre site, la session est fermée et PHP « oublie » alors toutes les variables de session que vous avez créées.
101
Langage PHP Le langage : sessions
À quoi peuvent servir les sessions ? Quelques exemples : Associer des données sensibles à un utilisateur (comme son identifiant user_id) qui n'auraient pas leur place côté client (en cookie) ; Pister l'utilisateur, établir des statistiques plus pointues ; À éviter une requête SQL à chaque page (les préférences de l'utilisateur devraient, au pire, être en session) ; Permettre à des variables de persister et ainsi les partager entre plusieurs pages (formulaires en plusieurs étapes par exemple) ; Reconnaître un utilisateur sans qu'il n'ait à s'authentifier à chaque page ; etc
102
Langage PHP Le langage : sessions // on active le mécanisme de session
Exemple: // on active le mécanisme de session session_start() ; // on déclare les variables de session session_register("nb_req") ; session_register("debut") ; $_SESSION["nb_req"]++ ; if ( empty($_SESSION["debut"]) ) $_SESSION["debut"] = time() ; // on calcule le temps de connexion $_SESSION["temps"] = time()-$_SESSION["debut"] ;
103
Langage PHP Le langage : envoi d’un mail
Vous avez la possibilité d’envoyer un mail du serveur vers le poste client par l’utilisation de la fonction mail() qui prend comme paramètres : $dest du destinataire $objet : chaine de caractère spécifiant l’objet du mail $texte : le contenu du mail $entete : contient les entêtes nécessaires à l’envoi d’ Exemple: mail("sysadmin", "*** alerte ***", "<font color=ff0000>Aïe aïe aïe !</font>", "Content-Type: text/html") ;
104
Langage PHP Création d’image en PHP : <?php
PHP n'est pas limité à la création de fichier HTML. Il peut aussi servir à créer des images GIF, PNG, JPG, wbmp et xpm, à la volée, aussi bien pour les émettre que pour les sauver. Il faut alors compiler PHP avec la librairie GD Exemple creez un fichier creation_image.php : <?php header("Content-Type: image/jpeg") ; $im=imagecreate(40,40); $fond=ImageColorAllocate ($im, 255, 55, 51); $noir=ImageColorAllocate ($im, 0,0,0); ImageJpeg($im) ; ImageDestroy($im) ; ?> Récupération de l’image dans un autre fichier : echo "<img src='creation.php' border='1'> "; Si la page qui affiche l image contient d autres elements HTML, on doit separer la creation de l image de son utilisation, d’où la necessite d’utiliser deux fichier…
105
Exercice Fonction de redirection <?php //fonction de redirection
function redirection($url) { if (headers_sent()) echo "<meta http-equiv=\"refresh\" content=\"0;URL=".$url."\">"; } else header("Location: $url"); $test=" redirection($test); ?>
106
Langage PHP Exercice : afficher l’heure sur une page, l’heure devra se rafraichir toute les 10 s <?php echo " <html> <head> <meta http-equiv=\"refresh\" content=\"1\" </head> <body>"; echo date("h:i:s"); </body> </html>"; ?>
107
Exercice Réalisation d’un compteur sur l’index d’un site, puis afficher le contenu du répertoire Saisie du nom, prénom, d’une personne, sauvegarde des données dans un fichier texte
108
Exercice : Réalisation d’un compteur sur l’index d’un site
<?php //fonction de redirection function redirection($url) { if (headers_sent()) print('<meta http-equiv="refresh" content="0;URL='.$url.'">'); else header("Location: $url"); } $chemin="./"; $visiteur=$chemin."compteur.txt"; //recuperation de la variable $file = fopen($visiteur, "r"); $num = fgets($file,4096); fclose($file); //incrementation du compteur $num++; //ecriture de la nouvelle valeur $file = fopen($visiteur, "w"); fputs($file,$num); redirection("./index_bis.php"); ?>
109
Exercice: Saisie du nom, prénom, email d’une personne, sauvegarde des données
$fichier="donnee.txt"; $test=0; if (isset($_POST["formulaire"]))$test=true; if (isset($_POST["formulaire"])){ $echec=""; if ($_POST["nom"]=="") $echec=$echec."<br>Veuillez saisir votre nom"; if ($_POST["mail"]=="") $echec=$echec."<br>Veuillez saisir votre mail"; if ($echec=="") {// traitement du formulaire echo "ici on traite le formulaire "; $texte=$_POST["nom"]."\n".$_POST["prenom"]."\n".$_POST["mail"]."\n"; $file = fopen($fichier, "a"); fputs($file,$texte); fclose($file); redirection("afficher_heure_rafraichie.php"); } else echo $echec; // on affiche les champs incomplets if(!$test || $echec!="") { echo" <form name='nom_form' action='formulaire.php' method='post'> <input type='hidden' name='formulaire' value='true'> Nom * :<input type='text' name='nom' size='40' "; if (isset($_POST["nom"])) echo "value=".$_POST["nom"]; echo " ><br> Prénom :<input type='text' name='prenom' size='40' "; if (isset($_POST["prenom"])) echo "value=".$_POST["prenom"]; * :<input type='text' name='mail' size='40' "; if (isset($_POST["mail"])) echo "value=".$_POST["mail"]; echo " > <input type='submit' name='submitButtonName'></p> </form> ";
110
2ème partie : Le langage SQL et phpMyAdmin
Les SGBDR Le langage SQL et phpMyAdmin Création d’une base de données Les types de données MySQL Création de table Modification de table Insertion de données Sélection de données Jointure de tables Exportation de table Importation de table
111
Les SGBDR Cette partie du cours sera abordée dans la deuxième partie.
Une base de donnée est un ensemble de données organisés, permettant l’accès rapide aux informations recherchés, tout en occupant le moins d’espace possible. La méthodologie classique est la suivante : l’élaboration du modèle d’organisation des données par la méthodes entité/association, qui entraîne la création d’un modèle conceptuel de données (MCD) qui est une représentation abstraite des données à stocker et des liens entre elles; le passage au modèle relationnel, qui entraîne quant à lui la ; création d’un modèle logique de donnée (MLD) qui est implémentable dans un système particulier; l’implémentation dans un SGBDR comme MySQL Cette partie du cours sera abordée dans la deuxième partie. SGBDR :Système de gestion des base de donnees relationnelles
112
Le langage SQL et phpMyAdmin
Le langage SQL (Structured Query Langage) a été crée il y a 30 ans, et est aujourd’hui le standard de la plupart des SGBDR. L’association PHP-MySQL est très répandue sur le web, cependant MySQL est accessible à d’autre langages, et l’interface PHPMyAdmin offre la possibilité pour l’administrateur d’effectuer toutes les opérations de création de base, et de table ainsi que la sélection de données. Cette interface est installée sur vos serveurs locaux. Elle permet d’envoyer des requêtes SQL au serveur sans avoir à les écrire, et elle vous affiche le code de la requête SQL qui vient d’être exécuté. Après avoir lancé EasyPhp, vous pouvez accéder à l’interface : clic droit sur l’icône de la barre menu, sélectionner administration ou saisir l’URL pour un serveur distant (demander à l’hébergeur
113
Le langage SQL et phpMyAdmin
2- visualiser une base 1- création d’une base
114
Le langage SQL et phpMyAdmin
Créer une base de donnée devient très simple Les caractères autorisés sont les caractères alphanumériques et _ ainsi que le $ Le nombre de caractères est limité à 64 Un nom ne doit pas contenir que des chiffres La sensibilité à la casse dépend du système d’exploitation Pour créer une table saisissez le nom de la base dans la zone de saisie, puis cliquez sur le bouton Créer Cette nouvelle base vient s’ajouter à la liste
115
Le langage SQL et phpMyAdmin
message de confirmation et code SQL correspondant CREATE DATABASE `test1` ; possibilité de supprimer la base en cliquant sur le bouton supprimer il faut donc maintenant créer une ou des tables qui sont composées de colonnes ou champ, qui sont doté d’un type particulier à choisir en fonction des données à y stocker
116
Le langage SQL et phpMyAdmin
Type de données MySQL Les types numériques au nombres de 8, il faut choisir le type le plus adapté afin de minimiser la taille de la table : TINYINT : entier de -128 à 127, si option unsigned les valeurs vont de 0 à 255 – Chaque valeur occupe 1 octet SMALLINT : entier de à 32767, si option unsigned les valeurs vont de 0 à – Chaque valeur occupe 2 octets MEDIUMINT : entier de à , si option unsigned les valeurs vont de 0 à (224-1)– Chaque valeur occupe 3 octets INT ou NTEGER : entier de (-231) à (231-1) , si option unsigned les valeurs vont de 0 à (232-1)– Chaque valeur occupe 4 octets BIGINT : entier de (-263) à (263-1) , si option unsigned les valeurs vont de 0 à (264-1)– Chaque valeur occupe 8 octets
117
Le langage SQL et phpMyAdmin
Type de données MySQL Les types numériques suite FLOAT : nbre à virgule flottante en simple précision de E+38 à -1.75E-38 et 1.75E-38 à 3.40E+38, si option unsigned les valeurs sont seulement positives. Avec l’option FLOAT (M,D), l’affichage s’effectue avec M chiffres dont D décimales – Chaque valeur occupe 4 octets DOUBLE : nbre à virgule flottante en double précision de E+308 à -2.22E-308 et 2.22E-308 à 1.79E+308, si option unsigned les valeurs sont seulement positives. Avec l’option DOUBLE (M,D), l’affichage s’effectue avec M chiffres dont D décimales – Chaque valeur occupe autant d’octets qu’il y a de caractères dans le nombre.
118
Le langage SQL et phpMyAdmin
Type de données MySQL Les types chaînes de caractères CHAR(M) : chaîne de caractères de longueur fixe de M caractères complétée par des espaces si la donnée est inférieure à M. La longueur indiquée varie de 0 à 255, l’option CHAR(M) BINARY rend la chaîne sensible à la casse lors de recherche. Une colonne de type CHAR(0) n’occupe qu’un seul octet et peut contenir les valeurs NULL et " " chaîne vide (simule un booléen). Chaque valeur occupe M octets VARCHAR(M) : chaîne de caractères de longueur variable comprise entre 1 et 255 , l’option CHAR(M) BINARY rend la chaîne sensible à la casse lors de recherche. La chaîne stockée occupe N+1 octet quand elle comprend N caractères TINYTEXT, TYNIBLOB : texte d’une longueur comprise entre 1 et 255. Le type TYNIBLOB est insensible à la casse. La chaîne occupe N+1 octets pour une longueur de N caractères TEXT, BLOB: texte d’une longueur comprise entre 1 et Le type BLOB est insensible à la casse. La texte occupe N+2 octets pour une longueur de N caractères
119
Le langage SQL et phpMyAdmin
Type de données MySQL Les types chaînes de caractères MEDIUMTEXT, MEDIUMBLOB : texte d’une longueur comprise entre 1 et Le type MEDIUMBLOB est insensible à la casse. La texte occupe N+3 octets pour une longueur de N caractères LONGTEXT, LONGBLOB : texte d’une longueur comprise entre 1 et Le type LONGBLOB est insensible à la casse. La texte occupe N+4 octets pour une longueur de N caractères ENUM(’chaine1’,…,’chaineN’) : choix d’une seule valeur parmi les N possibles. Le type peut définir jusqu’à valeurs. a chaque chaîne correspond une valeur numérique. ENUM(‘vert’,’bleu’,’rouge’) ne permet de remplir cette colonne qu’avec ces couleurs possibles SET (’chaine1’,…,’chaineN’) : choix d’une ou plusieurs valeurs simultanément parmi l’ensemble des N valeurs (max 64). A chaque choix correspond une valeur num égale à 2n-1 si n est la position de la chaîne dans l’ensemble. Si plusieurs valeurs,la valeur numérique correspond à la somme. Ex :5 correspond à la première et troisième choisi.
120
Le langage SQL et phpMyAdmin
Les types de dates et d’heures DATE : au format AAAA-MM-JJ ,chaque enregistrement occupe 3 octets DATETIME : au format AAAA-MM-JJ HH:MM:SS ,chaque enregistrement occupe 8 octets TIMESTAMP[(M)] : au format AAAAMMJJHHMMSS. Calcul possible sur ces variable, ex n’ajoute pas 2118 s mais 21minutes et 18 secondes. Le paramètres M facultatif détermine le nbre de caractères utilisés pour afficher la date. Ce doit être un nbre pair et par défaut est égale à 14, ex TIMESTAMP(2) AA. Chaque enregistrement occupe 4 octets TIME : stocke l’heure au format HH:MM:SS ou HHH:MM:SS pour un intervalle -838:59:59 à 838:59:59, permet d’effectuer des calculs de durée max de 24H. Chaque enregistrement occupe 3 octets YEAR : au format YYYY de 1901 à Si l’année sur deux chiffre de 00 à 69 correspondant aux années 2000 à 2069, et les valeurs 70 à 99 aux années 1970 à Chaque enregistrement occupe 1 octet
121
Le langage SQL et phpMyAdmin
Les options des types de données Chaque attributs d’une table peut avoir comme options : NOTNULL : NULL est une absence de valeur, NOTNULL oblige à indiquer une valeur. NULL n’est pas autorisé pour une clé primaire DEFAULT : valeur par défaut pour l’attribut si aucune valeur n’y est enregistrée, pas disponible pour les types TEXT et BLOB. Ces valeur doivent être des constantes, et impossible d’utiliser des fonctions pour les définir AUTO_INCREMENT : permet d’incrémenter un entier automatiquement à chaque insertion d’enregistrement, a condition que l’attribut soit indexé ou qu’il soit la clé primaire nom tinyint NOT NULL AUTO_INCREMENT, INDEX indnom (nom) créé un attribut nom indexé sous le nom indnom PRIMARY KEY : défini l’attribut comme clé primaire de la table qui sert de référence (ex id), elle est unique nom tinyint NOT NULL AUTO_INCREMENT, PRIMARY KEY (nom) définit un attribut nom et une clé primaire sur un attribut PRIMARY KEY (nom,prénom) Créé une clé primaire composée des deux attributs nom et prenom
122
Le langage SQL et phpMyAdmin
Création de tables Dans une base appelée DEUST, créez les tables suivantes: table etudiant (id_etu,nom,prenom,date_naissance,adresse, ville,mail, moyenne1) table notes (id_inscription, id_etu, note_HTML,note_JAVA, notePHP_SQL, moyenne) Vous réfléchirez aux type de données, aux options des types Écrivez sur papier le code SQL pour créer chacune des deux tables Créer via phpMyAdmin ces tables Observez le code SQL généré et le comparez avec le votre
123
Le langage SQL et phpMyAdmin
Code SQL création table etudiant : CREATE TABLE IF NOT EXISTS `etudiant` ( `id_etu` tinyint(3) unsigned NOT NULL, `nom` varchar(30) NOT NULL, `prenom` varchar(30) NOT NULL, `date_naissance` year(4) NOT NULL, `adresse` varchar(60) NOT NULL, `ville` varchar(30) NOT NULL, `mail` varchar(50) NOT NULL, `moyenne1` tinyint(3) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id_etu`), UNIQUE KEY `nom` (`nom`,`prenom`) )
124
Le langage SQL et phpMyAdmin
Code SQL création table note : CREATE TABLE IF NOT EXISTS `note` ( `id_inscription` smallint(8) unsigned NOT NULL auto_increment, `id_etu` tinyint(3) unsigned NOT NULL , `note_html` tinyint(3) unsigned NOT NULL DEFAULT '0', `note_JAVA` tinyint(3) unsigned NOT NULL DEFAULT '0', `note_SQL_PHP` tinyint(3) unsigned NOT NULL DEFAULT '0', `moyenne` tinyint(3) unsigned NOT NULL DEFAULT '0', UNIQUE KEY (`id_inscription`,`id_etu`), PRIMARY KEY (`id_inscription`) )
125
Le langage SQL et phpMyAdmin
Modification des tables Après sa création d’une table, il est encore possible Ajouter un champ : ALTER TABLE `notes` ADD `note_anglais` TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER `note_java` ; Supprimer un champ: ALTER TABLE `notes`DROP `note_anglais`; Modifier les propriétés d’une table : ALTER TABLE `notes` CHANGE `note_anglais` `note_anglais` TINYINT( 3 ) UNSIGNED NULL DEFAULT '0' Supprimer une table : DROP TABLE ‘test’ L’option IF EXISTS permet d’éviter une erreur au cas où vous tentez de supprimer une table qui n’existe pas ou plus DROP TABLE [IF EXISTS] ‘test’ Renommer une table : RENAME TABLE note TO note_2008
126
Le langage SQL et phpMyAdmin
Modification des tables
127
Le langage SQL et phpMyAdmin
Insertion de données Il existe deux types de données, les données statiques qui seront saisie par l’administrateur du site, et les données saisies par des utilisateurs via des formulaires en ligne.
128
Le langage SQL et phpMyAdmin
Insertion de données Observez le code SQL généré: INSERT INTO `deust`.`etudiant` (`id_etu`, `nom`, `prenom`, `date_naissance`, `adresse`, `ville`, `mail`, `moyenne1`) VALUES ('12', 'Lagaffe', 'gaston', '1965', 'chez franklin', 'paris', '0'), ('56', 'Spirou', '???', '1955', 'avec fantasio', 'quimper', '0'); Vous pouvez utiliser la commande REPLACE à la place de INSERT avec la même syntaxe pour modifier les valeurs d’une ligne sans modifier son identifiant Vous pouvez également modifier les données via phpMyAdmin en choisissant d’afficher le contenu de la table, vous pouvez alors modifier, supprimer… le contenu de la table ligne par ligne
129
Le langage SQL et phpMyAdmin
Sélection de données Il est nécessaire de bien maîtriser les commandes SQL de sélection de données si vous voulez rendre un site dynamique à partir des données d’une base. Vous pouvez sélectionner les données d’une seule table (sélection simple) ou de 2 ou plus de tables (on parle alors de jointure)
130
Le langage SQL et phpMyAdmin
Sélection de données toutes les lignes : SELECT * FROM `etudiant` des villes : SELECT ville FROM `etudiant` affichage des villes sans doublon : SELECT DISTINCT ville FROM `etudiant` affichage des villes sans doublon et ordonnées (ASC croissant ou DESC décroissant): SELECT DISTINCT ville FROM `etudiant` ORDER BY ville ASC des id_etu, nom, prenom : SELECT id_etu,nom,prenom FROM `etudiant` restrition du nombre de ligne SELECT nom,prenom FROM etudiant WHERE `date_naissance`>1970 Forme générale : SELECT col1,col3, … FROM table WHERE condition
131
Le langage SQL et phpMyAdmin
Sélection de données Les opérateurs de comparaison sont applicables à tous les types de données et donnent pour résultats TRUE, FALSE ou NULL = : égalité des nombres ou des chaînes <> ou != : différent de <= ; < ; >= ; > : no comment IS NULL : TRUE si la valeur est nulle IS NOT NULL BETWEEN min AND max : true si la valeur est comprise entre min et max (ex : SELECT nom FROM etudiant WHERE nom NOT BETWEEN ‘A ’ and ‘E’ qui sélectionne tous les noms dont l’initiale n’est pas comprise entre A et E) LIKE ‘motif’ : true si le motif est présent dans l’expression. Le motif peut être suivi d’une option, motif_ équivalent à motif+un caractère quelconque ou motif% équivalent à motif suivi d’un nbre variable de caractères, ou encore %motif% (ex : SELECT prenom FROM etudiant WHERE nom LIKE %gaf%, donnera gaston) NOT LIKE ‘motif’ : négation de l’opérateur LIKE
132
Le langage SQL et phpMyAdmin
Exemple SELECT `id_etu` , `nom` FROM `etudiant` WHERE `nom` LIKE '%ga%'
133
Le langage SQL et phpMyAdmin
Sélection de données Les opérateurs de comparaison sont applicables à tous les types de données et donnent pour résultats TRUE, FALSE ou NULL REGEXP ‘motif’ : true si le motif de l’expression régulière est trouvé dans la valeur d’une colonne (ex: SELECT nom FROM etudiant WHERE prenom REGEXP ‘J[ae].*’ retourne les prénoms commençant par la lettre J suivi d’un a ou un e puis une suite quelconque de lettres) NOT REGEXP ‘motif’ : négation de l’opérateur REGEXP IN(val1,val2,…) : true si la valeur est incluse dans les valeurs listée (ex : SELECT nom FROM note WHERE note_HTML IN (18,19,20) retourne le nom des étudiants ayant une note HTML de 18,19 ou 20) NOT IN(val1,val2,…) : négation de IN ISNULL(expression) : true si la valeur de l’expression est de type NULL COALESCE(col1,col2,…) : retourne la première valeur non NULL de la liste passée en paramètre
134
Le langage SQL et phpMyAdmin
Exemple SELECT `nom` FROM `etudiant` WHERE `nom` REGEXP 'L[ae].*'
135
Le langage SQL et phpMyAdmin
Sélection de données Il est possible de rédiger des conditions plus complexes dans la clause WHERE en combinant plusieurs conditions à l’aide d’opérateurs logiques : NOT ou ! : NON logique (ex : SELECT nom FROM etudiant WHERE NOT(nom=‘lagaffe’) ) AND : ET logique (ex : SELECT ville FROM etudiant WHERE nom =‘lagaffe’ AND prenom=‘gaston’ ) OR : OU logique XOR : OU EXCLUSIF logique Les opérateurs mathématiques sont reconnus : + - * / Les fonctions mathématiques sont gérées par MySQL (-x, ABS(x), ACOS(x), ASIN(x), ATAN(x), ATAN2(x,y) : angle en radian dont la tgt est la valeur x/y, CEILNG(x) : arrondi à l’entier supérieur, COS(x), COT(x), DEGREES(x), EXP(x), FLOOR(x) : arrondi à l’entier inférieur, GREATEST(x,y,…) : avec des chiffres ou des lettres, LEAST(x,y,…), LOG(x), LOG10(x), MOD(X,N), PI(), POWER(x,y), RADIANS(x), RAND(): retourne un nbre compris entre 0 et 1, RAND(n), ROUND(x), SIGN(x), SIN(x), SQRT(x), TAN(x) TRUNCATE(x,n) : arrondit x avec n décimales
136
Le langage SQL et phpMyAdmin
Sélection de données Les fonctions statistiques opèrent sur les données d’une même colonne, elles retournent les résultats calculés sur l’ensemble des valeurs non NULL : AVG(colonne) : retourne la moyenne des valeurs de la colonne COUNT(colonne) : retourne le nbre de ligne non NULL de la colonne, COUNT(*) retourne le nombre total de lignes COUNT(DISTINCT colonne) : retourne le nbre de lignes ayant une valeur non NULL et distincte MAX(colonne) : retourne la valeur maximale de la colonne MIN(colonne) : retourne la valeur minimale de la colonne SUM(colonne) : retourne la somme des valeurs de la colonne ex : SELECT AVG(note_HTML) FROM note SELECT COUNT(mail) FROM etudiant SELECT MAX(moyenne1) FROM etudiant
137
Le langage SQL et phpMyAdmin
Exemple : moyenne des notes HMTL SELECT AVG( `note_html` ) FROM note
138
Le langage SQL et phpMyAdmin
Sélection de données Le regroupement de données obtenu par la clause GROUP BY, on peut alors faire des opérations sur ce groupe comme par exemple des traitements statistiques: SELECT AVG( moyenne1 ) AS moy_par_ville FROM etudiant GROUP BY ville Exemple Hadock : moyenne1=15 et Tintin =0
139
Le langage SQL et phpMyAdmin
Les jointures les jointures consistent à effectuer une sélection de données sur plusieurs tables, à condition que ces tables aient au moins chacune une colonne contenant un même type d’information (ex : id_etu dans les tables etudiant et note) SELECT col1,col2,… FROM table1,table2,… WHERE condition de jointure la condition de jointure est de la forme table1.col1=table2.col2 ex : SELECT nom, prenom, note_html FROM etudiant, note WHERE etudiant.id_etu = note.id_etu ORDER BY nom
140
Le langage SQL et phpMyAdmin
Exportation de table ou de base Possibilité avec phpMyAdmin d’exporter le code de création dans un fichier SQL (extension .sql), ainsi que les données saisies en local pour les déposer sur le serveur d’hébergement Il suffit de sélectionner la table ou la base à exporter puis :
141
Le langage SQL et phpMyAdmin
Exportation de table
142
Le langage SQL et phpMyAdmin
Exportation de table : si la case afficher le résultat est cochée, on récupère le code -- phpMyAdmin SQL Dump -- version -- -- -- Serveur: localhost -- Généré le : Samedi 19 Janvier 2008 à 16:14 -- Version du serveur: -- Version de PHP: 5.2.0 -- Base de données: `deust_08` -- Structure de la table `notes` CREATE TABLE `notes` ( `id_inscription` smallint(5) unsigned NOT NULL auto_increment, `id_etu` tinyint(3) unsigned NOT NULL, `note_html` tinyint(3) unsigned default '0', `note_base` tinyint(3) unsigned default '0', `note_java` tinyint(3) unsigned default '0', `note_anglais` tinyint(3) unsigned default '0', `moyenne` tinyint(3) unsigned default '0', PRIMARY KEY (`id_inscription`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4893 ; -- Contenu de la table `notes` INSERT INTO `notes` (`id_inscription`, `id_etu`, `note_html`, `note_base`, `note_java`, `note_anglais`, `moyenne`) VALUES (2847, 1, 0, 0, 0, 0, 0), (4892, 2, 0, 0, 0, 0, 0), (123, 3, 0, 0, 0, 0, 0);
143
Le langage SQL et phpMyAdmin
Importation de table 1 2 2 3
144
Le langage PHP et MySQL connexion au serveur MySQL
Après avoir vu les commandes SQL permettant de gérer vos bases par le biais de phpMyAdmin; nous allons maintenant apprendre comment exécuter ces commandes via PHP, et rendre dynamique le contenu de votre base. les points que nous allons détailler : connexion au serveur MySQL envoi de requêtes SQL lecture du résultat d’une requête insertion de données dans la base recherche de données dans la base
145
Le langage PHP et MySQL Connexion au serveur MySQL : ajouter des utilisateurs
146
Le langage PHP et MySQL Connexion au serveur MySQL : ajouter des utilisateurs
147
Le langage PHP et MySQL Connexion au serveur MySQL :
Avant de pouvoir travailler sur une base, le script doit permettre de se connecter au serveur MySQl grâce à l’instruction : $idcom =mysql_connect (string $host, string $user, string $pass) $host : nom du serveur défini par l’hébergeur, il s’agit sur votre machine localhost $user : nom sous lequel l’utilisateur est autorisé à accéder au serveur $pass : mot de passe associé à l’utilisateur Si la connexion n’est pas établi, cette fonction retourne FALSE Par mesure de sécurité, il est souhaitable de placer les valeurs des paramètres de connexion dans un fichier séparé, en prenant le soin d’y définir ces paramètres sous forme de constante dans un fichier include (« parametre_connec.inc ») <?php define("MYHOST", "localhost"); define("MYUSER", "root"); define("MYPASS", ""); ?>
148
Le langage PHP et MySQL Connexion au serveur MySQL :
La connexion à une base de données est souvent l’opération la plus coûteuse d’une requête Au lieu d’ouvrir et fermer une connexion à une base de données à chaque requête, on peut garder les connexions ouvertes et les mémoriser pour pouvoir les réutiliser par la suite L’instruction mysql_pconnect() permet d’établir une connexion persistante Certains hébergeurs n’autorisent pas ce type de connexion La connexion prend fin automatiquement à la fin du script PHP, cependant, il est conseillé d’y mettre fin dès que les requêtes voulues sont exécutées afin d’améliorer la vitesse de connexion des autres utilisateurs : boolean mysql_close($idcom) Si plusieurs bases sont présentent sur le serveur, on peut préciser le nom de la base à clore : mysql_select_db($idbase,$idcom)
149
Le langage PHP et MySQL Connexion au serveur MySQL :
Pour vérifier que la connexion est toujours active, vous disposez de la fonction : boolean mysql_ping ($idcom) si la connexion est fermée, il y a reconnexion automatique Script de connexion : <?php $idcom=mysql_connect("localhost","root",""); $base="deust"; if($idbase) echo "ca marche"; if(!$idbase ||!$idcom){ echo "Problème de Connexion"; } mysql_close($idcom); ?> <?php include("parametre_connec.inc.php"); $idcom=mysql_connect(MYHOST,MYUSER,MYPASS); $base="deust"; if($idbase) echo "ca marche"; if(!$idbase ||!$idcom){ echo "Problème de Connexion"; } mysql_close($idcom); ?>
150
Le langage PHP et MySQL Connexion au serveur MySQL :
Vous avez intérêt à créer une fonction dans un fichier connexion.inc.php : Les codes utilisant cette fonction : include ("parametres_connec.inc.php "); $idcom=connexion("nom_base", "myparam"); <?php function connexion($base,$param){ include_once($param.".inc.php"); $idcom=mysql_connect(MYHOST,MYUSER,MYPASS); $idbase=mysql_select_db($base); if (!$idcom || !$idbase) { echo " probleme de connexion "; } return $idcom; ?>
151
Le langage PHP et MySQL Envoi de requêtes SQL
pour envoyer une requête, vous devez utiliser la fonction suivante : mysql_query($requete,$idcom) Le premier paramètre $requete est une chaîne contenant le code de la requête, et ne doit pas se terminer par un ; $idcom est l’identifiant de connexion et est facultatif si une seule connexion est ouverte la fonction retourne un identifiant, si la requête contient des commandes SELECT, l’identifiant permet d’accéder aux données fournies par la requête; pour les autres requêtes la fonction retourne TRUE si la requête est bien exécutée, sinon elle retourne FALSE
152
Le langage PHP et MySQL Envoi de requêtes SQL : exemple <?php
include("connexion.inc.php "); $idcom=connexion("etudiant ", "myparam "); $requete=" SELECT nom FROM etudiant WHERE NOT(nom=‘lagaffe’); if (!$idresult) { echo "lecture impossible "; } else //lecture des résultats de la requete ?>
153
$result=@mysql_query($requete,$idcom);
Le langage PHP et MySQL Lecture du résultat d’une requête $requete Méthode 1 : récupération du nombre de colonnes et de lignes: int mysql_num_fields($result) int mysql_num_rows ($result) lecture d’une ligne du tableau : array mysql_fetch_array (resource result_identifier, int result_type ) retourne un tableau qui contient la ligne demandée, ou FALSE s'il ne reste plus de ligne. L'option result_type de mysql_fetch_array() est une constante qui peut prendre les valeurs suivantes : MYSQL_ASSOC, MYSQL_NUM et MYSQL_BOTH. libération de l’espace mémoire occupé si plus besoin des données: int mysql_free_result (resource result_identifier)
154
Le langage PHP et MySQL <?php include("connexion.inc.php"); $idcom
$requete="SELECT * FROM etudiant"; $nb_col=mysql_num_fields($result); //nb de colonne du tableau resultat $nb_ligne=mysql_num_rows($result); //nb de ligne du tableau resultat //affichage du resultat de la requete sous forme de tableau echo "<table border='1'>"; $ligne=mysql_fetch_array($result,MYSQL_ASSOC); foreach($ligne as $nomcol=>$valcol) echo "<th>$nomcol</th>"; while($ligne=mysql_fetch_array($result,MYSQL_NUM)){ echo "<tr>"; foreach($ligne as $valeur) echo "<td>$valeur</td>"; echo "</tr>"; } echo "</table>"; mysql_free_result($result); //liberation de la memoire occupee mysql_close($idcom); //arret de la connexion à la base ?>
155
$result=@mysql_query($requete,$idcom);
Le langage PHP et MySQL Lecture du résultat d’une requête $requete Méthode 2 récupération du nombre de colonnes et de lignes: int mysql_num_fields($result) int mysql_num_rows ($result) récupération des intitulés des champs de la table : string mysql_field_name ($result, int field_index) récupération du contenu d’une ligne: array mysql_fetch_row ($result) libération de l’espace mémoire occupé si plus besoin des données: int mysql_free_result (resource result_identifier)
156
Le langage PHP et MySQL <?php include("connexion.inc.php");
$idcom=connexion("deust","parametre_connec"); $requete="SELECT * FROM etudiant"; $nb_col=mysql_num_fields($result); //nb de colonne du tableau resultat echo "<br>nb de col :".$nb_col; $nb_ligne=mysql_num_rows($result); //nb de ligne du tableau resultat echo "<br>nb de ligne :".$nb_ligne; //affichage du resultat de la requete sous forme de tableau echo "<table border='1'> <tr>"; for($i=0;$i<$nb_col;$i++) echo "<th>".mysql_field_name($result,$i)."</th>"; echo " </tr>"; for($i=0;$i<$nb_ligne;$i++){ $ligne=mysql_fetch_row($result); echo "<tr>"; for($j=0;$j<$nb_col;$j++) echo "<td>".$ligne[$j]."</td>"; } echo "</table>"; mysql_free_result($result); //liberation de la memoire occupee par la variable mysql_close($idcom); //arret de la connexion à la base ?>
157
$result=@mysql_query($requete,$idcom);
Le langage PHP et MySQL Lecture du résultat d’une requête $requete Méthode 3 : récupération des valeurs dans un objet récupération du nombre de colonnes et de lignes: int mysql_num_fields($result) int mysql_num_rows ($result) récupération des intitulés des champs de la table : object mysql_fetch_field ($result, int field_offset ) Retourne les données enregistrées dans une colonne sous forme d'objet. libération de l’espace mémoire occupé si plus besoin des données: int mysql_free_result (resource result_identifier)
158
Le langage PHP et MySQL <?php include("connexion.inc.php");
$idcom=connexion("deust_08","parametre_connec"); $requete="SELECT * FROM etudiant"; $nb_col=mysql_num_fields($result); //nb de colonne du tableau resultat $nb_ligne=mysql_num_rows($result); //nb de ligne du tableau resultat //affichage du resultat de la requete sous forme de tableau echo "<table border='1'> <tr>"; for($i=0;$i<$nb_col;$i++) echo "<th>".mysql_fetch_field($result,$i)->name."</th>"; echo " </tr>"; for($i=0;$i<$nb_ligne;$i++){ $ligne=mysql_fetch_object($result); echo "<tr>"; for($j=0;$j<$nb_col;$j++){ $nom_col=mysql_fetch_field($result,$j)->name; echo "<td>".$ligne->$nom_col."</td>"; } echo "</table>"; mysql_free_result($result); //liberation de la memoire occupee par la variable mysql_close($idcom); //arret de la connexion à la base ?>
159
Le langage PHP et MySQL Insertion de données dans la base
La requête sql INSERT INTO permet d’insérer dans la table « test » les valeurs spécifiées par VALUES: <?php include("connexion.inc.php"); $idcom=connexion("deust_08","parametre_connec"); $requete = 'INSERT INTO test VALUES (NULL, \'test1 nom\');'; $result=mysql_query($requete,$idcom); if(!$result) echo "Erreur d'insertion"; else echo "l'étudiant à été enregistré sous le numéro :".mysql_insert_id(); //arret de la connexion à la base mysql_close($idcom); ?>
160
Le langage PHP et MySQL Insertion de données dans la base
Via un formulaire : <?php echo "<form action='insertion_donees2.php' method='post'> Nom : <input type='text' name='nom' size='40' maxlenght='30'/> <input type='submit' value='envoyer'> </form>"; include("connexion.inc.php"); if (!empty($_POST["nom"])) { $id_etudiant="/N"; $nom=$_POST["nom"]; $requete = "INSERT INTO test VALUES (NULL, '$nom');"; $idcom=connexion("deust_08","parametre_connec"); $result=mysql_query($requete,$idcom); if(!$result) echo "Erreur d'insertion"; else echo "l'étudiant à été enregistré sous le numéro :".mysql_insert_id(); //arret de la connexion à la base mysql_close($idcom); } else echo "formulaire à compléter"; ?>
161
Le langage PHP et MySQL Modification de données dans la base
Utilisation de l’instruction UPDATE: UPDATE `table` SET `champ` = ‘valeur’ WHERE condition; Application : Afficher les notes obtenues par chaque étudiant (id_etu) puis calculer la moyenne obtenu par chaque étudiant dans la table notes et l’afficher dans le même tableau Enregistrer cette moyenne dans le champ moyenne de la table notes Enregistrer cette moyenne dans le champ moyenne1 de la table etudiant
162
Le langage PHP et MySQL Affichages des notes et de la moyenne <?php
include("connexion.inc.php"); $idcom=connexion("deust","parametre_connec"); $requete="SELECT `id_etu`,`note_html`,`note_base`,`note_java` FROM note"; $nb_col=mysql_num_fields($result); $nb_ligne=mysql_num_rows($result); echo "<table border='1'><tr>"; for($i=0;$i<$nb_col;$i++) echo "<th>".mysql_field_name($result,$i)."</th>"; echo "<th>moyenne</th>"; echo " </tr>"; for($i=0;$i<$nb_ligne;$i++){ $ligne=mysql_fetch_row($result); echo "<tr>"; $sum=0; for($j=0;$j<$nb_col;$j++) echo "<td>".$ligne[$j]."</td>"; for($j=1;$j<$nb_col;$j++) $sum+=$ligne[$j]; echo "<td>".($sum/3)."</td>"; echo "</tr>"; } echo "</table>"; mysql_free_result($result); mysql_close($idcom); ?>
163
Le langage PHP et MySQL Enregistrer cette moyenne dans le champ moyenne <?php include("connexion.inc.php"); $idcom=connexion("deust","parametre_connec"); $requete="SELECT `id_etu`,`note_html`,`note_base`,`note_java` FROM note"; $nb_col=mysql_num_fields($result); $nb_ligne=mysql_num_rows($result); echo "<table border='1'><tr>"; for($i=0;$i<$nb_col;$i++) echo "<th>".mysql_field_name($result,$i)."</th>"; echo "<th>moyenne</th>"; echo " </tr>"; for($i=0;$i<$nb_ligne;$i++){ $ligne=mysql_fetch_row($result); echo "<tr>"; $sum=0; for($j=0;$j<$nb_col;$j++) echo "<td>".$ligne[$j]."</td>"; for($j=1;$j<$nb_col;$j++) $sum+=$ligne[$j]; $moy=$sum/3; $id_etu=$ligne[0]; echo "<td>".$moy."</td>"; echo "</tr>"; $inser_moy="UPDATE `note` SET `moyenne` = $moy WHERE `note`.`id_etu` =$id_etu"; } echo "</table>"; mysql_free_result($result); mysql_close($idcom); ?>
164
Le langage PHP et MySQL Enregistrer cette moyenne dans le champ moyenne1 de la table etudiant //modif de la table notes $inser_moy="UPDATE `notes` SET `moyenne` = $moy WHERE `notes`.`id_etu` =$id_etu LIMIT 1; "; //modif de la table etudiant $inser_moy="UPDATE `etudiant` SET `moyenne1` = $moy WHERE `etudiant`.`id_etu` =$id_etu LIMIT 1; ";
165
Le langage PHP et MySQL Images et base de données: 2 possibilités
Soit stocker les adresses des images dans la base, et vous les afficher via leur URL Soit enregistrer les images dans la base, en utilisant un des quatre types BLOB (Binary Large Object) en fonction du fichier à renregistrer Première étape : créer une table CREATE TABLE `image` ( `numero` INT NOT NULL AUTO_INCREMENT , `img_nom` VARCHAR( 50 ) NOT NULL , `img_taille` VARCHAR( 20 ) NOT NULL , `img_type` VARCHAR( 20 ) NOT NULL , `img_blob` BLOB NOT NULL , PRIMARY KEY ( `numero` ) ) Deuxième étape : charger les images via un formulaire…en échappant les caractères spéciaux que peut contenir un fichier binaire
166
Le langage PHP et MySQL <?php
include ("../include/connexion.inc.php"); if ( isset($_FILES['image']) ) { $fichier = false; $taille_max = ; $fichier = is_uploaded_file ($_FILES['image']['tmp_name']); if ( !$fichier ) echo "Problème de transfert"; else $img_taille = $_FILES['image']['size']; if ( $img_taille > $taille_max ) echo "Trop gros !"; $img_type = $_FILES['image']['type']; $img_nom = $_FILES['image']['name']; $idcom=connexion("site_web","parametre_connec"); $img_blob = file_get_contents ($_FILES['image']['tmp_name']); $requete = "INSERT INTO image (img_nom, img_taille, img_type, img_blob) VALUES ('".$img_nom."','".$img_taille."','".$img_type."','".addslashes ($img_blob)."') "; $fichier = mysql_query ($requete) or die (mysql_error ()); } echo " Selectionner une image <form enctype=\"multipart/form-data\" action=\"#\" method=\"post\"> <input type=\"hidden\" name=\"taille_max\" value=\"100000\" /> <input type=\"file\" name=\"image\" size=50 /> <input type=\"submit\" value=\"Envoyer\" /> </form>"; ?>
167
Le langage PHP et MySQL Troisième étape : lire les images, on affiche la liste d’images avec un lien pour afficher l’image sélectionnée <?php include ("../include/connexion.inc.php"); $idcom=connexion("site_web","parametre_connec"); $requete = "SELECT img_nom, numero FROM image ORDER BY img_nom"; $result = mysql_query ($requete) or die (mysql_error ()); $nb_ligne=mysql_num_rows($result); for($i=0;$i<$nb_ligne;$i++) { $col= mysql_fetch_row ($result); echo "<a href=\"affichage_image.php?id=".$col[1]."\">".$col[0]."</a><br />"; } ?>
168
Le langage PHP et MySQL Et on l’affiche : on envoie l'entête « Content-type » (type de contenu) avec la fonction header, puis on affiche le contenu binaire de l'image. <?php if ( isset($_GET['num']) ) { $num=$_GET['num']; include ("../include/connexion.inc.php"); $idcom=connexion("site_web","parametre_connec"); $requete = "SELECT numero, img_type, img_blob FROM image WHERE numero = ".$num; $result = mysql_query ($requete) or die (mysql_error ()); $col = mysql_fetch_row ($result); header ("Content-type: ".$col[1]); echo $col[2]; } else echo "problème"; ?>
Présentations similaires
© 2025 SlidePlayer.fr Inc.
All rights reserved.