65
Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA [email protected]

Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA [email protected]

Embed Size (px)

Citation preview

Page 1: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Techniques Internet de Base2006-2007

Licence 2 (Info, Maths, PC/PA)Université Jean Monnet

Ruggero G. [email protected]

Page 2: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

PHP

Page 3: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Le langage PHP

PHP (venant de l'acronyme récursif PHP: Hypertext Preprocessor), est un langage de scripts libre principalement utilisé pour être exécuté par un serveur HTTP

PHP est un langage procédural disposant en version 5 de fonctionnalités de modèle objet complètes

Le langage PHP est un langage de programmation web côté serveur le serveur (la machine qui héberge le site web en question)

qui va interpréter le code PHP et générer du code qui pourra être interprété par un logiciel

différence principale entre JavaScript et PHP

Page 4: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

PHP - Fonctionnement

Le client demande une page PHP Le serveur HTTP charge le fichier PHP du

disque dur Le serveur transmet le fichier au module

d'interprétation PHP L'interpréteur PHP génère le code HTML à

partir du code PHP L'interpréteur transmet le code HTML au

serveur HTTP Le serveur HTTP envoie la reponse HTML au

client

Page 5: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

PHP - Fonctionnement

Client : Navigateur

Serveur

serveur Web(Apache, IIS…)

SGBD

langagede scripts

scripts

moteurde scripts

pages HTML

Page 6: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Utilisation de PHP

Serveur WEBOn parle souvent de LAMP :

Linux + Apache + MySQL + PHPPlus que la moitié des serveur web utilisent

la plateforme LAMPEn local

Petits scriptsProgrammation (à partir de la version 5)

Page 7: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Environnement de travail

Première solution : Installer Linux Installer Apache Installer MySQL Installer le module PHP Configurer Apache, MySQL, PHP

Deuxième solution : Installer la plateforme LAMP

EasyPHP 1.8 WAMP5 1.7

Troisième solution : Obtenir un espace web (par exemple : free.fr)

Page 8: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

En pratique

Installer le package EasyPHP :http://www.easyphp.org/telechargements.php3

Configurer le répertoire rootPar défaut : C:\Program Files\EasyPHP\www

Lancer EasyPHP

Sauvegarder les fichiers dans le répertoire root (ou dans ses sous-répertoires)

Tester les résultat dans le navigateur :http://127.0.0.1/monrepertoire/monfichier.php

Page 9: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Fichiers PHP

Les fichiers sont enregistrés avec l'extension .php (ou .php3, .php4, ...)

Les fichiers .php peuvent alterner du code HTML ou PHP sans restrictions

Le code PHP doit être délimité par les balises <?php ... ?> <?= ... ?> <script language="php"> ... </script>

Premier exemple : first.php<?phpphpinfo();?>

Page 10: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Contenu des fichiers .php

Cas typiques de contenu : fonctions PHP à usage général code HTML code HTML alterné à du code PHP code PHP qui génère le code HTML

Le code PHP est invisible au client il est important de toujours bien délimiter le code

Les erreurs apparaissent aux client il est important de prévoir et gérer les erreurs Exemple :

<?phpfonctionquinexistepas();?>

Page 11: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Suppression des messages d'erreur

Pour éviter l'affichage des messages d'erreur de PHP dans le navigateur on peut faire précéder l'appel d'une fonction susceptible de générer une erreur du caractère @

Pendant la phase de développement des scripts, cette méthode doit être désactivée pour permettre au programmeur d'être alerté sur les causes et la localisation des erreurs

Exemple :<?php@fonctionquinexistepas();?>

Page 12: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Instructions

Les instruction se terminent toujours par un point-virgule (;)

Page 13: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les instructions de contrôle

Les mêmes qu'en langage C if (condition) {

...instructions...} else {

...instructions...}

switch ($var) {case valeur1 :

...instructions... break;

case valeur2 :...instructions...

break;...

default : ...instructions...}

Page 14: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les boucles

Les mêmes qu'en langage C while (condition) {

...instructions...}

for (init; condition; mise-à-jour) {...instructions...

} Plus la boucle foreach

Page 15: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Inclusion de fichiers externes

Il est possible d'incorporer le code PHP ou HTML écrit dans d'autres fichiers

Plusieurs possibilités include("nom_du_fichier.ext"); require("nom_du_fichier.ext"); include_once("nom_du_fichier.ext"); require_once("nom_du_fichier.ext");

Lorsque l'interpréteur PHP trouve une de ces lignes, il la remplace par le code contenu dans le fichier nom_du_fichier.ext

La différence entre include et require concerne la façon dont l'interpréteur gère les erreurs

les fonction avec suffix "_once" sont exécutées une seule fois, même si elles figurent dans une boucle

Page 16: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Fichiers externes

Ils ont généralement l'extension .inc ou .inc.php (on préfère utiliser la deuxième pour protéger son contenu)

Ils peuvent être utiliser pour :affichage conditionnel fonctions et procédures d'usage généralmodularisation du code (majeure clarté)

Page 17: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les commentaires

Trois façons d'écrire des commentaires

// ceci est un commentaire sur une ligne

/* ceci est un commentaire qui vaoccuper plusieurs lignes */

#ceci est un commentaire en style UNIX#qui occupe une seule ligne

Page 18: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les variables

Nom des variables précédés par le caractère dollar ($)

Pas de déclaration Initialisation non obligatoire Les noms des variables sont sensibles à la

casse Exemples :

$mavar $_maNouvelleVar $mavar2

Page 19: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Affectation

Deux façon de donner une valeur à une variable : Par valeur$variable = expression;

Par référence :$mavar1 = &$mavar2;

Exemple : $mavar1="St-Etienne"; $mavar2="Grenoble"; $mavar2=&$mavar1; $mavar1="Lyon"; $mavar2 est un alias de $mavar1 (les deux variables

contiennent la même valeur, c.a.d., "Lyon") Attention : l'opérateur * du C n'a pas de signification en

PHP

Page 20: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Variables prédéfinies

Elles sont de la forme : $NOMGENERAL["nomvariable"]

Exemples : $GLOBALS : contient le nom et la valeur de toutes les

variables globales du script $_COOKIE : contient le nom et la valeur des cookies

enregistrés sur le poste client $_FILES : contient le nom des fichiers téléchargés à partir du

poste client $_GET : contient le nom et la valeur des données envoyés

par un formulaire avec la méthode GET $_POST : contient le nom et la valeur des données envoyés

par un formulaire avec la méthode POST $_SESSION: contient le nom et la valeur des variables de

session

Page 21: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Opérateurs

Mêmes opérateurs que en C =, +, -, /, *, % +=, -=, *=, /=, %= --, ++

Opérateur de concaténation : . (point) .= (concaténation et afféctation)

Exemple :$var1="Paris";$var2="France";$var1=$var1." est la capitale de la ";$var1.=$var2;

Page 22: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les constantes

Définition d'une constante :define("nom",valeur,casse); "nom" : nom de la constante; valeur : valeur de la constante; casse : sensibilité à la casse (TRUE, FALSE)

Pour vérifier si une constante nommée existe : defined("nom"); /* renvoie TRUE si

la constante "nom" est définie */

Exemples :define("PI",3.14159,TRUE);define("auteur","Ruggero Pensa",FALSE);

Page 23: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les types

Dans PHP il n'existe pas de déclaration explicite du type d'une variable lors de sa création

Parfois on doit connaître le type des variables Les types prédéfinis sont :

integer float double string boolean array object resource null

Le type est automatiquement déterminé par son initialisation ou par l'affectation d'une valeur

Page 24: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Type booléen

En PHP (comme en JavaScript) il existe un type booléen

Les deux valeur possibles sont 1 (TRUE) et 0 (FALSE)

Exemples :$var=TRUE;$var2=FALSE;$var3=($a < $b);

Page 25: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Opérateurs booléens

Mêmes opérateurs (mais certains opérateurs possèdent des alias) : ==, != (ou <>) même pour les chaînes <=, <, >, >= même pour les chaînes || (ou OR), && (ou AND), !, XOR

Plus deux opérateurs spéciaux : === (trois égal) : teste l'identité des valeurs et des

types de deux expressions !== : teste la non identité de deux expressions

Page 26: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Evaluation booléenne des expressions

Expressions évaluées à FALSE : mot-clé FALSE valeur 0 (integer) valeur 0.0 (double) chaîne "0" (string) variable de type NULL variable non initialisée tableau vide expression logique fausse

Expressions évaluées à TRUE tous les autres cas

Page 27: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les chaînes de caractères Comme en Javascript, l'affectation directe est possible Délimités par des apostrophes ou des guillemets

$a="une chaîne"; $b='une autre chaîne'; $c=$a;

Si une chaîne contient une variable, celle-ci est évaluée et sa valeur incorporée à la chaîne uniquement avec les guillemets

Exemple : $a='PHP'; $b='MySQL'; $c= "PHP et $b"; (la chaine contient "PHP et MySQL") $d='PHP et $b'; (la chaine contient "PHO et $b")

Caractères spéciaux : \', \", \$, \\, \n, \t

Page 28: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les tableaux

Les éléments d'un même tableau peuvent être de types différents

Tableaux classiques :$tab[0]=2004;$tab[1]=34.234;$tab[2]="PHP";$tab[35]=$tab[2]. "et MySQL";$tab[]=TRUE; /* indice mis à jour automatiquelent à 36 */

$ind=40;$tab[$ind]="dernier élément"; le tableau tab contient 6 éléments (et non pas 41)

Les chaînes de caractères peuvent être utilisés comme des tableaux de caractères

Page 29: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Tableaux associatifs

La syntaxe est similaire, mais on remplace l'indice numérique par une chaîne de caractères quelconque $tab["nom"]="Pensa";$tab["prenom"]="Ruggero";$tab["age"]=28;

Page 30: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Le type NULL

Le type NULL (ou null) est celui qui est attribué à une variable qui n'a pas de contenu ou qui a été explicitement initialisée avec la valeur NULL

Aussitôt qu'une valeur légale est donnée à la variable, elle prend le type correspondant

Page 31: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Déterminer le type d'une variable

Dans certain cas, il est important de pouvoir connaître le type d'une variable que l'on est en train de manipuler

On peut utiliser la fonction gettype : gettype($mavar); (renvoie une chaîne de caractères

contenant le type de la variable) ...ou un certain nombre de fonction qui renvoient TRUE si la variable

est du type demandé : is_integer($var) ou is_int($var); is_double($var) is_string($var) is_bool($var) is_array($var) is_null($var) is_scalar($var) is_numeric($var) …

Page 32: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Conversion de type

Exemples :$var1="3.52 kilomètres";$var2=(double) $var1;$var3=(integer) $var2;

$var2 contient la valeur réelle 3.52 et $var3 contient la valeur entière 3

$var1="4.24 secondes";settype($var1,"double");

$var1 contient maintenant la valeur réelle 4.24

Page 33: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Contrôler l'état d'une variable

Lors de l'envoi de données d'un formulaire vers le serveur, le script qui reçoit les informations doit pouvoir détecter l'existence d'une réponse dans les champs du formulaire

On peut utiliser les deux fonctions : isset($var) retourne la valeur FALSE si la

variable $var n'est pas initialisé ou a la valeur NULL

empty($var) retourne la valeur TRUE si la variable $var n'est pas initialisée, a la valeur 0 ou NULL ou la chaîne "0" (sinon elle retourne la valeur FALSE)

Page 34: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Fonctions mathématiques

On a un certain nombre de fonctions mathématiques :abs, cos, sin, exp, floor, log, log10, log, min, max, rand, sqrt, tan...

Voir la liste complète sur www.php.net

Page 35: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

La sortie (output)

La conséquence d'une élaboration du code PHP est le plus souvent l'affichage d'un texte dépendant des résultats de l'élaboration

Pour afficher une chaîne de caractères on dispose de différents possibilités : "fonction" echo fonction print (comme echo) fonction printf (comme en langage C) fonction vprintf (comme printf mais

l'argument est un tableau)

Page 36: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

La "fonction" echo

Pour afficher plusieurs éléments on peut utiliser l'opérateur de concaténation

Exemple :echo "Bonjour Mr. ". $nom. "nous sommes le ". date('d-m-y');

la virguleExemple :echo "Bonjour Mr. ", $nom, "nous sommes le ", date('d-m-y');

Dans les deux cas, on affiche la concaténation d'une chaîne de caractères, d'une variable et du résultat d'une fonction

La fonction print est similaire à echo : print ("Bonjour Mr $nom nous sommes le ". date('d-m-

y')); print ("Bonjour Mr $nom nous sommrs le "). date('d-

m'y')):

Page 37: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Affichage formaté

La fonction printf permet d'afficher des chaînes de caractères selon un format prédéfini

Exemple : $ch="25.52 mètres";printf("La longueur est de %f m", $ch);

La chaîne affichée est :La longueur est de 25.52 m"

Caractères de formatage : %b, %c, %d, %f (binaire, caractère, entier, réel) %s (affiche la chaine telle quelle)

Page 38: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Affichage des entités HTML

L'instruction suivante :$ch="L'élément HTML du bouton est <button>";echo $ch;affiche un bouton dans la page.

Pour transformer tous les caractères spéciaux en entités HTML on peut utiliser la fonction htmlentities($chaine)

Exemple :$ch="L'élément HTML du bouton est <button>";echo htmlentities($ch);affiche le texte HTML suivant :L'&eacute;l&eacute;ment HTML du bouton est &lt;button&gt;

Page 39: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Fonctions pour les chaînes

$l=strlen($ch); : renvoie la longueur de la chaine $ch $ch1=strtolower($ch); retourne la chaîne $ch avec tous

les caractères en minuscules $ch1=strtoupper($ch); retourne la chaîne $ch avec tous

les caractères en majuscules $ch1=ucwords($ch); retourne la chaîne $ch avec tous les

initiales en majuscules $ch1=ucfirst($ch); retourne la chaîne $ch avec

uniquement la première lettre en majuscule $ch1=ltrim($ch); renvoie la chaîne $ch nettoyée des

espaces situées en début de chaîne $ch1=rtrim($ch); renvoie la chaîne $ch nettoyée des

espaces situées en fin de chaîne $ch1=trim($ch); renvoie la chaîne $ch nettoyée des espaces

situées en début et fin de chaîne nl2br() : pour remplacer le \n par <br>

Page 40: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Sous-chaînes

Une chaîne peut être considéré comme un tableau de caractèresExemple :$machaine[3] contient le quatrième caractère

Fonctions de recherche : strstr($ch1, $ch2) : recherche si la chaîne $ch2 est

contenue dans $ch1 et retourne tous les caractères allant de la première occurrence de $ch2 jusqu'à la fin de $ch1 (sensible à la casse). Si $ch2 n'est pas trouvé, la fonction renvoie FALSE;

stristr($ch1, $ch2) : même chose mais insensible à la casse

str_replace($ch1, $ch2, $ch) : retourne la chaîne $ch dans laquelle toutes les occurrences de $ch1 sont remplacées par $ch2

Page 41: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Autres fonctions

Pour une liste complète :www.php.net

Page 42: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les tableaux

Pour créer un tableau on peut utiliser la fonction array()

Exemples : $music=array("C", "D", "E", "F", "G", "A", "B");

$tab=array("St-Etienne", 42, "Rhône-Alpes"); $tab=array("nom"=>"Pensa", "prenom"=>"Ruggero", "departement"=>69);

Page 43: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Tableaux indicés

Syntaxe identique à celle du langage C Initialisations possibles :

Initialiser les éléments un par un :$tab[0]="a";$tab[1]=124;$tab[32]=4.234

fonction array()$tab=array("one", 2, 3.0);

Utilisation : comme en langage C $toto=$tab[32]+100; $toto=$tab[$ind]*32;

Page 44: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Tableaux associatifs

Initialisation : $tab=array("cléA"=>valeurA, "cléB"=>valeurB, ..., "cléZ"=>valeurZ);

$tab=array("cléZ"=>valeurZ, "cléB"=>valeurB, ..., "cléA"=>valeurA);

Les deux tableaux sont identiques Utilisation :

$toto=$tab["cléB"] + 230; $toto=$tab[$chaine1] * 34;

Page 45: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Les tableaux multidimensionnels

Il suffit de créer un tableau de tableauxExemple :$tabmulti=array(

array("0-0", "0-1", "0-2"),array("1-0", "1-1", "1-2"));

Utilisation :$toto="cellule no. ". $tab[1][2];

Page 46: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Compter le nombre d'éléments

On utilise la fonction count($tab) Exemples :

for ($i=0;$i<count($tab);$i++) { echo "L'élément " .$i ."contient " .$tab[$i];}

for ($i=0;$i<count($tabmulti);$i++) { for ($j=0;$j<count($tabmulti[$i]);$j++) { echo "L'élément (" .$i ."," .$j .") contient " .$tab[$i][$j]; }}

Page 47: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Tableau à partir d'une chaîne

Fonction explode($separateur, $chaine) : retourne un tableau contenant un ensemle de souchaines de $chaine dont chacune devient un élément du tableau. Le critère de coupure de la chaîne est le caractère $separateur

Exemple $adresse="[email protected]";$tabadr=explode("@", $adresse);echo "L'utilisateur est : {$tabsite[0]} et son serveur mail est {$tabsite[1]} ";

Résultat affiché :L'utilisateur est : ruggero.pensa et son serveur mail est univ-st-etienne.fr

Page 48: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Lecture d'un tableau avec foreach()

L'instruction itérative foreach() permet une lecture rapide est simple des tableaux

Sa syntaxe est : foreach ($tab as $valeur) { ... instructions ...} // pour les tableaux indicésOn récupère par itérations successives tous les éléments du tableau $tab dans la variable $valeur, mais sans les indices correspondants

foreach ($tab as $clé=>$valeur) { ... instructions ...} // pour les tableaux associatifsOn récupère par itérations successives toutes les clés et tous les éléments correspondants du tableau $tab dans les variables $clé et $valeur

Page 49: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple de lecture

<?php//*******************************************************//Lecture de tableau indicé sans récupération des indices//*******************************************************$tab=array("Paris","London","Brüssel");echo "<H3>Lecture des valeurs des éléments </H3>";foreach($tab as $ville){ echo "<b>$ville</b> <br>";}echo"<hr>";//*******************************************************//Lecture de tableau indicé avec récupération des indices//*******************************************************echo "<h3>Lecture des indices et des valeurs des éléments </h3>";foreach($tab as $indice=>$ville){ echo "L'élément d'indice <b>$indice</b> a la valeur <b>$ville</b>

<br>";}echo"<hr>";

Page 50: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple de lecture - 2

//********************************************************//Lecture de tableau associatif avec récupération des clés//********************************************************$tab2=array("France"=>"Paris","Great

Britain"=>"London","België"=>"Brüssel");echo "<h3>Lecture des clés et des valeurs des éléments</h3>";foreach($tab2 as $cle=>$ville){ echo "L'élément de clé <b>$cle</b> a la valeur <b>$ville</b>

<br>";}echo"<hr>";?>

Page 51: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Lecture d'un tableau multidimensionnel

<?php$clients = array("client 1"=>array("nom 1"=>"Leparc","ville 1"=>"Paris","age 1"=>"35"),"client 2"=>array("nom 2"=>"Duroc","ville 2"=>"Vincennes","age 2"=>"22"),"client 3"=>array("nom 3"=>"Denoël","ville 3"=>"St Cloud","age

3"=>"47"));//Ajout d'un élément$clients["client 7"] = array("nom 7"=>"Duval","ville 7"=>"Marseille","age

7"=>"76");echo "<table border='1'width=\"100%\" ><tr> <th> Client </th><th> Nom

</th><th> Ville </th><th> Age </th>";foreach($clients as $cle=>$tab){ echo "<tr><td align=\"center\"><b> $cle </b></td>"; foreach($tab as $key=>$valeur) { echo "<td> $key : <b> $valeur </b></td>"; } echo "</tr>";}echo " </table> ";?>

Page 52: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Ajouter et enlever des éléments Pour ajouter N éléments à la fin du tableau :

array_push($tab, valeur1, valeur2, ... valeurN);

Pour ajouter N éléments au début du tableau :array_unshift($tab, valeur1, valeur2, ..., valeurN);

Pour supprimer le dernier élément du tableau :array_pop($tab);la fonction retourne l'élément supprimé (ou NULL)

Pour supprimer le premier élément du tableau :array_shift($tab);la fonction retourne l'élément supprimé

Pour supprimer un élément d'indice ou de clé quelconque :unset($tab[indice]);unset($tab["clé"]);

Page 53: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Opérations sur plusieurs tablaux

Pour fusionner des tableaux :$tab=array_merge($tab1,$tab2,...,$tabN);Les éléments égaux sont conservés. Pour supprimer les éléments similaires on utilise :$tab=array_unique($tab);

Intersection de deux tableaux :$tab=array_intersect($tab1,$tab2);

Différence de deux tableaux :$tab=array_diff($tab1,$tab2);

Page 54: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Ordre des éléments d'un tableau

Trier selon l'ordre ASCII sort($tab); // ordre croissant rsort($tab); //ordre décroissant array_reverse($tab); /* inverse

l'ordre des valeurs des éléments */

Trier selon l'ordre natuerel natsort($tab); /* ordre croissant

sensible à la casse */ natcasesort($tab); /* ordre croissant

insensible à la casse */ Mélanger les valeurs de façon aléatoire :

shuffle($tab);

Page 55: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Trier des tableaux associatifs

Trier des valeurs : asort($tab); // ordre ASCII croissant arsort($tab); //ordre ASCII décroissant

Trier les clés : ksort($tab); //ordre ASCII croissant krsort($tab); //ordre ASCII décroissant

Page 56: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Autres fonctions

Comme toujours :www.php.net

Page 57: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Définition de fonctions

La syntaxe de définition d'une fonction est similaire à la syntaxe JavaScript :function ma_fonction($param1, $param2,...) {

//code de définition de la fonction

return $var;

}

Appel de fonction : $mavar=ma_fonction(valeur1, valeur2,..); ma_fonction(valeur1,valeur2,...); /* si la fonction ne retourne pas de valeur */

Page 58: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Retourner plusieurs valeurs

Pour retourner plusieurs valeurs il suffit d'utiliser un tableau :function ma_fonction(...) {

//code de la fonction

$tab[0]=expression;

$tab[1]=expression;

return $tab;

}

Page 59: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Paramètres par défaut

Dans l'appel de fonction il est possible d'omettre un certain nombre de paramètres. L'opération est autorisé si ces paramètres ont des valeurs par défault

Syntaxe :function prix_total($prix,$tva=19.6) { return $prix+$prix*$tva/100.0;}…$p1=prix_total(190);$p2=prix_total(190,5.5);

Attention : paramètres par défaut tous à la fin!!!

Page 60: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Portée des variables

Le règles existantes en langage C concernant la portée des variables sont valables en PHP

Pour accéder à une variable globale depuis une fonction, il faut utiliser le tableau prédéfini $GLOBALS :

Exemple :$var_glob="Bonjour";function ma_fonction() { echo $GLOBALS['var_glob']. "les gars!";}...ma_function();

Attention : l'utilisation de variables globales dans des fonctions est à éviter!

Page 61: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Passer des arguments par référence

Le passage des argument par référence permet de garder les modifications apportées à ces paramètres après la fin de l'exécution de la fonction

Les paramètres passés par référence sont précédés par le symbole & :$a="a";$b="b";function ma_fonction($param1, &$param2) { // code de la fonction $param1="c"; $param2="d";}ma_function($a,$b);echo $a. "et". $b; //affiche "a et d"

Page 62: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple : nombres complexes 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Fonctions tableaux</title></head><body><?phpfunction modarg($reel,$imag){ //$mod= hypot($reel,$imag); //ou encore si vous n'avez pas la fonction hypot(): $mod =sqrt($reel*$reel + $imag*$imag); $arg = atan2($imag,$reel); return array("module"=>$mod,"argument"=>$arg);}

Page 63: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple : nombres complexes 2

//Appels de la fonction$a= 5;$b= 8;$complex= modarg($a,$b);echo "<b>Nombre complexe $a + $b i:</b><br />

module = ", $complex["module"] ,"<br />argument = ",$complex["argument"]," radians<br />";

?></body></html>

Page 64: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple : passage par référence 1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html><title>Passage par référence</title></head><body><?php//Définition de la fonctionfunction prod(&$tab,$coeff){ foreach($tab as $cle=>$val) { if(is_numeric($val)) {$tab[$cle]*=$coeff;} else { echo "Tableau non numérique <br />"; return FALSE; } } return $tab;}

Page 65: Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

Exemple : passage par référence 2

//Tableau numérique$tabnum = range(1,7);echo "Tableau avant l'appel ",print_r( $tabnum),"<br />";//Passage du tableau à la fonction$result= prod($tabnum,3.5);echo "Tableau résultat ",print_r( $result),"<br />";echo "Tableau après l'appel ",print_r( $tabnum),"<br />";//tableau alphabétique$tabalpha= range("A","F");$resultal=prod($tabalpha,3);//retourne FALSEecho "Tableau après l'appel ",print_r( $tabalpha),"<br />";?></body></html>