php by goizigaza

VIEWS: 15 PAGES: 7

									                                                                                                                   PHP
                                                                              PHP

                                  PHP
                                                                                                                                                      www.php.net
                                                                              Programme s'exécutant côté serveur Web
                                                                              • du code embarqué dans une page HTML entre les balises <? et ?>
                                                                              • extension .php pour les pages PHP
                                                                              • les fichiers .php sont stockés sur le serveur (comme des docs)
                                                                              • ils sont désignés par une URL       http://www.lip6.fr/page.php
                             Lionel Seinturier                                • le chargement de l'URL provoque l'exécution côté serveur

                      Université Pierre & Marie Curie                                                  1                                 2
                                                                                                                            P
                                                                                        Client                    Serveur   H                        page.php
                      Lionel.Seinturier@lip6.fr                                                                             P
                                                                                                       4                                 3
                                                                                       Explorer                    IIS
                                                                                       Netscape                   Apache
                                                                                          ...                       ...
                                                        31/1/05

PHP                                  1                   Lionel Seinturier   PHP                                       2                                 Lionel Seinturier




                                  PHP                                                                              PHP
 Illustration du fonctionnement                                               Principe de fonctionnement

 <HTML> <BODY>                                                                <HTML> <BODY>
 <H1>Table des factorielles</H1>                                              <H1>Table des factorielles</H1>
 <?                                                                           <?                                                                  du code PHP
    for ( $i=1,$fact=1 ; $i<4 ; $i++,$fact*=$i ) {                               for ( $i=1,$fact=1 ; $i<4 ; $i++,$fact*=$i ) {
      echo "$i! = $fact <BR>";
    }                                                                                  echo "$i! = $fact <BR>";
                                                                                                                                                  résultat = HTML
 ?>                                                                                }
 </BODY> </HTML>                                                              ?>                                                                  généré via la
                                                                              </BODY> </HTML>                                                     commande echo

                                                                                                              <HTML> <BODY>

       invocation                                                                  ce qui est                 <H1>Table des factorielles</H1>
                                                                                                              1! = 1 <BR>
       !                                                                           renvoyé                    2! = 2 <BR>
       exécution                                                                   au client                  3! = 6 <BR>
                                                                                                              </BODY> </HTML>
       côté serveur

                                                                              Rq : plusieurs zones <? ... ?> peuvent cohabiter dans une même page PHP

PHP                                  3                   Lionel Seinturier   PHP                                       4                                 Lionel Seinturier
                                         PHP                                                                                           PHP
 Récupération des données d'un formulaire                                                     Récupération des données d'un formulaire

 Chaque champ de saisie est associé                                                           <HTML> <BODY>
                                                                                              <H1>Exemple de résultat</H1>
 • à une variable PHP de même nom que le champ
 • qui contient le texte saisi                                                                Bonjour <? echo $prenom." ".$nom; ?>

                                                                                              </BODY> </HTML>
                                              <HTML> <BODY>
                                              <FORM ACTION="http://..."
                                                    METHOD=POST>
                                              Nom <INPUT NAME="nom"> <P>
                                              Prénom <INPUT NAME="prenom"> <P>
                                              <INPUT TYPE=SUBMIT VALUE="Envoi">
                                              <INPUT TYPE=RESET
                                                      VALUE="Remise à zéro">
                                              </FORM>                                                            clic
                                              </BODY> </HTML>




PHP                                           5                          Lionel Seinturier   PHP                                            6                                 Lionel Seinturier




                                         PHP                                                                                           PHP
 Récupération des données d'un formulaire                                                     Syntaxe

 Rq                                                                                           Proche de C et de Perl
 • code "pollué" avec de nombreuses variables                                                 - commentaires               /* ... */ ou // ... ou   #   ...
 • risque de conflit sur le nom des variables                                                 - instructions séparées par des points-virgules
 • pb potentiel de sécurité avec des variables non initialisées                               - blocs d'instructions entre accolades

 A partir PHP 4.2.0                                                                           Variables
 $_POST["nom de champ"] ou $_GET["nom de champ"]                                              - précédées de $                                 $compteur
                                                                                              - entiers, réels, chaînes de caractères
                                                                                              - pas de déclaration explicite, l'affectation d'une valeur suffit
 <HTML> <BODY>
                                                                                               $compteur=1;
 <H1>Exemple de résultat</H1>
                                                                                              - une variable peut changer de type, il suffit de lui affecter une nouvelle valeur
 Bonjour <? echo $_POST["prenom"]." ".$_POST["nom"]; ?>                                        $compteur="premier";
                                                                                              - une variable non affectée a une valeur par défaut (pas d'erreur de syntaxe)
 </BODY> </HTML>
                                                                                              - convertion de type automatique              $pi="3.14"; $piplusun=$pi+1;


PHP                                           7                          Lionel Seinturier   PHP                                            8                                 Lionel Seinturier
                                            PHP                                                                                                  PHP
 Chaînes de caractères                                                                                     Tableaux

 - entre guillemets                                          $couleur="rouge";                             - pas de déclaration préalable
 - substitutions de variables à l'intérieur d'une chaîne                                                   - accès aux membres à l'aide de crochets              $tab[0]="a";
      $figure="carré $couleur foncé";                     ! "carré rouge foncé"                            - ajout d'un élément en fin de tableau                $tab[]="b";
 - encodages des caractères spéciaux       \$ \\ \n \t
                                                                                                           - taille d'un tableau                                 count($tab)
 - entre apostrophes : sans substitution, ni encodage                                                      - comparaison avec l'opérateur ==                     $tab == $tab2
      $figure='carré $couleur foncé';                        "carré $couleur foncé"                        - nombreuses fonctions de manipulation disponibles
 - longueur d'une chaîne                                     strlen($figure)                               - caractères d'une chaîne = éléments d'un tableau
 - comparaison ==                                            $figure == $couleur
 - concaténation .                                           $figure.$couleur                              Tableaux associatifs       tableaux dont l'indice est une chaîne
 - nombreuses fonctions de manipulation disponibles                                                         ex. :    $mois["janvier"]=1;       $mois["février"]=2;


 Variables dynamiques            var. dont l'identificateur est la valeur d'une variable
  ex. :       $var="hello";     $$var="world";
              echo "$var $hello ${$var}";                 ! "hello world world"
PHP                                              9                                    Lionel Seinturier   PHP                                         10                         Lionel Seinturier




                                            PHP                                                                                                  PHP
 Opérateurs                                                                                                Instructions

 Comparaison           == != < > <= >=                                                                     Identique à C (sauf if/elseif/else)

 Arithmétiques         + - * / % ++ -- -                                                                   Conditions        if (condition) { ... } else { ... /* facultatif */ }
                                                                                                                             if (cond) { ... } elseif (cond) { ... } else { ... }
        division entre entiers donne un réel (≠ C)                                                                           switch (expression) {
        PHP           1/2=0.5                    C           1/2=0                                                             case constante : ... break;
                                                                                                                               ...
                                                                                                                               default : ...
 Manipulation de bits           & | ^ ~ << >> >>>                                                                            }
        ^     XOR                                                                                          Boucles           for ( initialisation ; test ; increment ) { ... }
        ~     NOT                                                                                                            while (condition) { ... }
        >>    décalage à droite en conservant le signe                                                                       do { ... } while (condition);
        >>>   décalage à droite en ajoutant des 0

 Affectations          = += -= *= /= <<= >>= >>>= &= ~= |= %= ^=              ternaire     ?:
 Logiques              && || !


PHP                                              11                                   Lionel Seinturier   PHP                                         12                         Lionel Seinturier
                                         PHP                                                                                        PHP
 Fonctions                                                                                Fonctions

 Définition identique aux fonctions C                                                     Passage de paramètres par valeur
 mais pas de typage des arguments, ni de la valeur de retour                                  la fonction travaille sur une copie des paramètres d'appel (ici $x)
      function factorielle($n) {                                                               function double($val) { $val *= 2; return $val; }
          if ($n<2) return 1; else return $n*factorielle($n-1);
                                                                                               $x = 10;
      }
                                                                                               $y = double($x);         ! y=20 x=10

 Valeurs par défaut possibles pour les arguments                                          Passage de paramètre par référence
      function racine($x,$degre=2){                                                           la fonction travaille sur les paramètres d'appel (ici $x)
        return pow($x,1/$degre); # pow(): fct puissance prédéfinie
      }                                                                                        $x = 10;
                                                                                               $y = double(&$x);        ! y=20 x=20
 Invocation :      racine(..,..)    ou   racine(..) ! degre=2


 • tous les arguments peuvent avoir des valeurs par défaut
 • valeurs par défaut seulement pour les args du début interdites
    racine($x=4,$degre) interdit

PHP                                         13                       Lionel Seinturier   PHP                                            14                                  Lionel Seinturier




                                         PHP                                                                                        PHP
 Objets PHP                                                                               Gestion de session

 But identique aux langages objet (Java, C++, ...)                                        HTTP procotole sans état
 ! rassembler des données et des traitements les manipulant
                                                                                          • pas de mémoire entre 2 requêtes (y compris d'un même client)
      class Point {                                                                       • 2 requêtes successives sont indépendantes
          var $x=0;         // valeur initiale 0
          var $y=0;         // valeur initiale 0
          function Point($x,$y) { $this->x=$x; $this->y=$y; }
          function affiche() { echo "$this->x $this->y"; }
                                                                                          Notion de session PHP
      }                                                                                   • être capable de suivre l'activité d'un client
 Instantiation     $p = new Point(10,10);                                                 • enregistrer des données valables pendant toute la durée de visite d'un client
 Appel méthode     $p->affiche();
                                                                                          • session créée lors de l'arrivée d'un nouveau client
 • constructeur de classes, mais pas de destructeur                                       • session propre à chaque client
 • héritage simple seulement                                                              • persiste tant que le client visite des pages sur le site
 • pas de protection des variables d'instance (publique)                                  • expire au bout d'un délai prédéfini


PHP                                         15                       Lionel Seinturier   PHP                                            16                                  Lionel Seinturier
                                      PHP                                                                                               PHP
 Gestion de session                                                                             Gestion des cookies

 Tableau associatif : $_SESSION["nom de variable"]                                              cookie

 if( ! isset($_SESSION["login"]) ) {                                                            • information enregistrée par un serveur sur un client
   // 1ère visite : demander son login à l'utilisateur                                          • n'importe quelle donnée (date dernière visite, pages visitées, …)
   $_SESSION["login"] = "...";
 }                                                                                              Positionnement : setcookie(nom[,valeur[,date expiration]]),
 else {
   // L'utilisateur a déjà fourni son login                                                     Lecture : $_COOKIE["nom de cookie"]
   echo "Vous êtes : ".$_SESSION["login"]);
 }                                                                                              setcookie("test","mon site",time()+3600); // expiration dans 1 heure

                                                                                                if( isset($_COOKIE("test") ) {
 Eventuellement : suppression d'une donnée enregistrée dans la session                            // Déjà venue dans l'heure passée
                                                                                                  // ... $_COOKIE("test") == "mon site"
 unset($_SESSION["login"]);                                                                     }

                                                                                                Effacement d'un cookie : positionner date d'expiration dans le passé
                                                                                                setcookie("test","",time()-60);

PHP                                        17                              Lionel Seinturier   PHP                                          18                                 Lionel Seinturier




                                      PHP                                                                                               PHP
 PHP & les bases de données                                                                     PHP & MySQL                                                            EtatCivil

                                                                                                                                                              ages
 Sauvegarder les données manipulées de façon stable et persistante dans une BD                  Permettre à une page PHP d'envoyer                                      Nom     Age
 ! architecture 3 tiers                                                                         des requêtes SQL à une base MySQL                                      Paul    15
                                   Traitements                                                  ! librairies de fonctions prédéfinies                                  Anne    17
      Présentation                                                   Données
                                                                                                1. Ouverture d'une connexion
                       HTTP                                                                     mysql_connect( serveur, login, mot de passe );
                                                                                                mysql_connect( "localhost", "", "" );

                                                                                                2. Envoi d'une requête SQL pour la base EtatCivil
                                                                                                $result = mysql_db_query( base, requête SQL );
        HTML                     PHP, ASP, JSP,                     tables SQL
                                                                                                $result = mysql_db_query( "EtatCivil", "SELECT * FROM ages" );
                                 servlet, CGI, ...
                                                                  serveur BD                    3. Récupération du résultat tuple à tuple
       navigateur                  serveur Web                    - Access                      while ( $tuple = mysql_fetch_row($result) ) {
       - Explorer                  - Apache                       - Oracle                        echo $tuple[0];     # le nom
       - Netscape                  - IIS                          - MySQL                         echo $tuple[1];     # l'age
       - ...                       - ...                          - PostGreSQL                  4. Libération des données résultat et fermeture de la connexion
                                                                  - ...                         mysql_free_result($result); mysql_close();

PHP                                        19                              Lionel Seinturier   PHP                                          20                                 Lionel Seinturier
                                     PHP                                                                                          PHP
 PHP & MySQL                                                                                PHP & MySQL

 <html> <body>                                                                              Gestion d'erreurs
 <table border="1">

 <?
                                                                                            mysql_connect, mysql_db_query retournent false en cas d'erreur
      mysql_connect("localhost","","");                                                     ! mysql_error() permet de récupérer un message d'erreur
      $result = mysql_db_query("EtatCivil","SELECT * FROM ages");
      while ( $row = mysql_fetch_row($result) ) {
        echo "<tr> <td>$row[0]</td> <td>$row[1]</td> </tr>";                                $ret = mysql_connect("localhost","","");
      }                                                                                     if (!$ret) echo "Erreur: ".mysql_error();
      mysql_free_result($result);
                                                                                            $result =
      mysql_close();
                                                                                                mysql_db_query(
 ?>
                                                                                                   "EtatCivil",
                                                                                                   "INSERT INTO ages VALUES ('Bob',16)"
 </table>
                                                                                                );
 </body> </html>
                                                                                            if (!$result) echo "Erreur: ".mysql_error();




PHP                                      21                            Lionel Seinturier   PHP                                        22                        Lionel Seinturier




                                     PHP                                                                                          PHP
 PHP & MySQL                                                                                PHP & MySQL

 Connexions multiples                                                                       Fonctions de manipulations de bases et tables
                                                                                            mysql_create_db( "maBase" )        création
 mysql_connect retourne un identifiant de connexion en cas de succès
                                                                                            mysql_drop_db( "maBase" )          suppression
 ! utilisable en paramètre avec mysql_db_query
                                                                                            mysql_list_dbs()                   liste (tableau PHP) des bases
                                                                                            mysql_list_tables( "maBase" )      liste (tableau PHP) des tables
 $c1 = mysql_connect("localhost","","");
 $c2 = mysql_connect("remotehost.com","John","Smith");
 $result =                                                                                  Création/suppression tables
     mysql_db_query(
                                                                                            mysql_db_query( "maBase",
        "EtatCivil",
                                                                                                "CREATE TABLE ages (
        "DELETE FROM ages WHERE age>20 AND age<30",
                                                                                                   nom VARCHAR(30) NOT NULL, age INT, PRIMARY KEY(nom)" );
        $c1
                                                                                            mysql_db_query( "maBase", "DROP TABLE ages" );
     );
 if (!$result) echo "Erreur: ".mysql_error();

                                                                                            Rq : paramètre supplémentaire accepté pour connexions multiples

PHP                                      23                            Lionel Seinturier   PHP                                        24                        Lionel Seinturier
                                       PHP                                                                                               PHP
 PHP & MySQL                                                                                      PHP & autres SGBD

 Fonctions de manipulations d'un résultat                                                         • mêmes principes
 $result = mysql_db_query("EtatCivil","SELECT * FROM ages");                                      • préfixes des noms de fonctions ≠
                                                                                                  • fonctions et/ou paramêtres parfois différents
 mysql_num_rows($result)          # de tuples
 mysq_num_fields($result)         # d'attributs dans 1 tuple                                      • PostgreSQL : pg_connect(), pg_exec(), …
 mysql_field_name($result,$i)     nom du i-ème attribut                                           • ODBC : odbc_connect(), odbc_exec(), …
 mysql_field_type($result,$i)     type du i-ème attribut
 mysql_field_len($result,$i)      taille du i-ème attribut
 mysql_field_table($result,$i)    table du i-ème attribut (cf. jointure)
 mysql_field_flags($result,$i)    flags du i-ème attribut (ex. clé, not null, …)
    ! chaîne séparée par des espaces
    ! explode(" ",$ch) retourne un tableau des valeurs


 Rq : paramètre supplémentaire accepté pour connexions multiples


PHP                                         25                               Lionel Seinturier   PHP                                         26     Lionel Seinturier

								
To top