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.
4
Langage PHP Intérêts Il est libre, portable et facile à comprendre.
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 en fera sans doute un des langages privilégiés dans les entreprises.
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 4 Navigateur web
6
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
7
Langage PHP Les outils EasyPHP : outils que nous allons utiliser
8
Langage PHP Les outils : EasyPHP
9
Langage PHP Votre première page en PHP: <?php echo " bonjour" ?>
N’oubliez pas que l’on génère une page html echo " <html> <body> bonjour </body> </html> "; Penser à visualiser le code généré.
10
Langage PHP Ou encore : <html> <head>
<title>Bonjour</title> </head> <body> Il est exactement : <? echo date(" H:i:s ");?> </body> </html>
11
Langage PHP Exercice : Configuration du serveur
But : Afficher la configuration du serveur. Intérêt : Connaître les variables à disposition du programmeur. Référence : phpinfo(). Fichier : info.php. Indication : Écrire le programme info.php qui doit afficher la configuration du serveur. Aller plus loin : Modifier la couleur du fond de la fenêtre (<body bgcolor=…>).
12
Langage PHP Exercice : Configuration du serveur <? // 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" Variables remplacées :entre " " : \n, \r, \t, \\, \$,
14
Langage PHP Le langage : Les variables, constantes et types
Les variables scalaires contiennent qu’une seule valeur contrairement aux tableaux. Le nom d’une variable doit commencer par un _ ou une lettre, suivi de lettre ou de chiffres ou de _ 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 $chaines$’; echo " un reel : $reel<BR> un entier : $entier <BR> une chaine : $chaine <BR> une phrase : $phrase1 <BR> guillemets : $phrase2 <BR> "; ?> un reel : 0.3 un entier : 22 une chaine : bonjour! une phrase : bonjour bonjour !! guillemets : bonjour $chaine$ Donner l’exemple : echo "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): <? $chaine1= "Bonjour"; $chaine2=&$chaine1; //reference $chaine1 par $chaine2 $chaine2= "$chaine2 tout le monde "; print ("$chaine1 \n$chaine2 "); ?> 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 <?
Variable dynamique : il est possible en PHP de construire une variable à partir d’une autre variable qui fournit un nom en dynamique <? $nom_au _vol= "nom_d_oiseau "; //creation de la variable qui donnera le nom $$nom_au_vol=‘pigeon’; //on donne une valeur à la variable dynamique echo $nom_d_oiseau; //le programme affichera Pigeon ?> $a= "bonjour "; $$a=‘monsieur’; echo "$a ${$a}"; //affiche bonjour monsieur echo "$a $bonjour" ; //affiche bonjour monsieur
20
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 $REQUEST_URI : l’URI qui a été fourni pour accéder à cette page … 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())
21
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
22
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 () : <? define (‘PI’, ); define (‘MAIL’, ?> Rq : la constante ne peut être utilisée dans les guillemets echo " la valeur de Pi est ".PI."<br>"; echo " la valeur de Pi est PI<br>"; Affichage : la valeur de Pi est la valeur de Pi est PI
23
Langage PHP Les opérateurs :
arithmétiques +, -, * , / (quotient), % (reste) d’assignation = : <? $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) d’exécution :le guillemet oblique ‘ ‘, PHP essaiera d’exécuter le contenu des guillemets obliques comme une commande shell : <?php $output= ‘ ls –al ‘; echo $output;
24
Langage PHP Les opérateurs : d’incrémentation/décrémentation :
++$a (pré-incrémente) $a++ (post-incrémente) --$a (pré-décrémente) $a–- (post-décrémente) 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 Leur précédence : , &= |= ^= ~= & Or <<= >>= == != === (non associative) Xor ? : <<= >>= And || Print && * / % = += -= *= /= | ! ~++ -- .= %= ^
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 égale à b " ;
26
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++; } ?> <? while ($i <= 10) : echo $i; $i++; Endwhile;
27
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; for ($i=1;;$i++) { if ($i >10) { break; } $i=1; For (;;) { if ($i>10) { echo $i++; ?>
28
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;
29
Langage PHP Le langage : Les structures de contrôles <?php
Application : boucle for imbriquées, table de multiplication 19 <?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> "; ?>
30
Langage PHP Le langage : Les structures de contrôles <?php
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éinitialiser.
31
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.\n "; } ?> Affichage : $a[un] => 1. $a[deux] => 2. $a[trois] => 3. $a[dix-sept] => 17.
32
Langage PHP Le langage : Les structures de contrôles <?php $i=0;
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++;
33
Langage PHP Le langage : Les structures de contrôles <?php
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/> "; } ?>
34
Langage PHP Le langage : Les structures de contrôles <?php
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 "; } ?>
35
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.
36
Langage PHP Le langage : Les chaînes de caractères
Une chaîne peut être spécifiée de trois manières différentes 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: \n nouvelle ligne \r retour à la ligne \t tabulation horizontale \\ antislash \$ caractère $ \“ guillemets doubles Syntaxe Heredoc : <<< suivi d’un identifiant arbitraire, puis de la chaine $str = <<<EOD exemple de chaîne Sur plusieurs lignes EOD;
37
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 $str=‘ceci est un test’; $first=$str{0}; $last=$str{strlen($str)-1}; 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 ";
38
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 strlower ($chaine) : conversion en minuscule stroupper ($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.
39
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["foo"] (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.
40
Langage PHP Le langage : Les tableaux $tab=array("b", "o", "n");
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.
41
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
42
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 …
43
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 : Ou alors en utilisant l’instruction FOREACH qui se décline en deux versions :
44
Le langage : Les tableaux
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…
45
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 /> "; ?>
46
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 /> "; ?>
47
Le langage : Les fonctions
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 …
48
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…
49
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.
50
Langage 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.
51
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>" ; ?>
52
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() ; ?>
53
Langage PHP Le langage : Les formulaires Exemple : Entrées textuelles
<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>
54
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] >
55
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.
56
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
57
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]
58
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
59
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
60
Langage PHP Exemple 3: <form action="image.php" method="post">
Cliquez sur l’image :<br> <input type="image" src="image.gif" name="bout"> </form> Dans image.php $_REQUEST["bout_x"] et $_REQUEST[" bout_y"] ont pour valeur les coordonnées du point de l’image sur lequel l’utilisateur a cliqué
61
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.
62
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>
63
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() ; ?>
64
Langage PHP Exercice : Exemple de formulaire avec saisie de champs obligatoires (nom*, prenom,mail*)
65
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> "; ?>
66
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.
67
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.
68
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() ;
69
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
70
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)
71
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.
72
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).
73
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
74
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 '/../'.
75
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();
76
Le langage : Cookies Langage PHP
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
77
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/>"; } ?> 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
78
Le langage : sessions Langage PHP
La gestion des sessions avec PHP est un moyen de sauver des informations entre deux accès. Cela permet notamment de construire des applications personnalisées, et d'accroître l'attrait de votre site. Chaque visiteur qui accède à votre site se voit assigner un numéro d'identifiant, appelé plus loin "identifiant de session". Celui−ci est enregistré soit dans un cookie, chez le client, soit dans l'URL. Aucun code HTML avant le démarrage d'une session !! Les sessions vous permettront d'enregistrer des variables pour les préserver et les réutiliser tout au long de la visites de votre site. Lorsqu'un visiteur accédera à votre site, PHP vérifiera si une session a déjà été ouverte. Si une telle session existe déjà, l'environnement précédent sera recréé. Attention pensez à supprimer les sessions si nécessaires par exemple <?php session_unset(); ?> supprime toutes les sessions
79
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"] ;
80
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") ;
81
Langage PHP Le langage : Programmation objet
Les Classes : Une classe est un ensemble de variables et de fonctions travaillant sur ces variables Un objet est une instance particulière d’une classe Grâce à la notion d’héritage le code est réutilisable et reste modulaire Possibilité de surcharger des méthodes (fonctions) d’une classe Attention ! pas d’appel automatique des constructeurs des classes ancêtres ! Pas de destructeur Dans une méthode, $this désigne l’objet dont on exécute la méthode
82
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…
83
Langage PHP Utilisation de templates :
On veut séparer le contenant du contenu Pour pouvoir changer le " look " de l’application sans modifier l’application elle-même Pour faire travailler différentes personnes (développeurs, infographistes) en même temps sur un projet Les solutions Utiliser des feuilles de style (CSS, pas toujours suffisant) Adopter un environnement de développement qui offre cette possibilité Définir des fonctions pour la mise en page Se servir de " templates " Penser à structurer vos applications La mise en page dans un fichier Le menu dans un aut Utilisez les fonctions Pensez aux inclusions de fichiers
84
Langage PHP Exemple de templates : <html>
<head><title>__TITRE__</title></head> <body> <h1>__TITRE__</h1> <form action=__ACTION__ method="POST"> date : <input type="text" name="jour" size="2" value="__JOUR__"> / <input type="text" name="mois" size="2" value="__MOIS__"> / <input type="text" name="annee" size="4" value="__ANNEE__"> <select name="type"> <option value="">-- tous --</option> __TYPES__ </select> <input type="submit" name="go" value="chercher"> </form><hr> <table border="1"> <tr><th>Chaîne</th><th>Horaire</th><th>Émission</th><th>Type</th></tr> __RESULTATS__ </table> </body> </html>
85
Langage PHP Utilisation du templates : Utilisation de templates :
function affichage($titre,$jour,$mois,$annee,$types,$resultats) { // lecture du template dans un tableau foreach ( file("modeles/modele4.html") as $ligne ) // replacement des tokens du template par les valeurs à afficher $ligne = str_replace("__TITRE__",$titre,$ligne) ; $ligne = str_replace("__ACTION__",$_SERVER["PHP_SELF"],$ligne) ; $ligne = str_replace("__JOUR__",$jour,$ligne) ; $ligne = str_replace("__MOIS__",$mois,$ligne) ; $ligne = str_replace("__ANNEE__",$annee,$ligne) ; $ligne = str_replace("__TYPES__",$types,$ligne) ; $ligne = str_replace("__RESULTATS__",$resultats,$ligne) ; echo $ligne ; } Utilisation de templates : <html> <head><title>__TITRE__</title></head> <body> <h1>__TITRE__</h1> <form action=__ACTION__ method="POST"> date : <input type="text" name="jour" size="2" value="__JOUR__"> / <input type="text" name="mois" size="2" value="__MOIS__"> / <input type="text" name="annee" size="4" value="__ANNEE__"> <select name="type"> <option value="">-- tous --</option> __TYPES__ </select> <input type="submit" name="go" value="chercher"> </form> <hr> <table border="1"> <tr><th>Chaîne</th><th>Horaire</th><th>Émission</th><th>Type</th></tr> __RESULTATS__ </table> </body>
86
Fonction de redirection
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); ?>
87
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>"; ?>
88
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
89
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"); ?>
90
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> ";
91
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
92
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
93
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
94
Le langage SQL et phpMyAdmin
2- visualiser une base 1- création d’une base
95
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
96
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
97
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
98
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.
99
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
100
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.
101
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
102
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
103
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
104
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`) )
105
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`) )
106
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
107
Le langage SQL et phpMyAdmin
Modification des tables
108
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.
109
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
110
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)
111
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
112
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
113
Le langage SQL et phpMyAdmin
Exemple SELECT `id_etu` , `nom` FROM `etudiant` WHERE `nom` LIKE '%ga%'
114
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
115
Le langage SQL et phpMyAdmin
Exemple SELECT `nom` FROM `etudiant` WHERE `nom` REGEXP 'L[ae].*'
116
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
117
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
118
Le langage SQL et phpMyAdmin
Exemple : moyenne des notes HMTL SELECT AVG( `note_html` ) FROM note
119
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
120
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
121
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 :
122
Le langage SQL et phpMyAdmin
Exportation de table
123
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);
124
Le langage SQL et phpMyAdmin
Importation de table 1 2 2 3
125
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
126
Le langage PHP et MySQL Connexion au serveur MySQL : ajouter des utilisateurs
127
Le langage PHP et MySQL Connexion au serveur MySQL : ajouter des utilisateurs
128
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", ""); ?>
129
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)
130
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); ?>
131
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; ?>
132
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
133
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 ?>
134
$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)
135
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 ?>
136
$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)
137
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 ?>
138
$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)
139
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 ?>
140
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); ?>
141
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"; ?>
142
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
143
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); ?>
144
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); ?>
145
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; ";
146
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
147
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>"; ?>
148
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 />"; } ?>
149
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.