Académique Documents
Professionnel Documents
Culture Documents
LES CONSTANTES...............................................................................................................30 Dfinition : ............................................................................................................................................ 30 Constantes pr-dfinies ......................................................................................................................... 30 FORMULAIRES HTML (CRATION)....................................................................................31 Principe.................................................................................................................................................. 31 Structure Gnrale................................................................................................................................. 32 Le tag INPUT type ="text".................................................................................................................... 33 Variante ............................................................................................................................................. 33 Le tag INPUT TYPE="radio" ............................................................................................................... 34 Le tag INPUT TYPE="checkbox" ........................................................................................................ 34 Le tag SELECT ..................................................................................................................................... 35 le tag TEXTAREA ................................................................................................................................ 36 Annulation ou Envoi ............................................................................................................................. 36 Rcupration des donnes des champs :................................................................................................ 37 Autre Exemple................................................................................................................................... 38 Traitement de formulaire :..................................................................................................................... 39 FORMULAIRES (PRSENTATION) .....................................................................................40 LES FONCTIONS ..................................................................................................................41 Principe d'utilisation :............................................................................................................................ 41 Syntaxe :................................................................................................................................................ 41 Valeur de retour simple ..................................................................................................................... 41 Exemple :........................................................................................................................................... 42 Valeurs de retour multiples ............................................................................................................... 43 PASSAGE DE PARAMETRES..............................................................................................44 Principe.................................................................................................................................................. 44 PORTEE DES VARIABLES ..................................................................................................46 Porte locale ou globale : ...................................................................................................................... 46 Variables statiques : .............................................................................................................................. 47 LES CONDITIONS.................................................................................................................49 Oprateurs de comparaison < > ==: ...................................................................................................... 49 Logiques || && : .................................................................................................................................... 49 Le if - else :............................................................................................................................................ 51 Exemple :........................................................................................................................................... 53 Le Switch : ............................................................................................................................................ 54 Exemple............................................................................................................................................. 55 LES CHAINES ET LES CARACTERES................................................................................56 Test d'un champ vide : (la fonction empty)........................................................................................... 56 Fonction empty :................................................................................................................................ 56 1 mthode : ...................................................................................................................................... 56 2 mthode : ...................................................................................................................................... 57 Conversion et extraction dans une chane : ........................................................................................... 58 Fonction stripslaches : ....................................................................................................................... 58 Fonction strtolower() :....................................................................................................................... 58 Fonction substr() : ............................................................................................................................. 58 Exemple............................................................................................................................................. 59 Recherche d'un caractre dans une chane ............................................................................................ 60 Fonction ereg() : ................................................................................................................................ 60
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 3
Recherche d'une expression dans une chane ........................................................................................ 61 Recherche dans une plage de caractres............................................................................................ 62 Les caractres gnriques.................................................................................................................. 62 Fonctions connexes ........................................................................................................................... 63 Exemple :........................................................................................................................................... 63 LES ITERATIONS (BOUCLES).............................................................................................64 for : ........................................................................................................................................................ 64 While : ................................................................................................................................................... 65 Exemple............................................................................................................................................. 66 LES TABLEAUX....................................................................................................................67 Principes de base : ................................................................................................................................. 67 Manipulation de tableau une dimension :........................................................................................... 68 Crer - Afficher un tableau (scalaire)................................................................................................ 68 Exemple............................................................................................................................................. 69 Crer - Afficher un tableau (associatif) ................................................................................................. 70 Tableau multidimensionnel : ................................................................................................................. 72 Manipulation de tableau multidimensionnel : ....................................................................................... 72 ENVOYER UN MAIL..............................................................................................................74 Rappels de principes :............................................................................................................................ 74 Fonction mail() :................................................................................................................................ 74 Une fonction personnalis email() : .................................................................................................. 76 LES DATES ...........................................................................................................................77 Calcul de date - time :............................................................................................................................ 77 Fonction time() :................................................................................................................................ 77 Convertion de date - mktime : ............................................................................................................... 77 Fonction mktime() :........................................................................................................................... 77 Contrler de date - checkdate ................................................................................................................ 78 Fonction checkdate() : ....................................................................................................................... 78 Exemple............................................................................................................................................. 78 La fonction getdate :.............................................................................................................................. 79 Fonction getdate() : ........................................................................................................................... 79 Affichage et formatage d'une date strftime()......................................................................................... 79 Fonction strftime() :........................................................................................................................... 79 Formatage en franais setlocale()...................................................................................................... 81 Affichage et formatage d'une date : date() ............................................................................................ 81 Quelques formats :............................................................................................................................. 81 Quelques exemples :.......................................................................................................................... 82 LES FICHIERS.......................................................................................................................83 Principes :.............................................................................................................................................. 83 Ouverture de fichier : fopen()................................................................................................................ 83 Fonction fopen() :.............................................................................................................................. 83 Fermer un fichier : fclose().................................................................................................................... 84 Fonction fclose() : ............................................................................................................................. 84 Die : ....................................................................................................................................................... 84 Ecriture dans un fichier : fputs() - fwrite() ............................................................................................ 85 Fonction fputs() : ............................................................................................................................... 85 Lecture dans un fichier : fgets() feof() fseek() ...................................................................................... 86 Fonction fgets() : ............................................................................................................................... 86 Fonction feof() : ................................................................................................................................ 86 Fonction fseek() : .............................................................................................................................. 87
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 4
PHP ET LES BASES DE DONNEES ....................................................................................90 Pourquoi une Base de Donnes ? : ........................................................................................................ 90 Principe de ODBC :............................................................................................................................... 91 Prise en charge native :.......................................................................................................................... 92 MYADMIN & NOTIONS DE MYSQL .....................................................................................93 Environnement phpMyadmin (MySQL) : ............................................................................................. 93 Crer une Base : .................................................................................................................................... 94 Supprimer une Base : ............................................................................................................................ 94 Crer une Table : ................................................................................................................................... 95 Modifier une Table :.............................................................................................................................. 96 Supprimer une Table : ........................................................................................................................... 96 Ajouter-Modifier un enregistrement : ................................................................................................... 97 Les diffrents types de donnes Mysql ............................................................................................. 99 PHP ET MYSQL...................................................................................................................101 Principe d'accs une base MySQL : ................................................................................................. 101 Se connecter au serveur de base de donnes MySQL : ....................................................................... 101 Fonction mysql_connect() :............................................................................................................. 101 Fonction mysql_close() : ................................................................................................................. 102 Slection d'une base de donnes :........................................................................................................ 103 Fonction mysql_select_db() : .......................................................................................................... 103 Passer des requtes MYSQL : ............................................................................................................. 104 Fonction mysql_query() : ................................................................................................................ 104 1 exemple de requte MySql : INSERT ............................................................................................ 104 2 exemple de requte MySql : SELECT............................................................................................ 106 TRAITEMENT DE FORMULAIRE CREATION DE LA BASE............................................107 Introduction : ...................................................................................................................................... 107 Le formulaire de saisie : ...................................................................................................................... 108 Cration de la base et de la table : ....................................................................................................... 109 Le script ajout d'inscription (stockage dans la table): ......................................................................... 110 Include de fichier php :........................................................................................................................ 111 Cration d'un fichier connexion pour notre gestion ........................................................................ 111 Insrer un fichier texte dans une table................................................................................................. 112 Objectif :.......................................................................................................................................... 112 Insertion du fichier texte.................................................................................................................. 112 TRAITEMENT DE FORMULAIRE GESTION DE LA BASE ..............................................113 Afficher toute la base : ........................................................................................................................ 113 Utiliser la fonction php : mysql_fetch_row($result) ....................................................................... 114 Trier (Classer) toute la base : .............................................................................................................. 114 Afficher toute la base dans un tableau (1 variante): .......................................................................... 115 Afficher toute la base dans un tableau (2 variante): .......................................................................... 116 Rechercher un enregistrement :........................................................................................................... 117 Supprimer un enregistrement : ............................................................................................................ 118 La requte sql : DELETE ................................................................................................................ 118 Modifier un enregistrement :............................................................................................................... 119 Complments SELECT - Filtrer une base :......................................................................................... 122 LISTE DE QUELQUES FONCTIONS MYSQL PHP............................................................124 mysql_close......................................................................................................................................... 124 mysql_connect..................................................................................................................................... 124 mysql_fetch_row ................................................................................................................................. 125 mysql_query ........................................................................................................................................ 125
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 5
mysql_num_rows ................................................................................................................................ 125 mysql_select_db .................................................................................................................................. 126 LISTE DE QUELQUES ELEMENTS SQL MYSQL .............................................................127 Insert:................................................................................................................................................... 127 Delete: ................................................................................................................................................. 127 Update: ................................................................................................................................................ 127 Select: .................................................................................................................................................. 128 QUELQUES VARIABLES D'ENVIRONNEMENT ...............................................................129
implode($argv," ")........................................................................................................................... 155 $argv................................................................................................................................................ 155 Liste des fonctions sur les images ....................................................................................................... 156 LIAISON ODBC ACCESS 97 MYSQL ................................................................................158 Objectif :.............................................................................................................................................. 158 Technique ............................................................................................................................................ 158 Utilisation ............................................................................................................................................ 161 Conditions pour que cela fonctionne :............................................................................................. 161 Lier une table locale et une table distante ....................................................................................... 161 Exportation d'une base locale access vers mysql ................................................................................ 163 FONCTIONS MYSQL ..........................................................................................................164 FONCTIONS POSTGRESQL ..............................................................................................166
Page 7
PHP ?
Ce qu'est php
PHP (officiellement "PHP: Hypertext Preprocessor") est un langage de script HTML, qui fonctionne cot serveur. Il est noter la diffrence avec les autres scripts CGI crits dans d'autres langages tels que le Perl ou le C : Au lieu d'crire un programme avec de nombreuses lignes de commandes afin d'afficher une page HTML, vous crivez une page HTML avec du code inclus l'intrieur afin de raliser une action prcise Ce qui distingue le PHP des langages de script comme le Javascript est que le code est excut sur le serveur. Si vous avez un script similaire sur votre serveur, le client ne reoit que le rsultat du script, sans aucun moyen d'avoir accs au code qui a produit ce rsultat. Le langage PHP possde les mme fonctionnalits que les autres langages permettant d'crire des scripts CGI, comme collecter des donnes, gnrer dynamiquement des pages web ou bien envoyer et recevoir des cookies. La plus grande qualit et le plus important avantage du langage PHP est le support d'un grand nombre de bases de donnes. Le langage PHP a t conu durant l'automne 1994 par Rasmus Lerdof. L'analyseur fut rcrit durant l't 1995 et fut appel PHP/FI Version 2. FI taient les initiales d'un autre package que Rasmus avait crit qui interprtait les formulaires HTML. L't 1997 voit aussi un profond changement dans le dveloppement du PHP: d'un projet personnel (celui de Ramsus),* on passe alors un projet d'quipe. L'analyseur/parseur fut de nouveau rcrit par Zeev Suraskyi et Andi Gutmans et ce nouvel analyseur forma la base de la version 3 du PHP. Aujourd'hui PHP est distribu avec de nombreux produits comme et "RedHat Linux" et il est admis (d'aprs les chiffres de NetCraft, et leurs statistiques Netcraft Web Server Survey) que le PHP est utilis sur 200 000 sites web dans le monde entier...
Page 8
OUTILS NECSSAIRES
Tlcharger le logiciel
Page 9
Un diteur Php
N'importe quel diteur texte peut suffire, comme NotePad ou Wordpad, mme si un diteur permettant un reprage des n de ligne et une coloration syntaxique approprie est le bienvenu... Un choix partisan a t fait sur http://www.soysal.com/PHPEd/ Aprs tlchargement et installation, le lancement donne
Simplifions l"diteur par la suppressio n des fentres via View Manager et View Debug
Ce qui nous intresse ici c'est un fonctionnement au plus simple, avec numrotation des lignes, coloration syntaxique et des fonctions classiques d'dition de texte... Pour crer un nouveau fichier PHP Il suffit de demander New
et confirmer le type de fi hi
Page 10
des un
Page 11
Page 12
Page 13
et au lancement de Easyphp, une icne dans la barre des tches un clic bouton droit sur cette icne permet de dmarrer/arrter Easyphp
Page 14
Ces icnes correspondent au lancement automatique (via le menu Dmarrer / Programme /Dmarrage) des managers d'un serveur Web Apache et d'un interprteur PHP-MYSQL
On ne peut pas proprement parler du lancement de QuickPHP, il s'agit plutt de la mise en route du serveur Apache et de MySQL Pour dmarrer Apache, faites un clic droit sur l'icne et cliquez sur "Start Apache"; l'icne devient alors bleue. (ou double clic dessus) Pour dmarrer MySQL, faites un clic droit sur l'icne et cliquez sur "Start MySQL" ; l'icne devient alors bleue. (un double clic marche aussi)
Managers lancs, Serveur Apache lanc, SQL lanc
Page 15
Page 16
Tester MySQL
Le serveur Apache tant fonctionnel il suffit de taper http://localhost/mysql/ Ou bien demander PhpMyAdmin sur localhost
pour obtenir
Page 17
Ceci n'est pas une rgle absolue, mais correspond la configuration de QuickPHP. Il vous sera peut tre ncessaire, chez un hbergeur de modifier ces extensions Un script php commence par un balise d'ouverture < ? et se termine par une balise de fermeture ?>: <? xxxxscriptxxxx ?> <?php xxxxscriptxxxx ?>
La commande echo
La commande echo en php permet d'afficher la chane de caractres situe entre les guillemets. On veut crire le script suivant
<? echo "mon premier script php"; ?>
On demande de crer un nouveau document de type Php3 et on l'enregistre de manire pouvoir le tester avec notre interprteur. Donc
Page 18
On obtient alors
Page 19
AFFICHAGE A L'ECRAN
Le but de Php est de permettre la cration de pages web dynamiques, et donc de pouvoir envoyer des donnes au navigateur. Php3 fournit 3 fonctions permettant d'envoyer du texte au navigateur :
La fonction echo
La fonction echo permet d'envoyer au navigateur une chane de caractres dlimite par des guillemets. Syntaxe : echo Expression; L'expression peut tre une chane de caractres ou une expression que le navigateur value (code html par exemple)
echo "Chaine de caracteres"; echo (1+2)*87; echo "<H1>Salut</H1>";
N.B: une erreur en php est "sanctionne" lors de l'interprtation , ainsi l'criture
echo <H1>Salut</H1>;
au lieu de
Page 20
La fonction print
La fonction print est similaire la fonction echo la diffrence prs que l'expression afficher est entre parenthses. Syntaxe : print(expression); L'expression peut, comme pour la fonction echo tre une chane de caractres ou une expression que l'interprteur value:
print("Chaine de caracteres"); print ((1+2)*87); print ("<H1>Salut</H1>");
La fonction printf
La fonction printf (emprunte au langage C) est rarement utilise car sa syntaxe est plus lourde. Toutefois, contrairement aux deux fonctions prcdentes, elle permet un formatage des donnes, cela signifie que l'on peut choisir le format dans lequel une variable sera affiche l'cran. Syntaxe : printf (chane formate);
Code %b %c %d %e %f %o %s %x %X %%
Type de format Entier en notation binaire Caractre cod par son code Entier en notation dcimale Type double (nombre virgule) au format scientifique (1.76e+3) Type double (nombre virgule) Entier en notation octale Chane de caractres Entier en notation hexadcimale (lettres en minuscules) Entier en notation hexadcimale (lettres en majuscules) Caractre %
ASCII
Imaginons que l'on dfinisse une variable en virgule flottante, afin d'obtenir une prcision de calcul plus grande qu'avec un entier, mais qu'on dsire l'afficher en tant qu'entier. Dans ce cas la fonction printf prend toute son importance:
printf ("Le primtre du cercle est %d",2 * 3.1415927*24.546);
Page 21
ce fichier Coursphp_02.php3
<h1> ceci est du html pur </h1> <?php echo "ceci est gnr par php"; ?> <h1> ceci est de nouveau du html pur </h1> </body> </html>
zone "php"
gnre alors
Mais de l'HTML peut tre contenu comme argument et "transmis tel quel" s'il est inclus dans une instruction de type print ou echo, permettant une mise en forme (par exemple)
Page 22
ainsi
<html> <body> <h1> ceci est du html pur </h1> <?php echo "<font size=\"4\" color=\"blue\"> mon premier script php !</font>"; ?> <h1> ceci est de nouveau du html pur </h1> </body> </html>
fichier Coursphp_03.php3
gnre alors
Rq : une des solutions pour crire sur 2 lignes consiste donc utiliser la balise <BR> du html. fichier Coursphp_03b.php3
<html> <body> <h1> ceci est du html pur </h1> <?php echo "<font size=\"4\" color=\"blue\"> mon premier script php !</font>"; echo "<br>"; echo "ceci est une deuxime ligne de texte"; ?> <h1> ceci est de nouveau du html pur </h1> </body> </html>
Page 23
REGLES D'ECRITURE
pour tre parfaitement en accord avec la syntaxe HTML, l'intrieur de laquelle notre script PHP peut se trouver, on peut aussi crire
<script language="php"> xxxx script xxxx </script>
ce qui utilisent javascript apprcieront... N.B: cette notation est la seule "officielle" et respecte par tous les diteurs HTML... (sachez que certains diteurs n'hsitent pas remplacer les balises qu'ils ne connaissent pas...)
Instructions - casse
Le sparateur d'instructions est le ; (point virgule) absolument obligatoire ! Le langage est "casse-sensitive", autrement dit la distinction entre les minuscules-majuscules a son importance ! Ce qui permet de dire qu'il est diffrent de parler de la variable toto et de la variable TOTO, comme de Toto... bizarrement cela ne joue pas pour les fonctions ... Les commentaires peuvent se faire via deux techniques /* zone en commentaire */
ou alors pour invalider une fin de ligne // # zone en commentaire zone en commentaire
Page 24
LES VARIABLES
Dclaration de variables :
Le nom des variables doit : commencer par le symbole $ comporter que des lettres A-Z, a-z et les chiffres de 0 9 l'underscore _ les caractres ASCII de 127 255 (la longueur n'est pas limite) ne pas contenir de caractre espace ou autres "hors liste" ne pas commencer par un chiffre
La dclaration est optionnelle, car php dcide lui-mme du type de la variable lors de sa premire affectation entre string (chane) integer et double (numrique) En PHP 3, les variables sont toujours assignes par valeur. le PHP 4 permet aussi d'assigner les valeurs aux variables par rfrence. Cela signifie que la nouvelle variable ne fait que rfrencer (en d'autres termes, "devient un alias de", ou encore "pointe sur") la variable originale.
Type "alphanumerique"
Leur valeur peut contenir des lettres ou des symboles, il suffit d'entourer cette valeur par des " (guillemets doubles) ou des ' (guillemets simples) Ainsi dans l'criture
$nom = "Dupont" ou $nom='Dupont'
Type "numrique"
Une variable numrique peut contenir des valeurs entires (sans aucune dcimale), ou une valeur relle, comportant toujours une virgule mme si la dcimale est zro Ainsi dans l'criture
$quantite = 6
on dclare une variable $quantite avec la valeur 6 stocke dedans si on crit fichier coursphp_04. echo $quantite php3 on obtiendra alors l'cran la valeur de la variable $quantite, soit 6
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 25
Concatnation . :
L'oprateur de concatnation . est utilis pour des chanes, des variables
$b = "Bonjour "; $b = $b."vous";
Arithmtiques :
n'ont de sens que s'ils sont utiliss sur des variables de type Numrique l'addition (+) la multiplication (*) la soustraction(-) la division (/) le modulo (%) : reste de la division entire d'un entier par un autre
Affectation :
L'oprateur d'affectation le plus simple est le signe "=". Le premier rflexe est de penser que ce signe veut dire "gal ". Ce n'est pas le cas. Il signifie que l'oprande de gauche se voit affecter la valeur de l'expression qui est droite du signe gal.
$a = 3; $a = $a + 5; $b = "bonjour "; echo $a; echo $b;
Page 26
"certains fanatiques" peuvent utiliser les conventions suivantes Opration x=x+y x=x-y x=x*y x=x/y x=x&1 x=x|b x=x^b x = x << b x = x >> b x = x +1 x=x-1 comme dans Notation abrge L'oprateur est mis devant le signe = x += y x -= y x *= y x /= y x &=b x |= b x ^= b x <<= b x >>= b ++x ; x++ --x ; x--
$a=3;
fichier Coursphp_04b.php3
$a += 5; // affecte la valeur 8 la variable $a. (correspond '$a = $a + 5'); $b = "bonjour "; $b .= "ici!"; // affecte la valeur "Bonjour ici!" la variable $b
Le placement des oprateurs avant la variable (++a, --a) ralise une affectation antrieure l'opration en cours. Le placement aprs ralise l'affectation aprs l'opration en cours.
Page 27
Rgles d'criture
si on crit
echo $nom
on obtiendra alors l'cran la valeur de la variable $nom, soit Dupond On peut facilement utiliser la valeur d'une variable, ainsi dans les critures suivantes : $nom= "Dupond ";
$prenom="Jean"; $patronime="$nom $prenom"; echo $patronime
dans la chane "mon nom..."on utilise encore les valeurs de $nom et de $prenom... N.B : Attention aux nuances :
echo avec " " interprte les ventuelles variables contenues, echo avec ' ' affiche le contenu littral
ainsi dans :
echo "mon nom est $nom $prenom";
on affiche mon nom est Dupond Jean fichier coursphp_05. php3 mais dans
echo 'mon nom est $nom $prenom';
Page 28
Autres codes :
\n \r \t
La concatnation
Un oprateur de concatnation existe, c'est le . (point)
$patronime="Mon nom est ".$nom." ".$prenom." !"; echo $patronime
Page 29
LES CONSTANTES
Dfinition :
Les constantes se comportent comme des variables, l'exception du fait que leur valeur est dfinie grce la fonction define(), et qu'elle ne peut pas tre modifie par la suite
<?php define("CONSTANT", "Bonjour le monde."); echo CONSTANT; ?> // affiche "Bonjour le monde."
NB: les constantes ne peuvent avoir un nom commenant par $ (on les confondrait avec des variables)
Constantes pr-dfinies
Il existe bien sr quelques constantes pr-dfinies en PHP permettant de connatre la version par exemple de l'interprteur PHP qui est au travail, ou le nom du fichier contenant le script qui s'excute....
<? print ("version php ");
print (PHP_VERSION); print ("<br> version os "); print (PHP_OS); print ("<br> ceci est donc la version php : ".PHP_VERSION."sous ".PHP_OS); ?>
Page 30
Principe
Beaucoup de pages contiennent des formulaires qui, une fois remplie par l'utilisateur, peuvent tre transmis au serveur WEB hbergeant le site Pour prparer un formulaire il faut une zone d'dition (appele FORM), puis dfinir la mthode employer pour transmettre au serveur l'information recueillie dans les champs du formulaire Dans un formulaire, tous les tags de mise en forme sont disponibles classiquement, Il faut simplement viter d'incorporer un formulaire dans un autre formulaire ou de croiser un formulaire et un tableau Soit le formulaire suivant :
Page 31
Structure Gnrale
Les tags ncessaires sont les suivants <FORM> </FORM> marqueur formulaire de dbut et de fin de
deux paramtres principaux existent pour un formulaire METHOD="type" indique quel protocole HTTP il faut utiliser pour envoyer les donnes Les donnes du formulaire sont envoyes dans le corps de la requte http. "Post" est le protocole utiliser en gnral On ne voit pas les paramtres voyager dans l'url. On pourra envoyer plus de donnes. Les donnes du formulaire sont envoyes dans l'url de la requte http. On voit les paramtres voyager dans l'url prcde d'un ?, sous la forme d'un couple nom=valeur un & sparant chaque couple ACTION="script" On pourra envoyer moins donnes. (taille de l'URL) de
METHOD="post"
METHOD="get"
ce qui est "transparent" au niveau des passages de parmtres dans l'URL on verrait par exemple:
Page 32
Ensuite le corps du formulaire est compos de 3 tags principaux INPUT SELECT TEXTAREA Chacun de ces tags amenant une zone de saisie l'cran, se voit assigner d'un paramtre NAME="nom" avec "nom" tant un identificateur donn pour la valeur saisie par l'utilisateur dans le formulaire ce niveau (et donc pour pouvoir ensuite s'en servir ultrieurement) Souvent ces tags acceptent un paramtre VALUE="x" permettant d'indiquer le plus souvent la valeur par dfaut renvoyer Enfin chacun de ces tag accepte des paramtres biens spcifiques selon la zone de saisie qu'il cre
NOM : <INPUT TYPE="text" Name="nom" SIZE=25 MAXLENGTH=25 VALUE="tapez votre nom ici">
gnre la valeur saisie sera stocke dans une variable nomme "nom". SIZE correspond la taille de la zone MAXLENGHT correspond la taille maxi de l'info pouvant tre saisie VALUE correspond la valeur renvoye par dfaut si rien d'autre n'est saisi.
Variante
TYPE="password" idem "text" mais l'utilisateur ne voit pas les lettres tapes au clavier
gnre
Page 33
<INPUT TYPE="Radio" NAME="sexe" VALUE=1 CHECKED>Mr <INPUT TYPE="Radio" NAME="sexe " VALUE=2>Mdme <INPUT TYPE="Radio" NAME="sexe " VALUE=3>Mlle
gnre la valeur choisie (1,2 ou 3) sera stocke dans une variable nomme "sexe" N.B : le nom de la variable doit tre le mme pour l'ensemble des choix Le paramtre CHECKED active un bouton par dfaut
CHECKED>Franais<BR>
<INPUT TYPE="Checkbox" NAME="langues" VALUE="Gb">Anglais <BR> <INPUT TYPE="Checkbox" NAME="langues" VALUE="Ita">Italien <BR> <INPUT TYPE="Checkbox" NAME="langues" VALUE="All">Allemand<BR>
gnre la valeur saisie (Fr, Gb, Ita ou All) sera stocke dans une variable nomme " langues ". On peut prvoir un nom de variable par case cocher. Le paramtre CHECKED active une case par dfaut
Page 34
Le tag SELECT
C'est le tag qui va permettre des entres slectionnes principalement Sa structure gnrale tant <SELECT> </SELECT> encadrant l'ensemble des valeurs constituant la liste, Chacune de ces valeurs tant prcde du tag <OPTION>. Si MULTIPLE est prcis une slection multiple via la touche CTRL est autorise
<SELECT NAME="h" SIZE=4> <OPTION>08h00</OPTION> <OPTION>08h30</OPTION> <OPTION SELECTED>09h00</OPTION> <OPTION>09h30</OPTION> <OPTION>10h00</OPTION> </SELECT>
gnre et la valeur slectionne ira dans une variable nomme "h" (pour heure) Le paramtre SELECTED slectionne une valeur par dfaut On peut dissocier les choix apparaissant dans la liste et les valeurs retournes <OPTION VALUE=8>08h00</OPTION>
Page 35
le tag TEXTAREA
C'est le tag qui va permettre des entres clavier volumineuses Sa structure gnrale tant <TEXTAREA> </TEXTAREA> Permet de dfinir dans un formulaire extensible " volont" par l'utilisateur une zone de texte lors de sa saisie. Si ROWS et COLS sont prciss une taille en lignes et colonnes sera donne
Veuillez entrer ici votre adresse <TEXTAREA NAME="adresse" ROWS=5 COLS=40> </TEXTAREA> <BR>
Annulation ou Envoi
La fin d'un formulaire est toujours constitue de deux boutons permettant soit de remettre zro les saisies effectues dans le formulaire (abandon) soit d'envoyer le formulaire (envoi) Leur structure tant <INPUT TYPE="submit" VALUE="xxx"> Pour le bouton qui dclenchera l'envoi des valeurs saisies dans le formulaire "xxx" tant le libell du bouton
<INPUT TYPE="reset" VALUE="xxx"> Pour le bouton qui effacera toutes les valeurs saisies dans le formulaire "xxx" tant le libell du bouton
Page 36
</HEAD> <BODY> <Form Action = "coursphp_07.php3" method="post"> Nom Age <Input type="text" name="nom"> <br> <Input type="text" name="age"> <br>
dans l'exemple ci-dessus le name="nom" devient $nom et name="age" devient $age, il ne reste plus qu' faire un print() des variables et le tour est jou ! voir fichier Coursphp_07.php3
<? print(" <h3>salut</h3> <br> $nom ton age est $age ans ! <br>"); ?>
N.B: n'utilisez jamais d'accent ni d'espace dans les paramtres name= des balises HTML du formulaire.
Page 37
Autre Exemple
Soit le formulaire suivant :
<html> <body > <form method="post" action="coursphp_08.php3"> <div align="center">Votre genre<br> <select name="genre"> <option value="Mme">Madame</option> <option value="Mr">Monsieur</option> <option value="Mlle">Mademoiselle</option> </select> </div> <p align="center">Votre nom<br> <input type="text" name="nom"> </p> <p align="center">Age<br> <input type="radio" name="age" value="- de 20"> - de 20 ans <input type="radio" name="age" value="- de 40"> entre 20 et 40 ans <input type="radio" name="age" value="- de 60"> entre 40 et 60ans <input type="radio" name="age" value="+ de 60"> + de 60 ans</p> <p align="center">Langues parlées<br> <input type="checkbox" name="langue1" value="français"> Français <input type="checkbox" name="langue2" value="anglais"> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 38
Anglais <input type="checkbox" name="langue3" value="allemand"> Allemand <input type="checkbox" name="langue4" value="italien"> Italien <input type="checkbox" name="langue5" value="espagnol"> Espagnol</p> <p align="center">Commentaires<br> <textarea name="commentaire" cols="50" rows="4"></textarea> </p> <p align="center"> <input type="submit" name="Submit" value="Envoyer"> <input type="reset" name="Reset" value="Annuler"> </p> </form> </body> </html>
Traitement de formulaire :
Le principe de rcupration des donnes dans un formulaire est donc trs trs simple, mais que peut on faire en php avec ces donnes ? On peut bien sr effectuer des traitements sur ces variables, pour vrifier leur valeur ou mme simplement leur existence. On peut renvoyer un mail avec les donnes collectes On peut stocker ces donnes dans un fichier de type fichier texte... On peut alimenter une table de base de donnes.
Page 39
FORMULAIRES (PRSENTATION)
Les formulaires demandent une prsentation soigne Les listes et les tableaux restent disposition mais il faut faire attention respecter la syntaxe des tags Ainsi la place de
Page 40
LES FONCTIONS
Principe d'utilisation :
Les fonctions sont des expressions qui ont la valeur de leur "valeur de retour". Par exemple, considrons la fonction suivante :
function foo () {
return 5; }
alors on peut dire que Si foo() renvoie 5, la valeur de l'expression 'foo()' est 5. et donc $c = foo() est quivalent $c = 5
Habituellement, les fonctions ne font pas que renvoyer une valeur constante mais ralisent aussi des traitements.
Syntaxe :
Une fonction peut tre dfinie en utilisant la syntaxe suivante :
function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Exemple de fonction.\n"; return $retval; }
En PHP3, les fonctions doivent tre dfinies avant qu'elles ne soient utilises. Ce n'est plus le cas en PHP4.
Page 41
Exemple :
<? function square($val) { $retour=$val*$val; return $retour; } $num=4; /* appel de la fonction*/ echo square($num); ?>
On va prvoir un formulaire (square.html) demandant la saisie d'une valeur et c'est cette valeur qui sera leve au carr (square.php3). Le Formulaire :
Veuillez entrer une valeur <input type=text name=num><br> <input type=submit value=Calculer><input type=reset value=Effacer> </form> </body> </html>
Page 42
list ($zero, $one, $two) = small_numbers(); echo $zero; echo $one; echo $two;
Page 43
PASSAGE DE PARAMETRES
Principe
Des informations peuvent tre passes une fonction en utilisant un tableau d'arguments, dont chaque lment est spar par une virgule. Un lment peut tre une variable ou une constante. Par dfaut, les arguments sont passs la fonction par valeur (donc vous pouvez changer la valeur d'un argument dans la fonction, cela ne change pas sa valeur l'extrieur de la fonction)
<?php function ajout($string) { $string = $string.", et un peu plus."; echo "dans la fonction"; echo $string; // affiche le contenu de string concatn la chane ", et un peu plus." echo "<br>"; } $str = "Ceci est une chane"; echo "avant l'appel de la fonction "; echo $str; echo "<br>"; ajout($str); echo "aprs l'appel la fonction "; echo $str; // affiche le contenu de string une fois sortie de la fonction. ?>
Si vous voulez que vos fonctions puisse changer la valeur des arguments, vous devez passer ces arguments par rfrence. Deux mthodes existent, selon que vous souhaitiez passer les arguments toujours par rfrence (on le prvoit dans la fonction) ou selon que vous souhaitiez passer les arguments tantt par rfrence et tantt par valeur (cela dpendra de lappel de la fonction)
Page 44
1 mthode : Si vous voulez qu'un argument soit toujours pass par rfrence, vous pouvez ajouter un '&' devant l'argument dans la dclaration de la fonction Dans ce cas quel que soit lappel, les paramtres sont passs par rfrence.
function ajout(&$string) {
2 mthode : Si vous souhaitez passer une variable par rfrence une fonction mais de manire ponctuelle, vous pouvez ajouter ou non un '&' devant l'argument dans l'appel de la fonction: voir fichier coursphp_10c.php3
function ajout($string) { $string = $string.", et un peu plus."; }
Page 45
print("dans prems debut vaut $debut "); $debut =1; print("dans prems debut vaut $debut "); } function deums(){ print("dans deums debut vaut $debut "); $debut =2; print("dans deums debut vaut $debut"; } prems(); deums(); print(" la fin la variable debut vaut $debut";
Ce qui est gnant, c'est que l'on se demande comment pouvoir utiliser une variable globale dans une fonction Cela est possible en spcifiant qu'il s'agit d'une variable globale par le mot cl global. ainsi dans on spcifie que $debut est globale
function prems(){ global $debut; $debut=2; print("dans prem debut vaut $debut "); $debut =1; print("dans prem debut vaut $debut "); }
Attention : les variables locales sont prioritaires sur les variables globales
Page 46
Mais quelle diffrence alors avec un "passage de paramtre" comme on l'a vu dans le chapitre prcdent sur les fonctions ? et bien c'est que Global permet de dfinir des variables globales depuis l'intrieur d'une fonction.... voir exercice coursphp_11b.php3
<html> <body> <?php //$debut=0; ici la variable globale n'est plus dfinies print("au debut vaut $debut "); function prems(){ global $debut; $debut=2; print("dans prem debut vaut $debut "); $debut =1; print("dans prem debut vaut $debut "); } function deums(){ print("dans deums debut vaut $debut "); $debut =2; print("dans deums debut vaut $debut"); } prems(); deums(); print("a la fin debut vaut $debut"); ?> </body>
Mais ce nest pas la mme que celle l ! Cette variable $debut globale est la mme que celle ci
Variables statiques :
On a vu que classiquement, en php, lorsqu'une variable est utilise dans une fonction, sa porte est limite la fonction. De plus, lorsque la fonction a cess de s'excuter, la variable disparat. Mais on peut avoir envie de faire en sorte que la variable soit mmorise, de manire ce que sa valeur soit connue lors du prochain appel de la fonction, (et non pas recre...) Il s'agit alors d'une variable locale cre lors du premier appel, et dont la valeur est mmorise et est rutilisable lors du prochain appel de la fonction.
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 47
function couleur() { static $couleur; if ($couleur == "#00FF00") { $couleur = "#CCFFCC"; } else { $couleur = "#00FF00"; } return ($couleur); }
on
dclare
une
variable
valant verts
alternativement
print ("</Table>");
N.B : Pour faire cela il aurait suffit de dclarer une variable globale bien sr, mais plus proprement, on peut dclarer une variable locale avec le mot cl static, cela vite une modification possible depuis une autre fonction ailleurs dans le code. Puisque cette variable est inconnue ailleurs !
Page 48
LES CONDITIONS
== != >
true si l'oprande de gauche est suprieur l'oprande de droite, false dans le cas inverse true si l'oprande de gauche est suprieur ou gal l'oprande de droite, false dans le cas inverse true si l'oprande de gauche est infrieur l'oprande de droite, false dans le cas inverse true si l'oprande de gauche est infrieur ou gal l'oprande de droite, false dans le cas inverse
>=
<
<=
Logiques || && :
ET logique AND ou && donne true si les deux oprandes sont true donne false sinon (un oprateur au moins est False) OU logique OR ou || donne true si l'un des deux oprandes est true et false sinon (deux oprateurs sont False) la ngation (NOT) donne l'inverse logique
Page 49
N.B: la diffrence entre les critures AND et && rside dans une priorit plus forte de la notation AND (il vaudrait mieux viter d'utiliser && qui a une priorit trs faible...) N.B: la diffrence entre les critures OR et || rside dans une priorit plus forte de la notation OR (il vaudrait mieux viter d'utiliser || qui a une priorit trs faible...) Voici quelques exemples
<? if ("a"<"3")
conversion implicite
$a = 122; if ($a) print("<br> true"); // TRUE est non nul else print("<br> false");
$b=10; if ($a==$b) print("<br> gal");// comparaison classique else print("<br> non gal");
valeur de l'expression
Page 50
Le if - else :
Souvent, vous voulez excuter une instruction si une condition est remplie, et une autre instruction si cette condition n'est pas remplie C'est exactement cela que sert l'instruction if ventuellement complte d'un else. Les mots cls pour un si sont if else avec l'indentation suivante
if
(test) {... }
ou plus simplement
if
(test) {... }
else {... }
On utilise cette forme d'criture de test, seulement si nous dsirons que le programme fasse quelque chose de bien prcis dans les deux cas. Aussi bien lorsque la condition est vraie que si elle est fausse. On peut aussi recommencer tester une autre condition dans le cas o la premire n'est pas vraie. C'est ce que l'on appelle les "if imbriqus". Quelques exemples : pas de else, et une seule instruction excuter
if ($a > $b) print "a est plus grand que b";
Dans cette forme d'criture des tests, les actions sont excutes seulement si la condition est vraie, et il ne se passe strictement rien dans le cas contraire, c'est--dire si la condition n'est pas vraie (fausse). Le programme reprend simplement l'excution des instructions qui suivent l'accolade fermante } aprs la fin du test, s'il y en a.
Page 51
Les imbrications sont possibles, et le else est appari au dernier if n'ayant pas de else. Dans ce cas une indentation soigneuse vous permettra de vous reprer
if
N.B: Les oprateurs logiques Et (&&) et OU (||] restent disponibles pour crire des tests plus complexes.
Page 52
Exemple :
Nous allons crer un formulaire qui demande la saisie de 2 nombres :
Ces 2 nombres seront ensuite tests dans un script php. Ce script affichera les 2 nombres et prcisera lequel est le plus grand ou s'ils sont gaux. Le formulaire html :
<HTML> <BODY> <FORM action=test_valeur.php3 method=post> Veuillez entrer une premiere valeur <input type=text name=val1><br> Veuillez entrer une deuxieme valeur <input type=text name=val2><br> <input type=submit value=Calculer><input type=reset value=Effacer> </form> </body> </html>
Script php
<? echo "Vous avez saisi les valeurs suivantes : $val1 et $val2";
if($val1==$val2) { echo "Les 2 valeurs sont gales"; } else { if ($val1>$val2) { echo "Valeur 1 superieure valeur 2"; } else { echo "Valeur 2 superieure valeur 1"; } } ?>
Page 53
Le Switch :
L'instruction switch quivaut une srie d'instructions if. En de nombreuses occasions, vous aurez besoin de comparer la mme variable (ou expression) avec un grand nombre de valeurs diffrentes, et d'excuter diffrentes parties de code suivant la valeur laquelle elle est gale. C'est exactement cela que sert l'instruction switch. Cette opration resterait possible avec des if imbriqus....( dans certaines limites)
switch (Variable) { case Valeur1 : xxxxxx ; xxxxxx ; break; case Valeur2 : xxxxx ; xxxxx ; xxxxx ; break; case Valeur3 : break; } xxxxx ;
Le break est essentiel, sinon "on continue" excuter le code jusqu' trouver un break ou la fin du switch
switch (Variable) { case Valeur1 : case Valeur2 : xxxxx ; xxxxx ; xxxxx ; break; case Valeur3 : default : break; } xxxxx ; xxxxx ;
default permet de spcifier le traitement excuter lorsque Variable ne prend aucune des valeurs prvues
Page 54
Exemple
Nous allons crer un formulaire (test_langue.html) qui demande de faire un choix parmi une liste de 4 langues. Lorsque le choix estr fait le rsultat est transmis un script (test_langue.php3) qui affiche le choix ralis
Le formulaire html
<html> <body> <FORM action=test_langue.php3 method=post> Langue maternelle<br> <input type=radio name=langue value=fr>Franais<br> <input type=radio name=langue value=gb>Anglais<br> <input type=radio name=langue value=d>Allemend<br> <input type=radio name=langue value=i>Italien<br> <input type=submit value=Test><input type=reset value=Effacer> </form> </body> </html>
Le script php
<?
echo "Votre langue maternelle est : "; switch ($langue) { case fr: echo "le franais"; break; case gb: echo "l'anglais"; break; case d: echo "l'allemand"; break; case i: echo "l'italien"; break; } ?>
Page 55
Maintenant que nous sommes un peu capables de faire des tests, et de rcuprer des paramtres saisi dans des formulaires, il parat ncessaire de pouvoir les "tester", et de manire gnrale, de pouvoir les manipuler Il va bien sr maintenant falloir contrler les informations que rentre le visiteur pour viter au maximum les erreurs. Il existe ne Php toute une srie de fonctions et de manires de manipuler les chanes de caractres
Fonction empty :
int empty (var)
Retourne False (0) si la variable var est affecte ou une valeur diffrente de 0, retourne True (1) sinon. voir fichier coursphp_13.html Soit le formulaire suivant : Dans lequel on veut vrifier que le champs Titre contienne quelquechose
1 mthode :
<? if(empty($titre)) voir fichier { coursphp_13.php3 print("<center>Le '<b>Titre</b>' est vide !</center>"); exit(); } print("$titre : <a href=\"$url\">$url</a>"); ?>
Si la variable $titre est vide (ou vaut 0) alors on affiche le message et on arrte l'excution du reste du code avec la commande exit(). Par contre si la variable n'est pas vide, l'excution ne prend pas en compte ce qui se trouve entre accolades et continue sur la suite du programme.
Page 56
Alors
Aussi bien
que cela
2 mthode :
En modifiant le formulaire par
<Form Action = "coursphp_13b.php3" method="post">
"Petit appart" : si vous pensez pouvoir ne pas utiliser empty(), et ecrire simplement quelquechose du genre
<? if($titre) { print("<center>Le '<b>Titre</b>' est vide !</center>"); } print("$titre : <a href=\"$url\">$url</a>"); ?>
vous obtiendre exactement l'effet inverse, car lorsque l'on tape un titre, la variable $titre vaut quelque chose de diffrent de 0, dont est assimile la valeur logique True, donc on dclarera que le titre est vide..
Page 57
Fonction stripslaches :
string stripslashes (string str)
Retourne une chane dont tous les slashes ont t supprims. (\' devient ', ... et ainsi de suite). Les doubles backslashes sont remplacs par des simples.
Fonction strtolower() :
string stripslashes (string str)
Retourne une chane dont tous les caractres ont t transforms en minuscules. (ex. HTTP://www.MONsite.CoM devient http://www.monsite.com ). Voir aussi strtoupper() (passe tout en majuscule) et ucfirst() (passe le premier caractre en majuscule)
Fonction substr() :
string substr (string str,depart,longueur)
Permet de slectionner x caractres de la chane str, partir de la position depart et sur une longueur dfinie par longueur. Si depart est positif, la chane retourne commence au caractre depart, a partir du 1 (dbut) de la chane str. Si depart est ngatif, on compte partir de la fin de la chane str. Voir aussi ereg() (plus loin). Nous allons contrler que $url commence bien par les caractres "http://" l'aide des deux fonctions strtolower() et substr().
<? $verif_url = strtolower($url); $verif_url = substr("$verif_url", 0, 7); if ($verif_url!="http://") { print("L'URL doit commencer par <b>http://</b>"); } else voir fichier { coursphp_14.html print("$titre : <a href=\"$url\">$url</a>"); coursphp_14.php3 } ?>
Page 58
La fonction substr(), permet de slectionner les 7 premiers caractres (0 est toujours le premier caractre d'une chane - le second chiffre ' 7 ' tant le nombre de caractres slectionner), puis nous les comparons ce que nous avons dans notre condition if : Si les 7 premiers caractres sont diffrents ( signe: != ) de "http://", alors on excute ce qui se trouve entre accolades (en l'occurrence on affiche un message d'erreur) Par contre si le rsultat est correct, PHP ignore ce qui se trouve entre accolades et excute le reste du code.
Exemple
Nous allons crer un formulaire qui permet la saisie d'une chane de caractres et d'un nombre
Ce formulaire appellera un script php (left_right.php3) qui affichera les x premiers caractres de la chane et les x derniers caractres de la chane Le formulaire HTML :
<HTML> <BODY> <FORM action=left_right.php3 method=post> Veuillez entrer une chaine de caractres <input type=text name=saisie><br> Veuillez entrer un nombre <input type=text name=nb size=1> <input type=submit value=Calculer><input type=reset value=Effacer> </form> </body> </html>
Le Script php :
<? function left($chaine,$num) { return substr($chaine,0,$num);
} function right($chaine,$num) { return substr($chaine,-$num); } $saisie; echo "les $nb premires lettres sont ". left($saisie,$nb)."<br>"; echo "les $nb dernires lettres sont ".right($saisie,$nb); ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 59
Fonction ereg() :
int ereg (string pattern, string string)
Recherche dans la chane string les squences de caractres qui correspondent au masque pattern. Retourne TRUE (1) si une occurrence a t trouve dans la chane, et FALSE (0) dans le cas contraire, ou si une erreur est survenue. La recherche est sensible la casse. Exemples : Soit le formulaire HTML suivant :
<html> <body> <form action="recherche.php3" method="post"> saisie de la chaine <input type="text" name="saisie"> <br> motif cherch <input type="text" name="motif"> <br> <input type=submit> </body> </html>
Le script suivant) permet de dterminer si un caractre particulier fait partie de la chane saisie :
<? $motif="a";
/*on va chercher la prsence d'un a dans la chaine saisie */ if(ereg($motif,$saisie)) { echo "il y a un $motif dans le mot saisi"; } else { echo "il n'y a pas un $motif dans le mot saisi"; } ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 60
donne alors
donne mais
Page 61
On peut aussi dfinir une plage de caractres. Il suffit d'indiquer entre crochets le premier et le dernier caractres spars par un tiret.
$motif="[a-z]"; // liste des minuscules $motif="[A-Z]"; // liste des majuscules $motif="[a-zA-Z]"; // liste des minuscules et majuscules $motif="[0-9]"; // liste des chiffres
On peut aussi faire des recherches ngatives, il suffit pour cela de faire prcder le symbole ou la liste du signe^.
$motif="[^a-z]"; // tout sauf des minuscules
Pour rechercher l'un de ces caractres +-?,*^$()[]{}|\ il faut le faire prcder d'un\
trouvera aussi bien : Pascal Passy Pas . utilis dans une quelconque.
$motif="P.ire";
expression
rgulire
remplace
un
caractre
signifie
une
ou
plusieurs
Page 62
utilis dans une expression rgulire signifie aucune, une ou plusieurs occurrences du caractre prcdant l'toile *
$motif="colon*e";
.*
trouvera aussi bien : colone colonne colonie coloe {n} ou {n,m} n ou de n m occurrences du caractre prcdant l'accolade.
$motif="w{3}";
Fonctions connexes
ereg_replace Remplacement par expression rgulire. eregi Recherche par expression rgulire insensible la casse. eregi_replace Remplacement par expression rgulire insensible la casse. split Scinde une chane en un tableau, grce une expression rgulire. spliti Scinde une chane en un tableau, grce une expression rgulire.
Exemple :
Nous allons crer un formulaire qui demande la saisie d'une phrase et d'un caractre. Ces informations seront transmises un script php qui affichera la phrase en remplaant le caractre prcis par une toile.
<html> <body> <form action="remplace.php3" method="post"> Veuillez saisir une phrase<input type="text" name="phrase"> Veuillez saisir une lettre<input type="text" name="lettre" size=1> <input type=submit value=remplace><br> Le caractre que vous avez saisi sera remplac dans la phrase par une * </body> </html> <?
/*ereg_replace(caractre remplacer,caractre de remplacement,chaine concerne)*/
Page 63
for :
Cre une boucle qui excute le code x fois. Attention aux boucles infinies : N.B: s'utilise lorsque l'on connat l'avance combien de fois on va "boucler". for ([valeur initiale] ; [condition] ; [incrment]) { code }
for(i=dbut ; i<= fin ; i=i+x) {... ... ... } On excute le bloc dinstructions autant de fois que ncessaire pour que i passe de la valeur dbut la valeur fin (en augmentant de x chaque fois)
valeur initiale : valeur initiale de la variable compteur. condition : incrment : condition de sortie de la boucle. pour incrmenter ou dcrmenter le compteur.
Ce qui se trouve entre les parenthses se lit de la manire suivante : i = dbut; veut dire : compteur i i <= fin; veut dire : infrieure i=i+1 veut dire : franais fois. en partant avec la valeur dbut au
tant que le compteur aura une valeur ou gale fin; en incrmentant (en faisant grimper en normal) le compteur i de x chaque
Page 64
While :
Cre une boucle qui rpte l'excution du code tant que la condition est vraie. Si la condition est vraie ds le dbut, le programme n'entre pas dans la boucle. N.B.: s'utilise quand on ne sait pas combien de fois on va "boucler". En gnral dans les instructions rptes il y en a forcment une qui, un moment donn fera passer le test = Vrai (Sinon cela risque de ne jamais s'arrter.) while (condition) { code } condition: la condition de sortie de la boucle.
(test)
Si le test est vrai , on excute le bloc d'instructions lintrieur du tant que, puis on remonte voir si le test est vrai ou faux Si le test est faux, on passe la suite
Page 65
Exemple
Calcul d'une factorielle. Nous allons crer un formulaire qui demande la saisie d'un nombre entier. voir fichier factorielle.html
Ce nombre une fois saisi est transmis un script qui calcule sa factorielle (ex factorielle de 3 =3x2x1) Script php de la factorielle
<? echo "Le nombre saisi est : $nbre<br>"; $cpt=$nbre; echo "cpt vaut $cpt"; while($cpt>0){ $nbre=$nbre*$cpt--; echo "nbr = $nbre<br>"; echo "cpt = $cpt<br>"; } echo "La factorielle de ce nombre vaut $nbre"; ?>
Page 66
LES TABLEAUX
Principes de base :
PHP supporte les tableaux scalaires et les tableaux associatifs. En fait, il n'y a aucune diffrence entre les deux. Vous pouvez crer un tableau en utilisant la fonction array(), ou bien en affectant explicitement chacune des valeurs.
$a[0] = "abc"; $a[1] = "def"; $b["note"] = 13; // tableau "associatif"
Vous pouvez aussi crer un tableau en ajoutant simplement les valeurs ce tableau.
$a[] = "hello"; $a[] = "world"; // revient // revient $a[2] == "hello" $a[3] == "world"
Un tableau peut tre tri en utilisant la fonction sort() (et assimils) en fonction du type de classement que vous voulez. Vous pouvez compter le nombre d'lments qu'il y a dans un tableau en utilisant la fonction count().
echo count($a); //affichera 4
Vous pouvez vous dplacer l'intrieur d'un tableau de 2 manires en connaissant la taille du tableau et en construisant une boucle qui permettra de se positionner sur chaque lment du tableau (cette technique ne peut tre utilise que pour les tableauxde type scalaire) en utilisant les fonctions each(), next() et prev() (un peu comme on lit un fichier, cette technique peut tre utilise pour tout type de tableau, qu'il soit associatif ou scalaire)
Page 67
ou bien
for ($cpt=0;$cpt<count($tab);$cpt++) { $numelet=$cpt+1; print (" le $cpt elem du tableau vaut $tab[$cpt] <BR>"); }
N.B: on a vu qu'Il existe aussi une variation par rapport la construction classique dite numration, permettant de ne pas spcifier l'indice, celuici tant cre automatiquement par l'interprteur php. Ainsi au lieu dcrire
$tab[0]=0; $tab[1]=1; $tab[2]=2;
Page 68
Ce qui permet des constructions assez "oses" comme dans l'exemple suivant:
Exemple
Nous allons crer un formulaire qui demande d'effectuer un ou plusieurs choix grce des cases cocher.. p
pour obtenir Ces choix sont stocks dans un tableau qui sera automatiquement de la dimension correspondante au nombre de cases coche. coches ! Le formulaire HTML :
<html> <body>
<form name="toto" method="post" action="cretableau.php3"> <input type="checkbox" name="choix[]" value="gb"> anglais <input type="checkbox" name="choix[]" value="fr"> franais <input type="checkbox" name="choix[]" value="all"> allemand <input type="checkbox" name="choix[]" value="it"> italien <input type="submit"> </form> </body> </html>
La saisie est ensuite transmise un script qui affiche un tableau choix de dimension approprie
<?
Page 69
$tabasso["age"]=30; $tabasso["note"]=20; for ($cpt=0;$cpt<count($tabasso);$cpt++) $val=$tabasso[$cpt]; print (" parcours scalaire le $cpt elem du tableau vaut $val <BR>"); } <?
$val=tabasso[$cpt] ne permet plus d'atteindre la valeur stocke dans le tableau ! Il faut savoir aussi que chaque tableau entretien un pointeur interne, qui est initialis lorsque le premier lment est insr dans le tableau. Pour passer en revue proprement un tableau associatif il faut utiliser la fonction each() et reset() each() : retourne la paire (cl/valeur) courante du tableau array et avance le pointeur de tableau. Cette paire est retourne dans un tableau de 4 lments, avec les 4 cls prdfinies dsigne 0, 1, key, value. Les lments 0 et key contiennent le nom de la cl Les lments 1 et value contiennent la valeur. Cela est justifi uniquement par le fait de pouvoir y accder par une notation scalaire(0/1) ou une notation associative (key/value). Si le pointeur interne de fichier est au del de la fin du tableau, each() retourne faux. Aprs chaque each(), le pointeur de tableau est dplac sur l'lment suivant, ou sur le dernier lment lorsqu'on arrive la fin. reset() : replace le pointeur de tableau array au premier lment.
$nbval=count($tabasso); // on rcupre la dimension du tableau for ($cpt=0;$cpt<$nbval;$cpt++) { $valass=each($tabasso); // rcupre l'lment courant et avance pointeur // ici on peut traiter // l'lment du tableau print("le nom de element $cpt est $valass[0]<br>"); print("la valeur de element $cpt est $valass[1]<br>"); } reset($tabasso); //replace le pointeur au premier lment. ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 70
avec
print("le nom de element $cpt est $valass[0]<br>");
et avec
print("la valeur de element $cpt est $valass[1]<br>");
N.B: la place de l'instruction $valass[0] on pourrait tout aussi bien crire $valass[key] N.B: la place de l'instruction $valass[1] on pourrait tout aussi bien crire $valass[value] Pour parcourir les lments d'un tableau on va avoir principalement 2 mthodes 1 mthode (solution) : trouver la taille du tableau puis parcourir classiquement tous les lments du tableau que l'on lira l'aide de each()
$nbval=count($tabasso); for ($cpt=0;$cpt<$nbval;$cpt++) { $valass=each($tabasso); $val=$valass[value]; print (" 1 mthode : le [$cpt] elem du tableau vaut $val <BR>"); }
2 mthode (solution) : sans connatre la taille du tableau utiliser le fait que si le pointeur interne de fichier est au del de la fin du tableau, each() retourne faux
reset($tabasso); while($valass=each($tabasso)) { $val=$valass[value]; print (" 2 mthode : elem du tableau vaut $val <BR>"); }
N.B: La fonction current() ne fait que retourner l'lment courant point par le pointeur interne. Si le pointeur est au del du dernier lment de la liste, current() retourne faux. Si le tableau des lments vides ou des zros (0 ou "", la chane vide) alors cette fonction retournera false pour ces lments. Il est donc impossible de dterminer si vous tes rellement la fin de la liste en utilisant cette fonction.
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 71
Tableau multidimensionnel :
Les tableaux plusieurs dimensions sont extrmement simples. Pour chaque dimension du tableau, vous ajoutez une nouvelle [dim] la fin Voila un tableau 2 dimensions 2x2
$a[0] [0] = "def"; $a[0] [1] = "def"; $a[1] [0] = "def"; $a[1] [1] = "def";
Evidemment on peut mlanger des tableaux associatifs et scalaires dans les tableaux plusieurs dimensions.
$tabasso[1]["nom"]="Pierre"; $tabasso[1]["age"]=31; $tabasso[1]["note"]=21; $tabasso[2]["nom"]="Michel"; $tabasso[2]["age"]=32; $tabasso[2]["note"]=22; $tabasso[3]["nom"]="Marie"; $tabasso[3]["age"]=33; $tabasso[3]["note"]=23; P.H.P. Gestion de Donnes
ceci est un tableau scalaire de 4 lves, chaque lve tant un tableau associatif de 3 lments "nom", "age" et "note"
Page 72
Pour connatre la liste de tous les lves, il faut parcourir tous les lments du tableau scalaire, et lire la valeur du premier lment du tableau associatif cela devrait donner ceci :
$nbval=count($tabasso); // donne la taille de la 1 dimension, soit 4 for ($cpt=0;$cpt<$nbval;$cpt++) { $valass=each($tabasso[$cpt]); $val=$valass[value]; print ("le [$cpt] eleve du tableau est $val <BR>"); }
si on est sur un lve, pour connatre toutes ses valeurs il faut parcourir tous les lments du tableau associatif cela devrait donner ceci :
reset($tabasso[0]); lment. //replace le pointeur de tableau array au premier
while($valass=each($tabasso[0])) { $val=$valass[1]; print (" pour cet lve, on a les valeurs $val <BR>"); }
Et donc maintenant on doit pouvoir se dplacer sur chaque lve (lments du tableau scalaire) et visualiser toutes ses composantes (lments du tableau associatif) cela devrait donner ceci :
$nbval=count($tabasso); for ($cpt=0;$cpt<$nbval;$cpt++) { reset($tabasso[$cpt]); //replace le pointeur au premier lment.
while($valass=each($tabasso[$cpt])) { $val=$valass[1]; print (" pour l'lve n $cpt on a les valeurs $val <BR>"); } print (" <BR>") ; }
Page 73
ENVOYER UN MAIL
Rappels de principes :
PHP tant un langage consacr au Web, il possde bien videmment des fonctions lui permettant de communiquer avec le "monde extrieur" l'aide de fonctions standards. Le service le plus utilis sur Internet tant la messagerie lectronique, il est naturel que PHP permette d'envoyer des mails.
Fonction mail() :
int mail (string email_destinataire, string sujet, string corps_message, string options)
Le dernier champ est facultatif, on en parlera juste aprs. Dans un premier temps nous allons envoyer un email de base, en utilisant les 3 premiers paramtres Dans un formulaire on donne les renseignements ncessaires :
<html> <body> <form method="post" action="coursphp_16.php3"> <p>Votre Nom <input type="text" name="nom" size="50"> </p> <p>Votre adresse <input type="text" name="votre_email" size="50"> </p> <p>Votre commentaire <textarea name="commentaire" cols="50" rows="5"></textarea> </p> <p> <input type="submit" name="envoyer" value="Envoyer"> <input type="reset" name="effacer" value="Rétablir"> </p> </form> </body> </html>
Page 74
Voil le code du fichier traitant les donnes envoyes par le formulaire prcdent :
<html> <body> <h4>Merci de votre message <?echo $nom;?></h4> <? echo "<p>Vous allez recevoir un email l'adresse suivante : $votre_email</p?>"; mail("$votre_email", "Rponse votre courrier ", "$nom a laiss le commentaire suivant : \n\n$commentaire" ); ?> </body> </html>
N.B: Chez certains hbergeurs (dont Free Online) la fonction mail est dsactive car elle permet de simuler un envoi de mail partir de n'importe quelle adresse. Elle est alors remplace par une fonction propre l'hebergeur" permettant de vrifier que vous laisser une trace au niveau du champs from dans les mails que vous envoyez (de manire identifier un mail facilement)"
Page 75
il s'agit essentiellement de rajouter un premier paramtre obligatoire from, (et d'ailleurs sur les hebergeurs professionnels on ne pourra indiquer ici qu'une adresse mail "valable" pour le compte de domaine heberg) Les options / en-ttesLe champ options de la fonction mail permet d'ajouter une en-tte au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilis pour envoyer l'email ou encore l'adresse de retour... Voil un exemple d'en-tte utiliser lors d'un envoi de mail :
$from_email = "moi@truc.fr"; $entetemail = "From: $from_email \n"; // Adresse expditeur $entetemail .= "Cc: \n"; $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
mail("$votre_email", "Rponse votre courrier ", "$nom a laiss le commentaire suivant : \n\n$commentaire" "$entetemail" );
Page 76
LES DATES
Fonction time() :
int time (void)
La fonction time() retourne le nombre de secondes coules depuis le 1er Janvier 1970. elle est trs souvent utilise lors des manipulations de dates.
<?php
echo "Il s'est coul ". time() . " secondes depuis le 1er Janvier 1970"; ?>
Fonction mktime() :
int mktime (int heure, int minute, int seconde, int mois, int jour, int anne,)
N.B: L'ordre des paramtres est l'amricaine mois,jour,anne et non jour,mois,anne. Exemple comment de secondes se sont coules depuis le 1 janvier 2000 voir fichier coursphp_17.php3
<?php echo "1 janvier 2000, c'tait il y a ". mktime(0,0,0,1,1,2000) . " secondes "; ?>
Page 77
Fonction checkdate() :
int checkdate (int mois, int jour, int anne)
La fonction checkdate retourne True (1) si la date est valide (anne entre 0 et 32767, mois entre 1 et 12), et la valeur False (0) sinon. N.B: L'ordre des paramtres est l'amricaine mois,jour,anne et non jour,mois,anne.
Exemple
Dans ce formulaire on demande la saisie d'une date. Cette date sera transmise un script qui vrifiera sa validit et affichera un message en consquence
<HTML> <BODY> <FORM action=coursphp_17b.php3 method=post> Veuillez saisir une date du type jj mm aaaa<br> <input type=text name=jour size=2> <input type=text name=mois size=2> <input type=text name=annee size=4><br> <input type=submit value=Test><input type=reset value=Effacer> </form> </body> </html>
Page 78
La fonction getdate :
Fonction getdate() :
array getdate (int date)
La fonction renvoit un tableau associatif contenant les informations de date et heure de la variable date avec les champs suivants :
"seconds "minutes" "hours" "mday" "wday" "mon" "year" "yday" "weekday" "month"
secondes minutes heures jour du mois jour semaine, numrique. 0: dimanche jusqu' 6: samedi mois, numrique anne, numrique jour de l'anne, numrique; i.e. "299" jour de la semaine, texte complet (en anglais); i.e. "Friday" mois, texte complet (en anglais); i.e. "January"
Fonction strftime() :
string getdate (string format, int date)
avec pour paramtre une chane de caractre format indiquant la manire sous laquelle vous voulez reprsenter la date. Ce format est donn par une chane de caractres comportant quelques caractres prcds d'un signe % ayant une signification particulire (d pour jour, m pour mois, y pour anne, etc...) et des caractres choisis librement (ici, le slash, l'espace, les 2 points). voir fichier coursphp_17d.php3
<? echo "Affichage au format jour/mois/annee heure:minute:seconde "; strftime("%d/%m/%y %H:%M:%S") . "<br>"; ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 79
Donc partir du moment o vous connaissez les lettres "cls", vous pouvez donner libre court votre imagination. Liste des principaux formats : %y %Y %B %m %A %d %u %H %I %M %S %j %V anne (sur 2 chiffres) anne mois en toutes lettres mois jour en toutes lettres jour numro du jour dans la semaine (1=Lundi) heure (sur 24 heures) heure (sur 12 heures) minute seconde numro du jour dans l'anne numro de la semaine dans l'anne
Par dfaut la fonction strftime() formate la date et heure courante mais vous pouvez spcifier un second paramtre pour afficher une date calcule. Ce paramtre est exprim en secondes.
on peut alors stocker ces valeurs simplement dans des variables tout simpement
// la variable $an contient la valeur 01 si nous sommes en 2001 $an=strftime("%y");
ou
// la variable $mois contient la valeur Saturday si nous sommes samedi $mois=strftime("%B");
Page 80
En Anglais Friday 21 September 2001 En Franais vendredi 21 septembre 2001 La langue est dfinie par 2 lettres (gnralement) suivi d'un underscore puis 2 autres lettres. Les premires lettres indiquant la langue proprement dit et les 2 suivantes le pays (on peut ainsi distinguer fr_FR de fr_CA).
Quelques formats :
a ou "am" (matin) ou "pm" (aprs midi) A d D F g G h H i I Jour du mois, sur deux chiffres (ventuellement avec un zro) : "01" "31" Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi) Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier) Heure, au format 12h, sans les zros initiaux i.e. "1" "12" Heure, au format 24h, sans les zros initiaux i.e. "0" "23" Heure, au format 12h, "01" "12" heure, au format 24h, "00" "23" Minutes; "00" "59" (i majuscule) "1" si l'heure d't est active, "0" si heure d'hiver .
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 81
j l L m M n s t U w Y y z
Jour du mois sans les zros initiaux: "1" "31" ('L' minuscule) Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi) Boolen pour savoir si l'anne est bissextile ("1") ou pas ("0") Mois; i.e. "01" "12" Mois, en trois lettres (et en anglais) : par exemple "Apr" (pour Avril) Mois sans les zros initiaux; i.e. "1" "12" Secondes; i.e. "00" "59" Nombre de jours dans le mois donn, i.e. "28" "31" Secondes depuis une poque Jour de la semaine, numrique, i.e. "0" (Dimanche) to "6" (Samedi) Anne, 4 chiffres; i.e. "1999" Anne, 2 chiffres; i.e. "99" Jour de l'anne; i.e. "0" "365"
Quelques exemples :
<?php /* Aujourd'hui, le 12 Mars 2001, 10:16:18 pm */ $aujourdhui = date("F j, Y, g:i a"); $aujourdhui = date("m.d.y"); $aujourdhui = date("j, m, Y"); $aujourdhui = date("Ymd"); $aujourdhui = date("H:i:s"); // notation franaise $aujourdhui = date("d/m/y"); $aujourdhui = date("d/m/Y"); ?> // 12/03/01 // 12/03/2001 // March 12, 2001, 10:16 pm // 03.12.01 // 12, 3, 2001 // 20010312 // 10:16:18
si vous avez le temps, jetez un petit coup d'oeil sur le formulaire et le script suivant. duree.html et duree.php3 !
Page 82
LES FICHIERS
Principes :
Lorsque l'on n'a pas accs une base de donnes, il faut utiliser des fichiers pour y stocker des donnes. En php la cration ou la lecture de fichiers est possible, avec une multitude de fonctions... il faut bien noter que lorsque l'on sera sur un serveur ftp, le problme des droits qu'un utilisateur (ou qu'un script php...) peut avoir sur un fichier conditionnera l'accs au fichier proprement dit les fonctions de base sont la fonction fopen(), qui permet d'ouvrir un fichier, pour le lire ou y crire la fonction fclose(), qui permet de fermer un fichier la fonction fgets(), qui permet de lire dans un fichier ouvert
Le paramtre nomfichier peut prendre plusieurs valeur parmis les suivantes: Si nomfichier commence par "http://" (insensible la casse), une connexion HTTP 1.x est ouverte , et un pointeur sur la rponse fournie est retourn. Si nomfichier commence par "ftp://" (insensible la casse), une connexion FTP est ouverte , et un pointeur sur la rponse fournie est retourn.. Vous pouvez ouvrir des fichiers en lecture seulement, ou en criture seulement (le full duplex n'est pas support). Si nomfichier commence par n'importe quoi d'autre, PHP tentera de lire ce fichier dans le systme local, et un pointeur sur le fichier ouvert sera retourn.
Page 83
Le paramtre mode peut prendre les valeurs suivantes : 'r' - Ouvre en lecture seule, et place le pointeur de fichier au dbut du fichier. 'r+' - Ouvre en lecture et criture, et place le pointeur de fichier au dbut du fichier. 'w' - Ouvre en criture seule; place le pointeur de fichier au dbut du fichier et rduit la taille du fichier 0. Si le fichier n'existe pas, on tente de le crer. 'w+' - Ouvre en lecture et criture; place le pointeur de fichier au dbut du fichier et rduit la taille du fichier 0. Si le fichier n'existe pas, on tente de le crer. 'a' - Ouvre en criture seule; place le pointeur de fichier la fin du fichier. Si le fichier n'existe pas, on tente de le crer. '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 crer.
De plus, mode peut contenir la lettre 'b'. Cette option n'est utile que sur les systmes qui font la diffrence entre les fichiers binaires et les fichiers textes (en bref, c'est inutile sous Unix). S'il n'est pas ncessaire, il sera ignor.
Fonction fclose() :
int fclose (int ptrfichier)
l'entier prtfichier est l'entier retourn prcdemment lors de l'ouverture du fichier. Exemple : voir fichier coursphp_18.php3
$fich=fopen("essai.txt","a+"); echo "le pointeur retourn est $fich"; fclose($fich);
Die :
void die (string message)
Cette fonction affiche la chane passe en paramtre, puis termine l'excution du script. Elle ne retourne rien de plus.
<?php $file = fopen ("filename", 'r') or die("impossible d'ouvrir le fichier"); ?>
Page 84
Fonction fputs() :
int fputs (int ptrfichier, string texte, int taille)
Ecrit le contenu de la chane texte dans le fichier point par ptrfichier. Si la longueur taille est fournie, l'criture s'arrtera aprs taille octets, ou la fin de la chane (le premier des deux). fputs() est un alias de fwrite(), et lui est identique en tout point. Notez que taille (qui reprsente le nombre de caractres crire) est un paramtre optionnel, et s'il n'est pas spcifi, toute la chane est crite. Exemple : On veut ouvrir le fichier avec le droit en criture, en le crant s'il n'existe pas et en se positionnant la fin... "a" semble plus indiqu que w qui "rinitialise le fichier".
<? $fp = fopen("fichier.txt","a"); if ($fp == false ) { print ("on ne peut pas ouvrir le fichier !"); } else { fputs($fp,"\n"); fputs($fp,"ceci sera ajout au fichier"); fclose($fp); print ("le fichier a t cre - mis jour !"); } ?>
2) on ajoute la chane "ceci sera ajout au fichier" dans le fichier 1) on inscrit un retour chariot la fin du fichier Aprs 4 execution, on pourrait avoir le fichier texte suivant (par exemple)
Page 85
Fonction fgets() :
string fgets (int ptrfichier, int taille)
fgets() retourne la chane lue jusqu' la longueur taille - 1 octet, ou bien la fin du fichier, ou encore un retour chariot (le premier des trois qui sera rencontr). ptrfichier correspond l'identifiant rcupr lors de l'ouverture du fichier. exemple :
<? $fp =@ fopen("lecture.txt","r"); //$fp =@ fopen("http://www.cabare.net/php/visiteurs.txt","r"); if ($fp == false ) { voir fichier print ("on ne peut pas ouvrir le fichier !"); coursphp_18c.php3 } else { $donnee = fgets($fp,255); fclose($fp); print ("le fichier contient $donnee"); } ?>
on ferme le fichier on lit la 1 ligne du fichier concurrence de 255 octets on ouvre le fichier nomm "lecture.txt" en lecture seule (que l'on peut crer prcdemment via notepad
Si le fichier contient plusieurs lignes, on pourrait alors effectuer une lecture en utilisant la fonction feof() qui permet de tester la fin de fichier.
Fonction feof() :
int feof(int ptrfichier)
feof()qui retourne TRUE (1) si le pointeur est la fin du fichier, ou si une erreur survient, sinon, retourne FALSE (0) et incremente alors la position courante. ptrfichier correspond l'identifiant rcupr lors de l'ouverture du fichier.
Page 86
Exemple
<? $fp = @fopen("lecture2.txt","r"); voir fichier if ($fp == false ) coursphp18d.php3 { print ("on ne peut pas ouvrir le fichier !"); } else { while (!feof($fp)) { $donnee = fgets($fp, 255); print (" $donnee <br>"); } fclose($fp); print ("le fichier a t lu"); } ?>
on lit une ligne concurrence de 255 octets tant que l'on n'est pas la fin du fichier
Dans le cas d'une utilisation un peu classique, on peut alors avoir besoin de positionner le pointeur qui parcoure le fichier grace fseek(), pour pouvoir repartir au dbut d'un fichier.
Fonction fseek() :
int feof(int ptrfichier)
fseek() retourne 1 si le pointeur est correctement repositionn en dbut de fichier et retourne 1 sinon.
Page 87
EXEMPLE : si on veut savoir combien de fois on accde une page, il suffit de faire excuter sur la page en question un bout de code php permettant d'incrmenter une variable stocke dans un fichier
on accde cette page sur laquelle on compte le nombre de fois que l'on y est all
// ouvre un fichier existant // si non existant // cration du fichier (et raz) // met 0 dedans // fermeture // ouverture du fichier existant // lecture valeur actuelle // incrementation // repositionnement en dbut // recriture nouvelle valeur
N.B: ce compteur est absolument indpendant des cookies, (voir chap suivant) et marchera donc toujours.
Page 89
Les apports d'une base de donnes sont sans commune mesure avec la difficult d'apprentissage, car en effet on peut noter que : spcificit du format : qui peut tre surpasse par l'accs des driver ODBC mais qui est optimis pour le stockage de donnes diverses et leur manipulation primitives d'accs : permettant tout un tas de manipulations spcifiques rapides (positionnement, ajouts, recherche, tri...) Scurit accrue : seul le serveur de la base de donnes peut accder aux tables de donnes Gestion des accs simultans
Page 90
Principe de ODBC :
Php prend en charge une vaste gamme de bases de Donnes, mais il supporte galement plusieurs varits d'ODBC (Open Data Base Connectivity), ce qui en fait un choix incontournable pour la gestion de bases de donnes sur un site Web le principe du fonctionnement d'ODBC est le suivant : Lorsque l'on crit un code dans un langage donn (ici php) on utilise des fonctions dites standard ODBC Ces dernires ont recours de faon interne du code crit dans le langage natif de la base de donnes piloter, mais accessible simplement via l'installation d'un pilote ODBC... et l'on peut ainsi interfacer une base de donne ACCESS avec Php... L'avantage de ce systme est la non spcificit de l'criture pour un type de base de donnes. L'inconvnient de ce systme est la relative performance des instructions qui souffrent de deux dfauts majeurs: forcment gnriques ODBC et donc non optimises pour telle ou telle base leur traduction en langage natif de la base de donne piloter est aussi une perte de temps certain
Page 91
Php permet d'utiliser un serveur MYSQL, travaillant avec des primitives trs proches de celles du fameux langage d'accs aux bases de donnes SQL (Structured Query Langage) Lorsque sur un serveur Web (dans notre cas un serveur local Apache, mais priori cela peut tre un serveur Web quelconque...) on implmente un serveur MYSQL permettant d'interroger et de manipuler une base de donnes MYSQL, si on peut crire des programmes en php contenant les primitives d'appels au serveur, alors notre script devient un "Programme serveur" permettant de gnrer des pages HTML pour un client via internet...
Page 92
Le principe fondamental d'utilisation de MySQL est de crer une base, dans laquelle on pourra stocker diffrentes tables. Nous travaillerons essentiellement partir de l'environnement Easyphp, qui permet de gnrer des commandes MySQL partir d'assistant... un cours sur MySQL dpassant largement le cadre de notre propos, et nos ambitions ! Dans notre cas on peut donner le nom que l'on souhaite la base, et l'on peut mme crer plusieurs bases diffrentes. Par contre chez certains hbergeurs, la base MYSQL est dj cre avec un nom impos (pour des raisons de scurit...) Les noms ports par les bases de donnes, les tables, les index, les colonnes et les alias suivent tous les mmes rgles dans MySQL: Un nom est constitu de caractres alphanumriques et ``_'' et ``$''. Le nom d'une base de donnes, d'une table, d'un index ou d'une colonne peut avoir jusqu' 64 caractres. Un nom peut commencer avec n'importe quel caractre autoris. En particulier, un nom peut commencer avec un nombre (ce qui n'est pas toujours le cas dans de nombreuses bases de donnes). Cependant, un nom ne peut pas contenir uniquement des nombres. Il est interdit d'utiliser le point dans les noms, car il est dj utilis pour spcifier les noms des colonnes
Serveur Apache et serveur MySql lancs Cliquez avec le bouton droit puis choisissez Web local
Page 93
et de voir l'instruction MySQL qui est gnre automatiquement par notre assistant...
on demande Excuter
On obtient alors
Il est intressant de constater que le logiciel PhpMyAdmin nous permet de visualiser les instructions Sql correspondant aux manip ralises.
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 95
Page 96
Ajouter-Modifier un enregistrement :
Bien sr, terme il sera plus intressant de faire ce genre de manipulation via php, mais le faire via l'assistant permet d'tre sr du contenu de la table, pour vrifier ensuite notre programme construit en php...
Insrer permet d'ajouter des enregistrements dans la table Nous allons ajouter 2 enregistrements : Cabar Michel et Lallias Laurent
un clic sur Sauvegarder permet d'enregistrer la saisie. On voit ci dessous l'instruction SQL gnre.
Page 97
Page 98
Tous les types numriques disposent d'un attribut optionnel ZEROFILL. Cette option force l'affichage de tous les zros non significatifs. Ainsi, dans une colonne de type INT(5) ZEROFILL, 4 sera affich :00004. Quand une valeur trop grande est affecte une colonne, MySQL limitera cette valeur au maximum qu'il peut stocker dans la colonne. les types date et heure, dont les principaux sont : DATE Une date. L'intervalle valide de date va de '1000-01-01' '9999-1231'. MySQL affiche les DATE avec le format. DATETIME Une combinaison de date et d'heure. L'intervalle valide va de '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. MySQL affiche DATETIME avec le format 'YYYY-MM-DD HH:MM:SS'. TIMESTAMP[(M)] Un timestamp : la date et l'heure, exprime en secondes, depuis le 1er janvier 1970. Il permet de couvrir un intervalle allant de'197001-01 00:00:00' quelque part, durant l'anne 2037 TIME Une mesure de l'heure. L'intervalle valide est '-838:59:59' '838:59:59'. MySQL affiche TIME au format 'HH:MM:SS' YEAR Un an. L'intervalle valide est 1901 2155, et 0000. MySQL affiche YEAR au format YYYY (Le type YEAR est nouveau en MySQL 3.22.)
Page 99
Le type DATETIME est utile pour manipuler en mme temps une date et une heure. . MySQL retourne et affiche les valeurs de type DATETIME au format 'YYYY-MM-DD HH:MM:SS'. L'intervalle valide pour le type DATETIME est '1000-01-01 00:00:00' '9999-12-31 23:59:59'. Le type DATE est utilis pour manipuler simplement une date, sans l'heure. MySQL retourne et affiche les valeurs de type DATE au format 'YYYY-MM-DD' L'intervalle valide pour le type DATE est '1000-01-01' '9999-12-31' Le type TIMESTAMP est utilis automatiquement lors de requte , avec la valeur courante de date et d'heure. Si il y a plusieurs colonnes de type TIMESTAMP , seule la premire sera automatiquement mise jour. et les types chanes de caractres dont les principaux sont : CHAR(M) [BINARY] Une chane de caractre de taille fixe, et toujours complte droite par des espaces. M va de 1 255 caractres. Les espaces supplmentaires sont supprims lorsque la valeur est retourne dans une requte. Les tris et comparaisons effectus sur des valeurs de type CHAR sont insensibles la casse, moins que le mot cl BINARY soit prcis. VARCHAR(M) [BINARY] Une chane de caractre. Les tris et comparaisons effectus sur des valeurs de type CHAR sont insensibles la casse, moins que le mot cl BINARY soit prcis. Diffre de char uniquement sur la manire dont elle est stocke (n'est pas complt par des espaces, mais juste par un octe indiquant la longueur de la chaine) N.B: la cration de un type varchar de moins de 4 octet est commute automatiquement en CHAR ENUM('value1','value2',...) Une numration. Un objet chane peut prendre une des valeurs contenue dans une liste de valeur 'value1', 'value2', ..., ou NULL . Une ENUM peut avoir un maximum de 65535 valeurs distinctes. SET('value1','value2',...) Un ensemble. Un objet chane peut prendre une ou plusieurs valeurs, chacun de ces valeur devant tre contenue dans une liste de valeurs 'value1', 'value2', .... Un SET peut prendre jusqu' 64 lments.
Avec MySQL, tous les types de colonnes peuvent tre indexs, l'exception des types BLOB et TEXT. L'utilisation d'index est le meilleur moyen d'acclrer les performances des clauses SELECT. Une table peut avoir jusqu' 16 index. Il n'est pas possible d'indexer une colonne qui contient des valeurs NULL, donc une colonne indexe doit tre dclare NOT NULL. MySQL peut crer des index sur plusieurs colonnes en mme temps
Page 100
PHP ET MYSQL
Maintenant que l'on sait crer une base MySQL avec notre assistant, il est temps d'apprendre comment effectuer une connexion sur cette base en php
Avec le SGBD MySQL, les fonctions php ncessaires sont les suivantes: mysql_connect mysql_select_db mysql_query mysql_close
Cette fonction renvoit un identifiant de connexion ou une valeur 0 en cas d'chec de connexion. On peut interdire le warning par dfaut du php en la faisant prcder du caractre @. 3 paramtres sont attendus : Le nom d'hte du serveur de base de donnes. (ordinateur sur lequel le SGBD est install) Le nom d'utilisateur Mysql Le mot de passe de l'utilisateur
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 101
Fonction mysql_close() :
int mysql_close(int ptrconn)
Cette fonction renvoit une valeur 0 en cas de russite de fermeture de connexion et 1 sinon. 1 paramtre est attendu : c'est l'identifiant rcupr lors de la connexion l'host. (ordinateur sur lequel le SGBD est install) via la fonction mysql_connect()
Dans l'instruction
if (!$link = mysql_connect($host,$user,$password))
on utilise le fait que la fonction mysql_connect renvoit une valeur 0 en cas d'chec de connexion,
Ainsi dans le cas ou le host est appell localhist, on ne peut se connecter et on obtient alors
Si on veut interdire le warning par dfaut du php, Il faut faire prcder le nom de la fonction du du caractre @
if (!$link = @mysql_connect($host,$user,$password))
Page 102
Certains prfrent l'criture suivante l'aide de l'instruction Die Cette fonction affiche la chane passe en paramtre, puis termine l'excution du script
<? $host="localhost";// essayer avec localhist... $user=""; $password=""; if (!$link = @mysql_connect($host,$user,$password)) { die ("Connexion impossible"); } voir fichier print ("Connexion russie"); coursphp_19c.php3 mysql_close ($link); ?>
Cette fonction renvoit une valeur true 1 en cas de russite sur la selection de la base de donne et false 0 sinon. 2 paamtres sont attendus : Le nom de la base La valeur de l'identifiant de connexion au serveur mysql (obtenu lors de la connexion au serveur par la fonction mysql_connect)
Avec le mme principe on peut arriver crire quelque chose du genre aprs avoir effectu une connexion sur le serveur...
<? $host ="localhost"; voir fichier $user =""; coursphp_20.php3 $password = ""; $base_de_donnee ="essais"; if (!$link = @mysql_connect($host,$user,$password)) { die ("Connexion impossible sur $host"); } print ("Connexion russie sur $host"); if (!$database = @mysql_select_db($base_de_donnee,$link)) { die ("Connexion impossible sur $base_de_donnee"); } print ("Connexion russie sur $base_de_donnee"); mysql_close ($link); ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 103
la
Fonction mysql_query() :
De manire gnrale, c'est l'instruction mysql_query qui va permettre de passer n'importe quelle requte SQL, (il faut donc connatre la formulation d'une requte en SQL...)
int mysql_query(string requete, int ptrconn)
Cette fonction renvoit une valeur true 1 en cas de russite de la requte sur la base de donne et false 0 sinon. Ce qui ne signifie rien au niveau des donnes renvoyes par la requte (une requte peut s'executer correctement et ne pas renvoyer de valeurs). 2 paramtres sont attendus :
Commodit d'utilisation
On dfinira pour plus de commodits une variable chane $query contenant la requte SQL, que l'on passera en paramtre la primitive php mysql_query Cela devrait donner alors quelque chose du genre
$query="requte au format SQL"; $result = mysql_query($query);
$table : reprsente la variable contenant le nom de la table concerne. chptable1 : reprsente le champ de la table qui va tre renseign. $varform1 : reprsente la variable de formulaire qui a t renseigne On veut pouvoir insrer des lments dans notre table "simple" de notre base "essais" prcedemment construite l'aide de myadmindont on rappelle ici la structure
Page 104
Il faut se crer un formulaire pour saisir les champs nom et prenom de notre table
la
if (!$database = @mysql_select_db($base_de_donnee,$link)) { die ("Connexion impossible sur $base_de_donnee"); } print ("Connexion russie sur $base_de_donnee"); $query="INSERT INTO $table(nom,prenom) VALUES ('$nom','$prenom')"; $result = mysql_query($query); echo "l execution de la requete renvoit $result"; mysql_close ($link); ?>
$result ne pas 0
vaut
Ce script rcupre depuis le formulaire les variables $nom et $prenom, puis demande d'xcuter la requte si une valeur true (diffrente de 0) est retourne, on sait que la requte s'est effectue on peut ensuite pour vrifier, visualiser notre table par :
Page 105
on a juste test que le retour tait diffrent de 0(requte effectue) ou valait 0 (requte non ralise). Il faut savoir que dans le cas d'une requte effectue correctement, et ramenant un rsultat (c'est le cas d'une requte select), on peut alors passer la valeur retourne par mysql_query d'autres fonctions, qui interprterons alors "l'identifiant de rsultat". Ici mysql_numrows() compte les lignes d'un rsultat.
<? $host ="localhost"; $user =""; $password = ""; $base_de_donnee ="essais"; if (!$link = @mysql_connect($host,$user,$password)) { die ("Connexion impossible sur $host"); } if (!$database = @mysql_select_db($base_de_donnee,$link)) { die ("Connexion impossible sur $base_de_donnee"); } // ici on est bien connect sur la base publie sur l'hte $query="SELECT * From simple"; //requete SQL $result = mysql_query($query); //rcup d'un ptr sur le rsultat du select echo "l execution de la requete renvoit $result"; $nbenreg=mysql_numrows($result); print("il y a $nbenreg enregistrements dans la table"); mysql_close ($link); ?>
N.B: on reprendra plus loin l'tude de SELECT, il s'agit ici d'un exemple pour comprendre les diffrentes "valeurs de retour " de l'instruction mysqlquery()
Page 106
Pour mettre en vidence toute une srie de manipulations de base de donne Mysql en php, nous allons construire une ensemble de fonctionnalits utilisables depuis une page HTML nomes gestion.htm
Les fonctions mysql dont on aura besoin, sont rassemble page 124, les primitives SQL dont on aura besoin pour construire nos requtes sont rassembles page 127
Introduction :
A l'issue de la saisie depuis un formulaire, on souhaite pouvoir stocker les donnes saisies dans une table nomme inscrits d'une base de donnes nomme formulaire. Il va donc falloir : Crer un formulaire de saisie que l'on nommera form_saisie.html Crer une base de donnes que l'on nommera formulaire Crer une table que l'on nommera inscrits Crer un script php que l'on nommera saisie.php3. Ce script sera appel lors de la validation de la saisie du formulaire.
Page 107
Le formulaire de saisie :
On prvoit donc 4 zones de saisie, permettant respectivement la saisie du Prnom, du Nom, de l'Adresse Email et du Sexe de la personne qui s'inscrit.
Page 108
Dans laquelle on va crer une table nomme inscrits avec les 5 champs suivants :
NB: notamment On cre un champ ID dot de l'attribut Primary (key) de manire tre sur que malgr les ventuels doublons, chaque enregistrement soit unique dans la table... de ce fait on lui ajoutera galement la proprit autoincrement
Page 109
/********** affichage variables formulaire pour info**********/ echo "Bonjour $genre $prenom $nom, votre email est $email";
On peut se dire ici que "ces lignes" de codes, seront ncessaires pour toute procdure devant ouvrir une connexion sur la base mysql il serait interessant d'apprendre les mettre dans un fichier externe, de manire ne pas surcharger avec le mme code, toutes les bout de programmes. Le passage d'une requte mysql sur la base
Le plus difficile ici, c'est de connatre la syntaxe de la requte SQL passer en php sur la base mysql On peut s'aider de notre phpmyadmin, pour executer une fois une commande similaire, (ici ajouter un enregistrement)
/********** infos ajouter dans la table **********/ $query = "INSERT INTO $table(prenom,nom,email,genre) VALUES('$prenom','$nom','$email','$genre')"; /********** stockage dans la bdd **********/ $result = mysql_query($query); mysql_close($link);
$query contient la requte SQL que l'on passe ensuite en paramtre mysql_query()
Page 110
permet de faire rfrence du code se trouvant dans un autre fichier, contenant simplement les instructions
<?php echo"<font size=\"4\" color=\"blue\"> mon premier script php !</font>"; ?>
N.B: pour tre prcis, le fichier "inclus" ne ncessite pas forcment une extension de type .php3, mais se contente d'une quelconque extension.
Page 111
Prcisez le dossier de stockage du fichier texte ainsi que son nom. C:\Program Files\EasyPHP\www\coursphp\adr_email.txt
Page 112
Mais il faut aussi savoir le faire en php. Si on passe sur les problmes de connexion et de dconnexion, dsormais classiques, l'essentiel du script concerne bien sr la requte SQL et le traitement de son rsultat... Plus exactement il faut savoir selectionner des enregistrement l'aide d'une requte SELECT, et traiter le rsultat l'aide d'une instruction php mysql_fetch_row() La requte SELECT (cf page 128) que l'on passe ici est SELECT * FROM $table puis on traite le tableau par mysql_fetch_row (cf page 125)
/*** On cherche tous les enregistrements ***/ $query = "SELECT * FROM $table"; $result = mysql_query($query); /*** le rsultat de la requte est stock dans un tableau ***/ while($row = mysql_fetch_row($result)) { /** on affiche le genre, le nom, le prenom, l'email **/ echo " <p>\n <b>$row[1] $row[2] $row[3] $row[4]</b>\n <p>\n "; } echo $nb;
$result est un pointeur sur le rsultat du SELECT pointeur que l'on utilise en paramtre de mysql_fetch_row()
Page 113
mysql_query() retourne un identifiant (pointeur) comme rsultat d'une requte SQL de type SELECT. Ici cette variable contient l'ensemble des enregistrements de la table et n'est donc pas exploitable tel quel. Ainsi on utilise la fonction mysql_fetch_row(), qui dcoupe les lignes de rsultat en colonnes (pour nous id, genre, nom, prenom, email) et les affecte une variable tableau dans l'ordre o elles arrivent. $rows[0] correspond au champ $rows[1] correspond au champ $rows[2] correspond au champ $rows[3] correspond au champ $rows[4] correspond au champ id prenom nom email genre dans la table dans la table dans la table dans la table dans la table
D'autre part, on inclut gnralement mysql_fetch_row() dans une boucle while de telle faon ce que l'ensemble des lignes de rsultat soient traites. Lorsqu'il n'y a plus de ligne traiter, la boucle while se termine et l'interprteur excute la suite des instructions.
reprsente la variable contenant le nom de la table reprsente le champ de la table sur lequel on dsire faire
et si l'on souhaite avoir uniquement les informations du type genre nom adresse mail, il suffira de ne pas traiter tous les lments du tableau renvoy par mysql_fetch_row()
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 114
while($row = mysql_fetch_row($result)) { /** on affiche le genre, le nom, l'email **/ echo " <p>\n <b>$row[4] $row[2] $row[3]</b>\n <p>\n "; }
Maintenant que l'on sait crer une base MySQL et que l'on a vu le principe d'criture d'une requte SQL travers la primitive php mysql_query, essayons de traiter un exemple plus complet que le simple affichage du nombre d'enregistrements existants dans une table.
Page 115
Page 116
Rechercher un enregistrement :
On veut proposer l'utilisateur la recherche d'un enregistrement qui contient une certaine valeur soit dans le champ nom soit dans le champ prenom... Il faut crer un formulaire permettant la saisie du nom ou prnom rechercher
HTML
se
passant
sans
problme des
Il faut crer un script permettant la recherche et l'affichage enregistrements correspondant au nom ou prnom recherch
Le script de recherche est peu prs identique aux scripts prcdents mais il faut apporter deux modifications on ne veut pas lancer une recherche sans mot cl...
if (($Mot == "")||($Mot == " ")) { //if empty($mot)) serait plus propre ! /** Si aucun mot cl n'a t saisi demande l'utilisateur de bien vouloir prciser un mot cl **/ echo " Veuillez entrer un mot cl s'il vous plat! voir fichier <p>"; recherche.php3 } else { ........ totalit du traitement....... } $query = "SELECT * FROM $table WHERE nom LIKE \"%$Mot%\" OR prenom LIKE \"%$Mot%\" "; $result = mysql_query($query);
reprsente la variable contenant le nom de la table reprsente le champ sur lequel on dsire faire le tri reprsente la variable contenant le mot recherch permet de faire des comparaisons utilisant des jokers : permet de remplacer des caractres (comme le * du dos)
Supprimer un enregistrement :
On veut proposer l'utilisateur la suppression d'un enregistrement qui correspond une valeur du champ identificateur... Il faut crer un formulaire permettant la saisie du n de l'enregistrement supprimer
La cration du formulaire HTML se passant sans problme (en form_supprime.htm). Il faut crer un script permettant la suppression de l'enregistrement correspondant au numro saisi Par rapport un script de slection classique quelques modifications du code apparaissent
/** Si aucun id saisi demande de bien vouloir prciser un id **/ if (empty($identifiant)) { echo " Vous n'avez rien crit : Veuillez entrer un chiffre s'il vous plat ! <p>"; } /*** On affiche l'enregistrement correspondant l'identifiant saisi ***/ else { $query = "SELECT * FROM $table WHERE id = $identifiant"; $result = mysql_query($query); while($row = mysql_fetch_array($result)) voir fichier { supprime.php3 echo " <p>\n <b>identifiant dtruit : $row[0] : $row[1] $row[2] $row[3] </b>\n <p>\n "; } /*** On dtruit l'enregistrement correspondant l'identifiant saisi ***/ $query = "DELETE FROM $table WHERE id=$identifiant"; $result = mysql_query($query); }
$table : chptable :
reprsente la variable contenant le nom de la table concerne reprsente le champ de la table sur lequel on dsire faire la recherche
Modifier un enregistrement :
On veut proposer l'utilisateur la modification d'un enregistrement. Dans un premier temps on cherche son enregistrement
puis il obtient dans lequel il effectue ses modifications Il faut crer un formulaire permettant la saisie du nom ou prnom rechercher La cration du form_modifie.htm) formulaire HTML se passant sans problme (en
Nous allons ensuite crer 2 scripts php : le premier nomm modifie.php3 devra afficher dans un formulaire les informations concernant la personne dont on veut modifier une ou plusieurs donnes Le second script nomm modifie2.php3 devra Voici quoi pourrait ressembler le script modifie.php3
<html> <head> </head> <body> <? include("connection.php3"); /** Si aucun id saisi demande l'utilisateur de bien vouloir prciser un id **/ if (empty($Mot)) { echo " Vous n'avez rien crit : Veuillez entrer un mot cl s'il vous plat ! <p>"; } /*** On affiche l'enregistrement correspondant l'identifiant saisi ***/ else { $query = "SELECT * FROM $table WHERE nom LIKE \"%$Mot%\" OR prenom LIKE \"%$Mot%\" P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 119
afficher les anciennes informations afficher les nouvelles informations faire le changement (on pourrait pour plus de scurit demander la confirmation des modifications)
affichage du formulaire permettant "d'diter " l'enregistrement modifier Ce formulaire sera trait dans le script modifie2.php3
"; $result = mysql_query($query); print("<form Action=modifie2.php3 Method=post>"); while($row = mysql_fetch_row($result)) { echo "<center> <p>\n <b>Enregistrement Modifiable : </b><br> <input type=text name=identifiant value=$row[0]> <br> nom <br><input type=text name=nom value=$row[2]> <br> prnom <br><input type=text name=prenom value=$row[1]> <br> email <br><input type=text name=email value=$row[3]> <br> genre <br><input type=text name=genre value=$row[4]> <br> </b>\n <p>\n "; } print("<input type=submit value=modifier> <br>"); print("<input type=reset value=annuler> <br>"); print("</center></form>"); } // on ferme la base mysql_close(); ?> <h5 align=center><a href="gestion.htm">Retour page de GESTION</a> | </h5> </body> </html>
/********** pour visualiser l'enreg avant la modification **********/ $query = "SELECT * FROM $table WHERE id = $identifiant"; $result = mysql_query($query); echo "enregistrement avant modification ?"; echo "<Table>"; while($row = mysql_fetch_row($result)) { $affid=$row[0]; $affnom=$row[1]; $affprenom=$row[2]; P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 120
$affemail=$row[3]; $affgenre=$row[4]; echo "<tr> <td width=22%>$affid</td> <td width=22%>$affgenre</td> <td width=22%>$affnom</td> <td width=22%>$affprenom</td> <td width=34%>$affemail</td> </tr>"; } echo "</Table>"; /********** MODIFICATION **********/ $query = "UPDATE $table SET prenom=\"$prenom\", nom=\"$nom\", email=\"$email\", genre=\"$genre\" WHERE id = \"$identifiant\""; $result = mysql_query($query); /********** pour visualiser l'enreg aprs la modification **********/ $query = "SELECT * FROM $table WHERE id = $identifiant"; $result = mysql_query($query); echo "enregistrement aprs modification !"; echo "<Table>"; while($row = mysql_fetch_row($result)) { $affid=$row[0]; $affnom=$row[1]; $affprenom=$row[2]; $affemail=$row[3]; $affgenre=$row[4]; echo "<tr> <td width=22%>$affid</td> <td width=22%>$affgenre</td> <td width=22%>$affnom</td> <td width=22%>$affprenom</td> <td width=34%>$affemail</td> </tr>"; } echo "</Table>"; // on ferme la base mysql_close(); ?> </body> </html>
Page 121
$identifiant : reprsente la variable contenant la valeur utiliser reprsente le champ de la table que l'on souhaite
UPDATE met jour une ligne existante dans une table. La clause SET indique quelles colonnes modifier, et quelles valeurs mettre dans ces colonnes. La condition WHERE permet de choisir quelles lignes sont mettre jour. Sinon, toutes les lignes sont mises jour
Dans les extraits de script ci dessus, une requte est envoye grce l'instruction mysql_query et le rsultat de cette requte est stock dans la variable $result. mysql_numrows permet de compter le nombre d'enregistrements slectionns. Essayez les !
Exemple 1 :
Exemple 3 : P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 122
Slection de tous les enregistrements de la table dans lesquels nom commence par Du
$query="SELECT * FROM $table where typevel like 'Du%'"; $result = mysql_query($query);
Exemple 4 :
Slection de tous les enregistrements de la table dans lesquels nom commence par Du et dont le genre est Madame
$query="SELECT * FROM $table (genre='Madame'))"; $result = mysql_query($query); where
((nom like 'Du%') AND
Exemple 5 :
Slection de tous les enregistrements de la table dans lesquels les ventes sont comprises entre 5000 et 7000
$query="SELECT * FROM $table where (ventes BETWEEN 5000 AND 7000)"; $result = mysql_query($query);
Exemple 6 :
Slection de tous les enregistrements de la table dans lesquels figurent Mathieu et Boully
$query="SELECT * FROM $table where nom IN ('Blier', 'Durand')"; $result = mysql_query($query);
Exemple 7 :
Slection de tous les enregistrements de la table dans lesquels commercial=Mathieu mais rcupration uniquement de la valeur des ventes et des rgions concernes
$query="SELECT vente,region FROM $table Where nom='Blier' "; $result = mysql_query($query);
Page 123
mysql_close
int mysql_close (int link_identifier)
Retourne TRUE en cas de succs, et FALSE sinon. mysql_close() ferme la connexion au serveur MySQL associe l'identifiant link_identifier . Par dfaut, s'applique la dernire connexion ouverte. NB : Cette commande n'est pas strictement ncessaire, car toutes les connexions non persistantes seront automatiquement fermes la fin du script.
mysql_connect
int mysql_connect (string host :port, string username, string password )
Retourne un identifiant positif de connexion en cas de succs, et sinon FALSE. mysql_connect() tablit une connexion un serveur MySQL. 3 arguments sont ncessaires pour une connection, host, username, password. Tous les arguments sont optionnels, et s'ils manquent, les valeurs par dfaut sont utilises. Le lien sera ferm lors de la fin du script automatiquement ou avec mysql_close(). host : c'est le nom d'hte sur lequel notre base Mysql est heberge. Par dfaut le nom "localhost" sera utilis. Le nom d'hte peut aussi inclure un numro de port, sous la forme : "host:port". ( partir de la version 3.0B4.) username : c'est le nom de login autoris ouvrir une connexion sur cette base de donne. Par dfaut le nom du propritaire du process sera utilis. password : c'est le mot de passe associ au login pour cet utilisateur de la base de donne Par dfaut le mot de passe vide sera utilis. N.B: Si un second appel mysql_connect() est fait avec les mmes arguments, PHP n' ouvre pas une nouvelle connexion, mais retourne l'identifiant de la connexion dj ouverte. Exemple MySQL connect
<?php $link = mysql_connect ("kraemer", "marliesle", "secret") or die ("Connexion impossible"); print ("Connexion russie"); mysql_close ($link); ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 124
mysql_fetch_row
array mysql_fetch_row (int result)
Retourne un tableau numr qui correspond la ligne demande, ou FALSE si il ne reste plus de ligne. mysql_fetch_row() va rechercher une ligne dans le rsultat associ l'identifiant de rsultat spcifi. La ligne est retourne sous la forme d'un tableau. Chaque colonne est enregistr sous la forme d'un tableau commenant la position 0. Les appels suivants mysql_fetch_row() retourneront la ligne suivante dans le rsultat, ou FALSE si il n'y a plus de ligne disponible.
mysql_query
int mysql_query (string query, int link_identifier )
mysql_query() retourne TRUE ou FALSE, pour indiquer le succs ou l'chec d'une requte SQL de type INSERT, DELETE ou UPDATE. mysql_query() retourne un identifiant (pointeur) pour manipuler le rsultat d'une requte SQL de type SELECT. N.B: En cas de retour TRUE, la requte tait valide et a pu tre excut sur le serveur. Cela n'indique pas le nombre de ligne affectes, ou retournes. Il est parfaitement possible qu'une requte valide n'affecte aucune ligne ou ne retourne aucune ligne. mysql_query() envoie une requte SQL la base de donnes actuellement active sur le serveur MysQL. Si link_identifier n'est pas prcis, la dernire connexion est utilise. Si aucune connexion n'a t ouverte, la fonction tentera d'en ouvrir une, avec la fonction mysql_connect() mais sans aucun paramtre (c'est dire avec les valeurs par dfaut).
mysql_num_rows
int mysql_num_rows (int result)
Page 125
mysql_select_db
int mysql_select_db (string database_name, int link_identifier )
Retourne TRUE en cas de succs, FALSE sinon. mysql_select_db() change la base de donnes active sur la connexion reprsente par l'identifiant de connexion. Si aucun identifiant n'est spcifi, la dernire connexion est utilise. S'il n'y a pas de dernire connexion, la fonction tentera de se connecter seule, avec mysql_connect() et les paramtres par dfaut. Toutes les requtes suivantes avec mysql_query() seront faites avec la base de donnes active.
Page 126
Insert:
insre une nouvelle ligne dans une table existante
INSERT INTO $table(chptable1,chptable2) VALUES ('$varform1','$varform2')
$table : reprsente la variable contenant le nom de la table concerne par l'ajout. chptable1 : reprsente les champs de la table qui vont tre renseigns. $varform1 : reprsente les variables qui sont utilises pour mettre leur valeur dans la table.
Delete:
Le dtail de la requte SQL donne:
DELETE FROM $table WHERE chptable = $identifiant
$table : chptable :
reprsente la variable contenant le nom de la table concerne reprsente le champ de la table sur lequel on dsire faire la recherche
Update:
UPDATE met jour une ligne existante dans une table. La clause SET indique quelles colonnes modifier, et quelles valeurs mettre dans ces colonnes. La conditions WHERE permet de choisir quelles lignes sont mettre jour. Sinon, toutes les lignes sont mises jour Le dtail de la requte SQL donne:
UPDATE $table SET chptable = $identifiant, WHERE chptable1 = $identifiant1
$identifiant : reprsente la variable contenant la valeur utiliser reprsente le champ de la table que l'on souhaite
Page 127
Select:
La commande SELECT permet de slectionner des enregistrements dans une table. Cette commande permet de rcuprer tous les champs spcifis en argument SELECT dans une table prcise en argument FROM rpondant aux critres indiqus en argument WHERE SELECT [nom_de_colonne, | *] [FROM table_references [WHERE where_definition] [ORDER BY [ASC | DESC]] [LIMIT [offset,] rows]] * permet de spcifier que l'on conservera tous les champs. Si on dsire conserver uniquement certains champs il suffira de donner leurs noms spars par une virgule. La clause FROM table_references indique les noms des tables o les lignes seront lues. SI vous utilisez plus d'une table, vous faites une jointure. Pour plus d'informations sur les jointures, voyez JOIN. La clause WHERE est charge de spcifier les conditions de recherche. On peut utiliser les oprateurs de comparaison habituels (=, >, <, >=, <=, <>, !>, AND, OR, NOT) mais aussi d'autres oprateurs tels que : LIKE qui permet de rechercher une chane de caractres sans tenir compte de la casse. Avec LIKE vous pouvez utiliser les deux jokers suivants : % _ [-] : Remplace n'importe quel nombre de caractres, mme zro : Remplace exactement un caractre : permet de dfinir un intervalle de caractres
BETWEEN qui permet de rechercher une valeur dans un intervalle. IN permet de rechercher une valeur dans une liste La clause ORDER BY est destine au tri par ordre croissant (asc) ou dcroissant (desc) des rponses. La clause LIMIT peut tre utilise pour limiter le nombre de lignes retournes par la commande SELECT. LIMIT prend un ou deux arguments numriques. Si deux arguments numriques sont fournis, le premier spcifie l'offset de la premire ligne retourner, et la seconde spcifie le nombre maximum de lignes retourner. La premire ligne est l'offset 0 (et non pas 1):
Page 128
$DOCUMENT_ROOT $HTTP_REFERER
Nom du rpertoire physique contenant la page affiche. L'adresse de la page (si elle existe) qui a conduit le client la page courante. Cette valeur est affecte par le client, et tous les clients ne le font pas.
$HTTP_ACCEPT_LANGUAGE La langue utilise par le navigateur du visiteur $HTTP_USER_AGENT $REMOTE_ADDR $REMOTE_HOST $SCRIPT_FILENAME $SCRIPT_NAME L'identifiant du navigateur L'adresse IP du client qui demande la page courante. Adresse de l'hte Le chemin absolu jusqu'au script courant. Le chemin d'accs au script par rapport $DOCUMENT_ROOT. Cela sert lorsque les pages doivent s'appeler elles-mmes. retourne le nom d'hte correspondant l'IP ip_address. Si une erreur survient, retourne ip_address.
gethostbyaddr()
gethostbyname().
<? Echo "DOCUMENT_ROOT racine du site : $DOCUMENT_ROOT<br>"; Echo "HTTP_REFERER dossier courant : $HTTP_REFERER<br>"; Echo "HTTP_ACCEPT_LANGUAGE langue : $HTTP_ACCEPT_LANGUAGE<br>"; Echo "HTTP_USER_AGENT navigateur : $HTTP_USER_AGENT<br>"; Echo "REMOTE_ADDR adresse IP : $REMOTE_ADDR<br>"; Echo "SCRIPT_FILENAME chemin d'acces au script: $SCRIPT_FILENAME<br>"; Echo "SCRIPT_NAME nom du script: $SCRIPT_NAME<br>"; Echo "REMOTE_HOST nom de l'hote: $REMOTE_HOST<br>"; Echo" get host by addr avec remote host nom de la machine sur le rseau : ". gethostbyaddr($REMOTE_HOST) ."<br>"; Echo" get host by name avec remote host adresse ip de la machine sur le rseau : ". gethostbyname($REMOTE_HOST) ."<br>"; Echo" get host by addr : ". gethostbyaddr($REMOTE_ADDR)."<br>"; Echo" get host by name : ". gethostbyname($REMOTE_ADDR)."<br>"; ?> P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 129
Page 130
LES COOKIES
Objectif :
Identifier de manire durable un client, un usager du site. Une grande partie des internautes n'ont pas leur propre adresse ip. Pour accder Internet ils utilisent les services d'un fournisseur d'accs (qui leur attribue une adresse ip dynamique) on ne peut donc la seule vue de l'adresse ip identifier un usager du site. Les cookies sont donc des petits fichiers texte stocks sur la machine du client permettant ainsi de le reconnatre.
Cookies et php
Cration d'un cookie
Syntaxe de la fonction : setcookie(name, value,expire,path,domain,secure) Seuls les 3 premiers paramtres sont rgulirement utiliss : name : nom donn la variable cookie value : informations stockes dans le cookie expire : temps unix pendant lequel sera actif le cookie (s'exprime en secondes) Dans le cas suivant on cre une variable cookie nomm VISITEUR qui contient l'heure de connection et qui expirera dans 1 heure.
/* cration de la variable cookie VISITEUR */ setcookie("VISITEUR",date("d/m/y"),time()+3600) /* il s'agit d'une variable on peut donc l'utiliser comme telle */ echo "Vous tes connects ".$VISITEUR;
N.B: la fonction setcookie doit tre appele en dbut de script avant toutes instructions HTML. N.B: le nom du cookie est crit en majuscules N.B: Le script peut tre stock dans la racine de votre siteau dans ce cas il porte le nom de votre site sinon il porte le nom du dossier dans lequel il se trouve. Le nom du cookie gnr sur la machine du client contiendra de ce fait le nom du domaine visit. Par exemple : si un script (s'il est plac la racine) du site www.jesuisleplusbbeau.com cr un cookie sur votre machine celui ci s'appellera : nomsession@www.jesuisleplusbeau[1].txt
Page 131
Dtruire un cookie
Il suffit de dclarer le cookie sans autre paramtre que le nom. (a ce moment l, il va avoir automatiquement une dure de vie 0)
setcookie("VISITEUR");
Exemple
Dans un premier temps nous allons crer un formulaire demandant son nom l'internaute se connectant notre site.
<html> <body> <form action="cookie_ecrit.php3" method="post"> Nom du client <input type = "text" name="nom"> <input type = "submit" > </form> <body> <html>
Ce formulaire appelle un script nomm cookie_ecriture.php3 crant 2 cookies mmorise ce nom dans un cookie (INTERNAUTE) mmorise la date et l'heure de connexion dans un autre cookie (DATE)
<? /*cration d'un cookie nomm internaute qui conserve le nom*/ setcookie("INTERNAUTE",$nom,time()+3600); /*cration d'un cookie nomm date qui conserve la date de connexion*/ setcookie("DATE",date( "d/m/y h:m:s"),time()+3600); echo "<a href=cookie_lecture.php3>Lire le cookie</A>"; ?>
Page 132
de ce script existe un lien vers un fichier nomm cookie_lecture.php3 qui : affiche l'cran l'ensemble des cookies
<? echo "Bonjour ". $HTTP_COOKIE_VARS["INTERNAUTE"]; echo " comment allez vous depuis le ". $HTTP_COOKIE_VARS["DATE"]; ?>
Etude du cookie :
(stock dans le dossier racine du site www.lallias.com) Sur ie : le cookie va se trouver dans le dossier cookies sous dossier de windows.
La premire valeur (internaute) est le nom du cookie. Notez que le nom du cookie n'est pas le nom du fichier (nom du fichier : lolo@www.lallias[2].text). Si plusieurs cookies proviennent du mme site ils sont tous stocks dans le mme fichier (ici cela explique le 2 qui apparat dans le nom : lolo@www.lallias[2].txt ) La seconde valeur (Auguste+Laurence) est la valeur assigne au cookie. La troisime valeur (www.lallias.com/) indique d'o provient le cookie et par quel site il est utilis.
Page 133
SESSIONS (PHP 4)
Principe
Lorsque l'on dmarre une session php, le serveur lui affecte un identifiant de session nomm PHPSESSID (abrviation : SID). A partir de ce moment toutes les variables de session que vous allez cres dans vos scripts seront soit : stockes sur le serveur dans un fichier ressemblant un cookie (mais cot serveur!!). C'est l'option par dfaut. stockes dans une table de base de donnes que vous aurez cre cet effet. stockes dans les mmoires des processeurs du serveur.
Les variables enregistres comme variables de session sont utilisables dans d'autres scripts. Les sessions vont donc servir au passage de paramtres entre scripts.
Page 134
Le nom et le produit seront transmis un script php (ident.php3) qui affichera ces informations et les dfinira comme variables de session.
Le formulaire (formulaire_ident.html)
<html> <body> <form action="ident.php3" method=post> Nom du client <input type=text name=client><br> Choix du produit <select name=produit> <option >Imprimante</option> <option >Micro ordinateur</option> <option >Souris</option> <option >Tapis</option> </select> <input type=submit value=Commander> </Form> </body> </html>
Une session est active soit implicitement par une instruction session_start(), soit explicitement par une instruction session_register(). Attention l'instruction activant une session doit tre la premire du script.
Le script (ident.php3)
Page 135
<? /*on dmarre une session*/ session_start(); echo "Bonjour, une session a t cre. <br>Elle se nomme ".SID. " <br>Cet identificateur de session sera valable tant que vous n'aurez pas quitt notre site <br>"; echo "<hr>"; /*on rcupre le nom du client provenant du formulaire*/ $nomclient=$client; /*on rcupre le nom du produit provenant du formulaire*/ $nomproduit=$produit; /*on rcupre la date et l'heure dans une variable date*/ $date=date("d/m/y H:i:s"); /*on affecte la variable pommade */ /*la porte de cette variable ne dpassera pas ce script*/ $pommade="vous tes l'un de nos meilleurs clients "; /*on cre une variable de session nomme nomclient*/ session_register("nomclient"); /*on cre une variable de session nomme nomproduit*/ session_register("nomproduit"); /*on cre une variable de session nomme date*/ session_register("date"); echo "Bienvenue $nomclient $pommade <br>"; echo "Nous sommes le ".$date ; echo " et vous dsirez commander le produit suivant : $produit <br>"; /*appel d'un autre script dans lequel on pourra utiliser $nomclient et $nomproduit et $date mais pas $pommade*/ echo "<a href=suite.php3> Suite</a>"; ?>
Le script suite.php3
Les variables de session sont accessibles car le lien se fait travers l'URL ont peut donc continuer dialoguer avec l'internaute client.
Page 136
<? session_start(); /*on peut utiliser la variable de session $nomclient*/ echo "Vous tes : $nomclient <br>"; /*on ne peut pas utiliser la variable $pommade*/ echo " $pommade <br>"; /*on peut utiliser la variable de session $date*/ echo "Vous vous tes connects le : $date <br>"; /*on peut utiliser la variable de session $nomproduit*/ echo " et vous nous avez command le produit suivant : $nomproduit <br>"; echo "Nous allons mettre fin la session... bientt <br>"; session_destroy(); /*appel d'un autre script dans lequel on ne pourra utiliser aucune variable*/ echo "<a href=suite_et_fin.php3> Suite et fin</a>"; ?>>
Le script suite_et_fin.php3
Les variables de session ont t dtruites, elles ne sont plus accessibles.
<? session_start(); /*aucune des variables n'est accessible*/ echo "Vous tes : $nomclient <br>"; echo "Produit command : $nomproduit <br>"; echo "A la date du : $date <br>"; ?>
Script ident2.php3
<? /*on dmarre une session*/ session_start(); $date=date("d/m/y H:i:s"); if(empty($HTTP_COOKIE_VARS["NUMCLIENT"])) { /*cration d'un identifiant utilisateur*/ $id=md5(uniqid(rand())); /* initialisation du nbre de visites*/ $nb=1; /*cration d'un cookie nomm NUMCLIENT qui conserve l'identifiant*/ setcookie("NUMCLIENT",$id,time()+3600); /*cration d'un cookie nomm NBCMDE qui conserve le nbre de visites*/ setcookie("NBCMDE",$nb,time()+3600); echo "vous tes un nouveau client <br>"; } else { /*on rcupre le nbre de visite*/ $nb= $HTTP_COOKIE_VARS["NBCMDE"]; /*on incrmente de 1 le nbre de visites*/ $nb++; /*modification d'un cookie nomm NBCMDE qui conserve le nbre de visites*/ setcookie("NBCMDE",$nb,time()+3600);; echo "vous tes un ancien client"; echo " et c'est votre ".$nb." commande <br>"; } echo "Bonjour, une session a t cre. <br>Elle se nomme ".SID. " <br>Cet identificateur de session sera valable tant que vous n'aurez pas quitt notre site <br>"; echo "<hr>"; /*on rcupre le nom du client provenant du formulaire*/ $nomclient=$client; /*on rcupre le nom du produit provenant du formulaire*/ $nomproduit=$produit; /*on rcupre la date et l'heure dans une variable date*/ $date=date("d/m/y H:i:s"); /*on affecte la variable pommade */ /*la porte de cette variable ne dpassera pas ce script*/ $pommade="vous tes l'un de nos meilleurs clients "; /*on cre une variable de session nomme nomclient*/ session_register("nomclient"); /*on cre une variable de session nomme nomproduit*/ session_register("nomproduit"); /*on cre une variable de session nomme date*/ session_register("date"); P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 138
echo "Bienvenue $nomclient $pommade <br>"; echo "Nous sommes le ".$date ; echo " et vous dsirez commander le produit suivant : $produit <br>"; /*appel d'un autre script dans lequel on pourra utiliser $nomclient et $nomproduit et $date mais pas $pommade*/ echo "<a href=suite.php3> Suite</a>"; ?>
Pensez quitter l'ensemble des fentres du navigateur pour tester le fonctionnement du cookie et de la session.
Page 139
echo "Vous avez consult la page 1 : $compteur1 fois<br>"; echo "Vous avez consult la page 2 : $compteur2 fois<br>"; echo "Vous avez consult la page 3 : $compteur3 fois<br>"; echo "| <a href=page1.php3>vers page 1</A>" ; echo " | <a href=page2.php3>vers page 2</A>" ; echo " | <a href=page3.php3>vers page 3</A> |" ; ?>
Page 140
Script page1.php3
<? session_start(); echo "vous tes sur la page 1<br>"; $compteur1++; echo "| <a href=page1.php3>vers page 1</A>" ; echo " | <a href=page2.php3>vers page 2</A>" ; echo " | <a href=page3.php3>vers page 3</A> " ; echo " | <a href=synthese.php3>vers synthese</A>|" ; ?>
Page 141
Principes de base
La dclaration du format d'image utilis
Header("Content-type: image/png"); Ou Header("Content-type: image/jpeg"); Ou Header("Content-type: image/gif"); (le format gif est abandonn depuis la version 1.6 du GD).
La cration de l'image
Chaque image est dsigne par un identifiant (integer) renvoy lors de l'ouverture de l'image, cet identifiant sera transmis aux autres fonctions graphiques utilises dans le script. $var_ident =imagecreate(taille_x,taille_y); Cette instruction cre une image de x pixels de large sur y pixels de large. Ex : $imge=ImageCreate(100,100);
La couleur de l'image
Lorsque l'image est cre il faut lui attribuer des couleurs. Il est prfrable de dfinir des variables ayant des noms significatifs. La dfinition des couleurs repose sur le mode RVB. $couleur=ImageColorAllocate(var_ident,R,V,B); exemples : $bleu= ImageColorAllocate($imge,0,0,255); $noir=ImageColorAllocate($imge,0,0,0); $blanc=ImageColorAllocate($imge,255,255,255); La premire couleur dfinie correspondra la couleur de l'arrire plan Les autres couleurs pourront tre utilises comme bon vous semble.
Page 142
Destruction de l'image
L'image doit tre supprime afin de librer les ressources. ImageDestroy($var_ident);
Exemple de script :
Cration d'une image de couleur bleue
<? //envoi d'un entte prcisant que l'image est format png header("content-type: image/png");
Page 143
//trace une ligne blanche du coin suprieur gauche au milieu de l'image imageline($imge,0,0,50,50,$blanc);
//trace une ligne blanche du coin infrieur gauche au milieu de l'image imageline($imge,0,100,50,50,$blanc);
Page 144
exemple :
//trace un demi arc de cercle imagearc ($imge, 50, 50, 50, 50, 0,180, $blanc);
//trace une ellipse imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc);
Page 145
//trace un demi arc de cercle imagearc ($imge, 50, 50, 50, 50, 0,180, $blanc);
//trace une ellipse imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc);
Page 146
//dfinition des points $points[0]=30; $points[1]=30; $points[2]=50; $points[3]=50; $points[4]=70; $points[5]=30; $points[6]=50; $points[7]=70;
//trace une ellipse imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc);
Page 147
<? //envoi d'un entte prcisant que l'image est format png header("content-type: image/png");
$string="Formation PHP";
//ecrit le texte dans la police 2 par dfaut imagestring($imge,2,10,40,$string,$blanc); P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 148
$string="Formation PHP";
Page 149
<? //envoi d'un entte prcisant que l'image est format png header("content-type: image/png");
$blanc=imagecolorallocate($imge,255,255,255);
imagestring($imge,4,225,70,$string[0],$blanc); imagestring($imge,4,305,195,$string[1],$blanc); imagestring($imge,4,325,285,$string[2],$blanc); P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 150
imagestring($imge,4,130,225,$string[3],$blanc);
imagecreatefrompng() retourne une chane vide en cas d'chec. Elle affiche aussi un message d'erreur, qui s'affiche comme un lien bris dans un navigateur web. Exemple de gestion d'erreur lors de la cration d'image
function LoadPNG ($imgname) { $imge = @ImageCreateFromPNG ($imgname); /* Tentative d'ouverture */ if (!$imge) { /* Vrification */ $imge = ImageCreate (150, 30); /* Cration d'une image blanche */ $blanc = ImageColorAllocate ($imge, 255, 255, 255); $noir = ImageColorAllocate ($imge, 0, 0, 0); ImageFilledRectangle ($imge, 0, 0, 150, 30, $blanc); /* Affichage d'un message d'erreur */ ImageString ($imge, 1, 5, 5, "Erreur de chargement de l'image $imgname", $noir); } return $imge; }
Formulaire et graphique
A partir du formulaire suivant :
Page 151
<body> <form method="post" action="meteo.php3"> <font face="arial">Cliquez sur une ville pour connatre sa mto</font><br> <input type="image" src="meteo_france.jpg" name="coord"> </form>
</body> </html>
Page 152
Le formulaire prcdent est un peu spcial puisqu'il n'affiche pas de bouton submit mais une image qui permet la soumission. <input type="image" src="meteo_france.jpg" name="coord"> En cliquant sur un point de l'image l'utilisateur soumet le formulaire un script php nomm meteo.php3. Ce script reoit 2 variables, coord_x et coord_y qui contiennent les coordonnes du point cliqu sur l'image. Il ne reste plus qu' traiter en fonction du point cliqu. Le nom des 2 variables est cr partir du nom donn la valeur de l'attribut Name de la balise input, suivi de _x et _y
<? if ($coord_x>0 && $coord_x<40 && $coord_y>100 && $coord_y<140) echo "vous tes Brest et il vente !!"; if ($coord_x>200 && $coord_x<240 && $coord_y>70 && $coord_y<110) echo "vous tes Paris et il pleut !!"; if ($coord_x>295 && $coord_x<325 && $coord_y>195 && $coord_y<235) echo "vous tes Lyon et il neige !!"; if ($coord_x>305 && $coord_x<345 && $coord_y>285 && $coord_y<325) echo "vous tes Marseille et il fait beau !!"; if ($coord_x>110 && $coord_x<150 && $coord_y>225 && $coord_y<265) echo "vous tes Bordeaux et il y a de la brume !!"; ?>
<html> <body> <!-- Appel d'une image avec un paramtre--> <img src="bouton.php3?Accs"></P> <img src="bouton.php3?Affaires"></P > <img src="bouton.php3?Commander"></P > P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 153
Page 154
<?php Header("Content-type: image/png"); /*On cre une chaine de caractres partir des arguments passs dans un tableau*/ $string=implode($argv," "); /*lors du passage en argument les espaces ont t encods*/ $string=urldecode($string);// il faut les dcoder /*appel de l'image png*/ $im = imageCreateFromPng("bouton.png"); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImagePng($im); ImageDestroy($im); ?>
implode($argv," ")
Retourne une chane constitue de tous les lments du tableau, pris dans l'ordre, transforms en chane, et spars par glue.
$argv
Tableau des arguments passs au script.
Page 155
ImageJPEG Envoie une image JPEG vers un navigateur ou un fichier. ImageInterlace Active ou dsactive l'entrelacement. ImageLine Draw a line. ImageLoadFont Charge une nouvelle police. ImagePolygon Dessine un polygone. ImagePSBBox Retourne le rectangle entourant un texte et dessin avec une police PostScript Type1. ImagePSEncodeFont Change le codage vectoriel d'un caractre dans une police. ImagePSFreeFont Libre la mmoire occupe par une police PostScript Type 1. ImagePSLoadFont Charge une police PostScript Type 1 depuis un fichier. ImagePsExtendFont Etend ou condense une police de caractres ImagePsSlantFont Inclidnet une police de caractres ImagePSText Dessine un texte sur une image avec une police PostScript Type1. ImageRectangle Dessine un rectangle. ImageSetPixel Dessine un pixel. ImageString Dessine une chane horizontale. ImageStringUp Dessine une chane verticale. ImageSX Retourne la largeur d'une image. ImageSY Retourne la hauteur de l'image. ImageTTFBBox retourne le rectangle entourant un texte et dessin avec une police TrueType. ImageTTFText Dessine un texte avec une police TrueType. ImageTypes Retourne les types d'images supports par la version courante de PHP
Page 157
Objectif :
A partir d'un SGBD local (exemple Access 97) mettre jour une base de donnes distante (exemple : SGBD Mysql ).
Technique
Tlcharger le driver ODBC myodbc (moi j'utilise myodbc-2.50.22-win95.zip rcuprable ici : ftp://ftp.inforoutes-ardeche.fr/pub/pc/win95/odbc/) Dcompressez et installez le logiciel.
Page 158
puis OK
Page 159
Nom de la connexion ( inventer) Nom de la base de donnes distante lier ou Adresse ip du serveur ou URL du serveur SGBD ou localhost si vous travaillez en local Nom d'utilisateur Mot de utilisateur Port : 3306 passe
Nom de la base de donnes mysql distante lier ou mettre jour. URL permettant d'accder
Page 160
Utilisation
Conditions pour que cela fonctionne :
Vous avez une base de donnes en ligne (SGBD mysql. Base nomme mailing_list). Dans cette base existe une table nomme inscrits. Cette table comporte 4 champs. num, nom, prenom, email. Vous avez une base de donnes en local (SGBD Access. Base nomme alim_mailing_list). Dans cette base existe une table nomme alim_inscrits. Cette table comporte 4 champs. num, nom, prenom, email.
Dans la base de donnes locale et plus particulirement dans la table alim_inscrits crez quelques enregistrements.
slectionnez la table alim_inscrits puis passez sur la commande Fichier Donnes externes Lier les tables
Page 161
(c'est la source de donnes machine dfinie lors de Dans la liste propose, venez choisir inscrits (c'est la table laquelle vous
Dans la liste propose , venez double cliquer sur inscrits (c'est la table laquelle vous tes lis) Vous pouvez maintenant modifier le contenu de votre base en ligne.
Page 162
Il s'agit d'un export il faut donc que la table n'existe pas dj en ligne.
Dans la liste propose Venez choisir Mysql hebergement. (c'est la source de donnes machine dfinie lors de l'installation de myodbc)
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 163
FONCTIONS MYSQL
mysql_affected_rows Retourne le nombre de lignes affectes lors de la dernire opration SQL. mysql_change_user Change le nom de session de l'utilisateur actif. mysql_close Ferme la connexion MySQL. mysql_connect Ouvre une connexion un serveur MySQL. mysql_create_db Cre une base de donnes MySQL. mysql_data_seek Dplace le pointeur interne de rsultat. mysql_db_name Lit les noms des bases de donn mysql_db_query Envoie une requte MySQL un serveur MySQL. mysql_drop_db Efface une base de donnes MySQL. mysql_errno Retourne le numro de message d'erreur de la dernire opration MySQL. mysql_error Retourne le texte associe avec l'erreur gnre lors de la dernire requte. mysql_fetch_array Retourne une ligne de rsultat sous la forme d'un tableau associatif. mysql_fetch_assoc Lit une ligne de rsultat dans un tableau associatif mysql_fetch_field Retourne les donnes enregistres dans une colonne, partir d'un rsultat, et retourne un objet. mysql_fetch_lengths Retourne la taille de chaque colonne d'une ligne de rsultat. mysql_fetch_object Retourne les lignes rsultats sous la forme d'un objet. mysql_fetch_row Retourne une ligne de rsultat sous la forme d'un tableau. mysql_field_flags Retourne le smaphore associ la colonne spcifie dans le rsultat courant. mysql_field_name Retourne le nom d'une colonne mysql_field_len Retourne la longueur du champs spcifi. mysql_field_seek Place le pointeur de rsultat un offset donn mysql_field_table Retourne le nom de la table o se trouve une colonne mysql_field_type Retourne le type de la colonne spcifie dans le rsultat courant. mysql_free_result Efface le rsultat de la mmoire. mysql_insert_id Retourne l'identifiant gnr par la dernire requte INSERT. mysql_list_dbs Liste les bases de donnes disponibles sur le serveur MySQL. mysql_list_fields Liste les champs du rsultat MySQL.
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 164
mysql_list_tables Liste les tables d'une base de donnes. mysql_num_fields Retourne le nombre de champs d'un rsultat. mysql_num_rows Retourne le nombre de ligne d'un rsultat. mysql_pconnect Ouvre une connexion persistante un serveur MySQL. mysql_query Envoie une requte SQL un serveur MySQL. mysql_result Retourne un champs d'un rsultat. mysql_select_db Slectionne une base de donnes MySQL. mysql_tablename Retourne le nom de la table qui contient le champs spcifi.
Page 165
FONCTIONS POSTGRESQL
pg_Close Termine une connexion PostgreSQL. pg_cmdTuples Retourne le nombre de tuples affects. pg_Connect Ouvre une connexion. pg_DBname Nom de la base de donnes. pg_end_copy Synchronise avec le serveur PostgreSQL pg_ErrorMessage Message d'erreur. pg_Exec Excute une requte. pg_Fetch_Array Lit une ligne dans un tableau. pg_Fetch_Object Lit une ligne dans un objet. pg_Fetch_Row Lit une ligne dans un tableau. pg_FieldIsNull Teste si un champs est NULL. pg_FieldName Retourne le nom d'un champs. pg_FieldNum Retourne le numro d'une colonne. pg_FieldPrtLen Retourne la taille imprime. pg_FieldSize Retourne la taille interne de stockage d'un champs donn. pg_FieldType Retourne le type d'un champs donn par index. pg_FreeResult Libre la mmoire pg_GetLastOid Retourne le dernier identifiant d'objet. pg_Host Retourne le nom d'hte. pg_loclose Ferme un objet de grande taille. pg_locreate Cre un objet de grande taille. pg_loexport Exporte un objet de grande vers un fichier pg_loimport Importe un objet de grande taille depuis un fichier pg_loopen Ouvre un objet de grande taille. pg_loread Lit un objet de grande taille. pg_loreadall Lit un objet de grande taille en totalit. pg_lounlink Efface un objet de grande taille pg_lowrite Ecrit un objet de grande taille pg_NumFields Retourne le nombre de champs pg_NumRows Retourne le nombre de lignes. pg_Options Retourne les options. pg_pConnect Etablit une connexion persistante. pg_Port Retourne le numro de port.
P.H.P. Gestion de Donnes Cabar / Lallias Cours v2.0 Page 166
pg_put_line Envoie une chane au serveur PostgreSQL pg_Result Retourne les valeurs d'un identifiant de rsultat. pg_set_client_encoding Choisi l'encodage du client pg_client_encoding Lit l'encodage du client pg_trace Active le suivi d'une connexion PostgreSQL pg_tty Retourne le nom de tty. pg_untrace Termine le suivi d'une connexion PostgreSQL
Page 167