Qu'est-ce que PHP ? Annie Danzart

La page est créée Guillaume Gros
 
CONTINUER À LIRE
Qu'est-ce que PHP ? Annie Danzart
Sites web dynamiques avec PHP

              Qu'est-ce que PHP ?

                     Annie Danzart

                    Annie.Danzart@enst.fr

            http://www.infres.enst.fr/~danzart/php/

      http://www.infres.enst.fr/~danzart/php/exemples/


                          1
Plan

•   Historique

•   Fonctionnement

             •   Création de Formulaires

•   Script php

                 •   Manipulation de fichiers

•   Variables, opérateurs

      •   Manipulation d’Images

•   Tableaux

                   •   Utilisation de Cookies

•   Fonctions

                  •   Les Sessions

•   Conditionnelles, boucles

   •   Variables d’environnement

•   Les Objets

                 •   Envoi de Mail

•   Fichiers inclus

            •   Téléchargement de fichiers

                                                                      2
Qu'est-ce que PHP ?

• 1994 : Rasmus Lerdorf, Personnal Home Pages


Pre Hypertext Processor

•         Langage de scripting traité par le serveur, orienté web

•         Module mod_php d'Apache

•         Gratuit, libre de droits (license GNU GPL)

•         Nombreuses extensions (sgbd, ldap, gif, pdf, smtp, …)

•         Syntaxe proche de celle de C, Java, Perl

•         Comparable à ASP, asp2php

•         Extensible

•         Des milliers de sites de par le monde

• Versions 3, 4, 5, 6 ?

                                                                         3
Comment ça marche ? affichage sans serveur
                  file:///infres.enst.fr/~danzart/exemple.html

        Poste client
         firefox
                            Javascript

                             3

                                  Le navigateur affiche les pages html
              1        2
      Serveur de fichiers         Il est capable d’interpréter des scripts
        perso.enst.fr             javascript

~danzart/public_html/exemple.html
                                                                             4
Comment ça marche ? utilisation d’un serveur
             http://www.infres.enst.fr/~danzart/exemple.html

         Poste client                          Serveur Apache
          firefox                            www.infres.enst.fr

                              1
                                                                   httpd
                              4

                                  2
     Serveur de fichiers              3

      perso.enst.fr
                                          Le serveur reçoit la requête
                                          et la traite en envoyant au client
                                          la page demandée

~danzart/public_html/exemple.html
                                                                               5
Comment ça marche ? interprétation d’un script
              http://www.infres.enst.fr/~danzart/exemple.php

         Poste client                       Serveur Apache
          firefox                         www.infres.enst.fr

                              1
                                                    4          httpd
                              5                                mod_php5

                                  2   3
     Serveur de fichiers                    Le serveur passe le fichier
      perso.enst.fr                         au module php avant de le
                                            retourner au client

~danzart/public_html/exemple.php
                                                                          6
Comment ça marche ? Les bases de données 
              http://www.infres.enst.fr/~danzart/exemple2.php

         Poste client                        Serveur Apache
          firefox                          www.infres.enst.fr

                              1
                                                     47          httpd
                              8                                  mod_php5

                                                5    6
                                  2   3
     Serveur de fichiers                     Serveur Mysql
      perso.enst.fr
                                          mysql.infres.enst.fr

                                                                 mysqld
                                                                 bases

~danzart/public_html/exemple2.php
                                                                          7
Les scripts, les variables

   – Page html, extension du fichier

- Formulation des scripts

   – Environnement, résultat

- !Variables, types des variables, constantes

Page php

ü Une page html
ü Des scripts php.
ü L’ensemble des scripts d’une page utilise le même contexte
ü Chaque script peut générer du code html qui s’intègre à sa place

üL’extension de la page doit être php, ou php3, phtml, php4, php5
    sinon le serveur ne sait pas qu’il doit interpréter des scripts

                                                                                           8
Les scripts, les variables

      – Page html, extension du fichier

- Formulation des scripts

      – Environnement, résultat

-

Variables, types des variables, constantes


                                   Ecriture la plus standard


                                      Encore très utilisée.

 … 

          A la Javascript …


                                   Compatible avec ASP


                                   Ecriture raccourcie, pas toujours
                                                correctement interprétée

                                                                                                9
Les scripts, les variables

   – Page html, extension du fichier

- Formulation des scripts

   – Environnement, résultat

-

Variables, types des variables, constantes

!

  Bienvenue!
  !

!
                                               Exemple : http://www.infres.enst.fr/~danzart/
!
 Bonjour !
                                                     Remarque : la fonction date :

      !               http://www.infres.enst.fr/~danzart/php/
Il est                          phpplus.php%23dates

   !
!
!
                                                                                               10
Les scripts, les variables

    – Page html, extension du fichier

- Formulation des scripts

    – Environnement, résultat

-

Variables, types de variables, constantes

üTypes de base: entiers, réels, chaînes de caractères
üTableaux, tableaux associatifs
üObjets

üLes noms de variables commencent par le caractère $
üphp est sensible à la casse
üUn nom peut commencer par une lettre ou un _
üIl peut comporter des caractères, des chiffres et _

üLes variables ne sont pas typées, n’ont pas besoin d’être déclarées
üElles ont une valeur par défaut qui dépend du contexte d’utilisation
                                                                                             11
Les scripts, les variables

   – Page html, extension du fichier

- Formulation des scripts

   – Environnement, résultat

-

Constantes, variables, types de variables

!

  Bienvenue!

  !
!                                              Exemple: http://www.infres.enst.fr/
!
!                                   - insertion de balises html

!                                          - échappement de caractères

            12
Les variables

   – Affectation d’une valeur


- Tests sur les variables

   – Opérateurs arithmétiques, logiques


- Référence, déréférencement

$chaine = "0"; // chaîne                      !
   "0" (ASCII 48)!                            Simple et double quote

$nombre = 0;!                                 Chaîne dynamique

$nombre++; // nombre 1                        !
   (entier)!                                  $val = 'Rusti';!
$nombre+=1; // entier (2)!                    echo "Hello $val"; // Hello
$nombre = $nombre + 1.3; !                       Rusti!
// réel (3.3)!                                echo 'Hello $val'; !
$nombre = 5 + "3 petits                       // Hello $val!
   cochons"; !                                !
// entier (8 !) effet de bord!                                   Exemple:
$nombre = (int) "3 petits                            http://www.infres.enst.fr/~danzart/php/
   cochons"; !                                             exemples/variables_test.php

  // 3 : conversion en entier!

!

                       13

                                              !
Les variables

    – Affectation d’une valeur


- Tests sur les variables

    – Opérateurs arithmétiques, logiques


- Référence, déréférencement

isset($a):      teste si la variable est définie. (0=non, 1=oui)
!
unset($a):      supprime la variable et désalloue la mémoire utilisée
!
gettype($a):retourne le type de la variable
      ➞string, integer, double, array, object!
      ➞string si la variable n'est pas définie

is_double, is_string, is_int, is_float,is_object :!
            testent le type de la variable!

                                                                                     14
Les variables

      – Affectation d’une valeur


- Tests sur les variables

      – Opérateurs arithmétiques, logiques


- Référence, déréférencement

Arithmétiques!                                   Concaténation!
    $a +   $b - $c !!                            $chaine="votre nom est ".$val;!
    $a *   $b / $c !!                            !
    $a %   $b !!                                 Logiques!
    $a++   !Incrément de 1

                        not, !, &&, ⎥⎥, AND, XOR, OR!
    $b--   !Décrément de 1

                    !
                                                 rque : précédence de or sur ⎥⎥!
!                                                   $a = foo() ⎥⎥ bar() or die();!
Assignation de valeur!
    =, +=, -=, *=, /=, %=, .=!
                                                 Binaires bitwise!
                                                     &, ⎥, ^, ~, >>,
Les variables

     – Affectation d’une valeur


- Tests sur les variables

     – Opérateurs arithmétiques, logiques


- Référence, déréférencement

!

  !Bienvenue!

  !!                                                  Création de variables
!                                                      dynamiques dont on ne
Les tableaux

    – Tableaux, tableaux dynamiques


- Fonctions sur les tableaux

    – Parcours


- Tableaux associatifs

$fruits[0]= "pomme";!                          A priori, les indices commencent à 0.

$fruits[1]= "banane";!                         Pas besoin de déclarer la dimension ni le type
!                                              des valeurs.

$fruits[] = "orange"; !                        Si on ne donne pas d’indice, l’indice pris en
      // équivaut a!                           compte sera celui qui suit la valeur la plus
                                               haute (0 si rien n’a encore été mis).

$fruits[2]= "orange"!
                                               L’initialisation peut se faire « en bloc », en
!                                              précisant ou non les indices.

$fruits= array(0=> "pomme",

  1=>"banane",2=> "orange" );!
                                               Les tableaux dynamiques sont très utiles lors
!                                              de l’utilisation de champs de type
$fruits= array( "pomme",                       « checkbox » dans un formulaire.

  "banane", "orange" );!                        Exemple : http://www.infres.enst.fr/~danzart/php/
!                                                         exemples/tableaux_test.php

!
                                                                                                    17
Les tableaux

     – Tableaux, tableaux dynamiques


- Fonctions sur les tableaux

     – Parcours


- Tableaux associatifs

sizeof($t) = !count($t) !       ➞ Taille d’un tableau

is_array($t) !!                 ➞ Est-ce un tableau ?

reset($t) end($t) !current($t) !➞ Positionnement dans un tableau :
next($t) !prev($t)!             représenté par une liste de doublets
!                               (indice,valeur)

!
sort, rsort, ksort, krsort,     ➞ Tri ascendant, descendant sur la valeur,
                                sur la clé, avec une fonction utilisateur

  usort!
shuffle($t)!                    ➞ Mélange aléatoire

max($t)   !min($t)!             ➞ Calcul des valeurs extrêmes

!
                                ➞ Applique une fonction à toutes les valeurs
arraywalk($t,"nomfonction")!
                                d’un tableau

!
!
                                                                                      18
Les tableaux

     – Tableaux, tableaux dynamiques


- Fonctions sur les tableaux

     – Parcours


- Tableaux associatifs

$t = array("I","N","F","3","4","7");! L’ajout de "\n" dans l’affichage
sort($t);!                            introduit un saut à la ligne dans le
for ($i=0;$i
Les tableaux

     – Tableaux, tableaux dynamiques


- Fonctions sur les tableaux

     – Parcours


- Tableaux associatifs

$mois["Janvier"]= 1;!                                       Les indices du tableau sont alors
$mois["Février"]= 2;!                                       des chaînes de caractères qui
$mois[] = !                                                 pourront être traitées en tant que
   array("Janvier"=>1,"Février"=>2,                         telles.

   "Mars"=>3);!
!                                                           L’emploi de la fonction each
while (list($cle,$val) = each($mois))!                      s’avère importante pour parcourir
     echo " No de $cle : $val ";!                       les tableaux associatifs.

!
                                                            On peut aussi utiliser la boucle
foreach ($mois as $cle => $val)!                            foreach.

  echo " No de $cle : $val ";!

!
                                                                              Exemple:

key($t):index de l'élément courant du tableau

                                                                  http://www.infres.enst.fr/~danzart/
uasort($t,"f_comp"): tri à l’aide d’une fonction                            php/exemples/
en gardant les indices associés

                                   tableaux_associatifs_test.php

!                                                                                                       20
Les instructions

    – Instructions conditionnelles

- Booléens


- Boucles

    – foreach

- Ruptures de séquence

if ($a > $b) {!                                  $jour=date("l");!

    echo "a supérieur à b";!                     $mois=date("F");!
} elseif ($a == $b) {!                           switch ($mois) {!
    echo "a égal à b";!                          case "January" : … ;break;
} else {!                                        case "February": … ;break;               !
    echo "a inférieur à b";!                           . . . .!
}!                                               case "November": … ;break;
                                                 case "December": … ;break;}
 !
                                                 printf(date(" Y ")); !
if ($a > $b):!
    echo "a supérieur à b";!                         !
elseif ($a == $b) :!                             switch ($mois)!
    echo "a égal à b";!                          case "January" : … ;break;!
else :!                                          . . . .!
    echo "a inférieur à b";!                     case "December": … ;break;!
endif!                                           endswitch!
!                                                                                 21
Les instructions

    – Instructions conditionnelles

- Booléens


- Boucles

    – foreach

- Ruptures de séquence

Opérateurs


   :

   de comparaison entre expressions : ==, !=, , =!
           !
     Logiques : not, !, &&, ⎥⎥, AND, XOR, OR!
     !

Valeurs logiques par défaut:

     Entier

                    0      è   false       !≠0         è   true!
     Réel

                      0.0    è   false!      ≠0.0       è    true!
     Chaîne de caractères

      ""     è   false!       ≠ ""       è   true!
     Tableau ou objet

          Null   è   false!       ≠ Null è       true!

                                                                                       22
Les instructions

        – Instructions conditionnelles

- Booléens


- Boucles

        – foreach

- Ruptures de séquence

!


                             endwhile;!

?>

                           ?>!

                                                                                    23
Les instructions

     – Instructions conditionnelles

- Booléens


- Boucles

     – foreach

- Ruptures de séquence

!                                            }!
     !                                        ?>!
           est équivalent à :

                             est équivalent à :

!                                           ?>!                                  24
Les instructions

    – Instructions conditionnelles

- Booléens


- Boucles

    – foreach

- Ruptures de séquence


    continue :!


arrêter l'itération


passer à la suivante

                  !

                  break [n] :!


arrêter l'itération courante


sortir de la boucle courante


(ou des n boucles imbriquées)

    !
                  exit() :!


interruption inconditionnelle du script!
!

                              A utiliser avec modération !!!
                                                                                          25
Les fonctions

      – Déclaration, valeur de retour

- Variables locales/globales/statiques

      – Transmission des arguments

- Transmission par référence

!                                                                                             26
Les fonctions

       – Déclaration, valeur de retour

- Variables locales/globales/statiques

       – Transmission des arguments

- Transmission par référence

Variables locales:

     N’existent que dans le corps de la fonction

Variables globales:

                                            Exemple: http://www.infres.enst.fr/~danzart/
                                                                    php/exemples/fonctions_variables_test.php

     Précédées du mot clé global!
     Établissent un lien direct avec des variables
         déclarées à l’extérieur de la fonction

Variables statiques:

     Précédées du mot-clé static!

                                                                                                               27
Les fonctions

      – Déclaration, valeur de retour

- Variables locales/globales/statiques

      – Transmission des arguments

- Transmission par référence

Arguments :

    La transmission des variables se fait par valeur

             Exemple: http://www.infres.enst.fr/
                                                                          ~danzart/php/exemples/

                                                                       fonctions_arguments_test.php

Transmission par référence, 2 possibilités :

    Soit le nom de la variable est précédé d’un & au
        moment de l’appel!
    Soit le nom de la variable est précédé d’un & au
        moment de la déclaration de la fonction
        (standard)

    Depuis php5, les arguments par défaut peuvent être
        transmis par référence

                                                                                                          28
Les objets

    – Déclaration, attributs, méthodes, constructeur, instanciation

    – Héritage, redéfinition de méthodes

class sortie {!                                   instanciation et référenciation!
var $titre="Bonjour";!                        $a = new sortie("Hello");!
// constructeur!                              $a->debut();!
function sortie($init="Coucou")!              echo " il est ".date
    { $this->titre=$init; }!                      ("H:i")."";!
!                                             $a->fin();!
function debut()!

    {echo "!

          $this->titre";!               Exemple: http://www.infres.enst.fr/~danzart/php/
     echo "";}!                        exemples/classes_test.php

function fin()!
    {echo "";}!
}

                                                                                                  29
Les objets

      – Déclaration, attributs, méthodes, constructeur, instanciation

      – Héritage, redéfinition de méthodes

class sur_s extends sortie {!                      !
function sur_s($titre="coucou")!                        instanciation et référenciation

  { !

   //constructeur!                                $a = new sur_s("Hello"); !
     parent::sortie($titre);}!                    $a->debut();!
!                                                 $a->prg("il est ".date("H:i"));!
function prg($texte)!                             $a->fin();!
  {!

   echo "!
                  $texte";!

  echo "";}!                              Exemple: http://www.infres.enst.fr/~danzart/php/
!                                                  exemples/classes_heritage_test.php

function debut()!
{!
     parent::debut();!
     echo "debut de page";!
}!
!
}

                                                                                             30
Les fichiers inclus


                                                      !
include(nomfichier ) :!                                 le fichier inclus débute en html pur !
    inclut systématiquement le fichier à l'endroit      !
    indiqué

                                          Il faut toujours donner un nom et une


                                                 extension qui comportent une indication sur :

require(nomfichier ) :!
                                                                  l'inclusion (inc) : permet de savoir que
    ne l'inclut que si c'est justifié (cas d'une
    instruction conditionnelle)

                            c'est un fichier à inclure


                                                           le type de fichier (php) : évite que ce
include_once(nomfichier ),                                    fichier soit lisible intégralement

require_once(nomfichier ):!

    Ne fera l’inclusion qu’une seule fois (cas                Par exemple : bibli_inc.php!
    d’appels multiples de bibliothèques de

    fonctions

                                                         Exemple: http://www.infres.enst.fr/~danzart/php/


                                                               exemples/inclusion_test.php

                                                                                                             31
Les formulaires

    – Déclaration, balises, méthode

- Récupération des valeurs transmises

    – Cas particulier du type image !- Les checkbox!

!                La balise form délimite le formulaire

Questionnaire!                    Son attribut method détermine le mode de
Prénom ? !                        L’attribut action précise le programme qui
Votre nom ? !

Votre couleur favorite ?!                  Balises:

 !                  form, input (type, name,
 blanc!                   value), select (name), option
 jaune!                            (value), …!
 orange!

 vert!

 !                                         Les balises d'un formulaire

Cliquez sur  pour valider.!                   exemples/formulaire_test.html

!

                         32
Les formulaires

    – Déclaration, balises, méthode

- Récupération des valeurs transmises

    – Cas particulier du type image !- Les checkbox!

!                                            !
Formulaire2 !                     L’image remplace le bouton de soumission du
!                                          formulaire.

!
                                           Les coordonnées du point où l'utilisateur aura
Questionnaire!                    cliqué seront : $im1_x et $im1_y!
Votre prénom ? !

!
                                             Exemple : http://www.infres.enst.fr/~danzart/php/
Cliquez sur  pour
valider.!

!
!

                                                                                                 33
Les formulaires

    – Déclaration, balises, méthode

- Récupération des valeurs transmises

    – Cas particulier du type image !- Les checkbox!

!                                          !
!                                          Le nom du champ de type checkbox
!                 dans un tableau dynamique.

Questionnaire : votre choix!
 Pommes!                 !
 Poires!                 ($fruits) permettra de savoir combien de
Cliquez sur  pour valider.!         valeurs sont dans le tableau.

!

!

!
!                                              Exemple : http://www.infres.enst.fr/~danzart/php/
                                                         exemples/checkbox_test.php

                                                                Source du script

                                                                                                   34
Les fichiers

    – Ouverture/fermeture

- Lecture/écriture

    – Traitement de chaînes     !- Fichiers locaux!

!                                    $cible=fopen($nom_cible,"w+");!
/* ouverture en lecture */!              /* lecture de lignes faisant au
  $fichier=fopen($nom_f,"r");!         plus 255 caractères */!
                                       !
  /* lecture d'une ligne faisant au
                                         while ($ligne=fgets($source,255))!
plus 255 caractères */!
                                          {!
  $ligne=fgets($fichier,255);!         // copie de la source sur la cible!
!                                            fputs($cible,$ligne);!
  /* fermeture du fichier */!             }!
  fclose($fichier);!                      fclose($source);!
                                          fclose($cible);!
  ?>!
                                       ?>!
!

                                                                          35
Les fichiers

     – Ouverture/fermeture

- Lecture/écriture

     – Traitement de chaînes             !- Fichiers locaux!

Le fichier traité a la structure suivante :

 // premier élément !
  nom prenom;dept/bureau/poste!                          $nom = strtok($ligne,$sep);!
                                                     !
Les fichiers

     – Ouverture/fermeture

- Lecture/écriture

     – Traitement de chaînes  !- Fichiers locaux!

/* affichage des entrées d'un

répertoire */!

  $repertoire="rep";!                     On peut utiliser la liste de ces entrées pour
  $d = dir($repertoire);!                 créer des liens vers ces fichiers ou répertoires

  echo "chemin : $d->path";! !
  while ($entry = $d->read())!            echo "
Environnement

         – Les cookies

- Les sessions

         – Les variables d’environnement!

    Création d’un cookie, Durée de validité

 - Il est prudent d'utiliser un nom qui ne soit


                                                          pas aussi celui d’une autre variable (d’un
int setcookie (string name, string                           formulaire par exemple)

value , int expire , string path ,
string domain , int secure )!                                - La date calculée dépend de celle du client !

!                                                            - Les cookies ne seront accessibles qu'au
Le code PHP suivant doit impérativement avoir été
envoyé avant l'envoi de tout code html, c'est à dire         chargement de la prochaine page, ou au
en début du fichier).

                                     rechargement de la page courante.

    !                                                        - Il est possible de stocker un tableau dans un
Environnement

      – Les cookies

- Les sessions

      – Les variables d’environnement!

       Fonctions de gestion de session

                                   Exemple

!                                                       !
l'identificateur

                                     !
Les variables de session sont ensuite                   rque: ce mécanisme fonctionne aussi avec des
accessibles grâce au tableau associatif                 tableaux

$_SESSION[].

                                           Exemple : http://www.infres.enst.fr/~danzart/php/
!                                                                   exemples/session1_test.php

                                                                                                          39
Environnement

       – Les cookies

- Les sessions

       – Les variables d’environnement

- phpinfo()!


                                                      !
->> données stockées dans des variables permettant       $_GET[], $_POST[], $_COOKIE[], !
au programme d'avoir des informations sur son            $_SESSION[]!
environnement.


                                                      Mais aussi:

->> informations sur le type de serveur, son             $REMOTE_ADDR : adresse du client qui a fait la
administrateur, la date à laquelle le script a été       requête

appelé, l'adresse IP et le type de navigateur du

client, …

                                             $REMOTE_REFERER : nom de la page qui a


                                                      référencé celle qui s'affiche

->> créées par le serveur à chaque fois que le script

PHP est appelé, le serveur les lui fournit en            $USER_AGENT : nom du navigateur utilisé ainsi
paramètres cachés lors de l'exécution de                 que sa version

l'interpréteur.


                                                      $LAST_MODIFIED : dernière date de modification

->> deux catégories :


                                                      $_SERVER, $_REQUEST, …!
    celles qui dépendent du client

    celles qui dépendent du serveur!
 !                                                                                                       40
Images

      – Formats acceptés: png, gif, jpg

- Fonctions de gd

      – Tracés, sauvegardes

- Images dynamiques

           Analyse d'une image !                   Récupération de la couleur en (x,y)

!                                                  !
                                                   !
  switch ($c[2]){!                                 !
   case 1 : print("gif");break;!                   Couleur la plus proche dans une image

                                                   !
   case 2 : print("jpeg");break;!                  !
   default : printf("non reconnu");!               !
}!                                                 Couleur de transparence dans une image

!                                                  !
Images

      – Formats acceptés: png, gif, jpg

- Fonctions de gd

      – Tracés, sauvegardes

- Images dynamiques

Incrustation d'un texte en un point

             !
imagestring($im,$font,$x,$y,!                   $nom="livre.png";!
             $texte,$coul);!                    printf("");!
Tracés sur une image

                        $im=imagecreatefrompng($nom);!
 //quart d'ellipse!                                    !
imagearc($im,$x,$y,$l,$h,0,90,$coul);!          $couleur=imagecolorclosest($im,   !
 //ligne!                                                       0,0,0);!
imageline($image,$x1,$y1,$x2,$y2,!              imagecolorset($im,$couleur,!
             $coul);!                                             255,0,0);!
 //polygone            imagepolygone          . . . .!
($im,array($x1,$y1,$x2,$y2,!                    imagepng($im,"nouveau.png");!
                 $x3,$y3),3,$coul);!            !
                                              // attention aux droits sur les
 //polygone plein!
                                              fichiers ainsi créés!
imagefilledpolygone($im,array($x1,$y1,!
                                              !
             $x2,$y2,$x3,$y3),3,$coul);!
                                              !
 //rectangle!                                 !
imagepolygone($im,$x1,$y1,$x2,$y2, !
                          $coul);!                                                42
Images

       – Formats acceptés: png, gif, jpg

- Fonctions de gd

       – Tracés, sauvegardes

- Images dynamiques

Génération d'une image !                                !
!                                                   !
!                                                       !
                                                        !
Dans ce cas, le fichier ne doit contenir que le
script php de génération d'image.

Il sera ensuite utilisé exactement comme un
nom de fichier image dans une page html.

                                                                 43
Envoi de mails

            Attention aux envois de mails automatiques en nombre important
                        qui encombrent les boîtes aux lettres !!!!
php

                                        Tutoriel:

                                              http://www.infres.enst.fr/~danzart/php/

      Merci de votre attention !!!

                                        Les exemples du cours:


                                           http://www.infres.enst.fr/~danzart/php/exemples/

                                                                                                    45
Vous pouvez aussi lire