m3302 développement d’applications décisionnelles - web ... · 1 m3302 développement...

72
1 M3302 Développement d’applications décisionnelles - Web Programmation côté serveur PHP Issu des cours de l’équipe pédagogique en développement web Du département informatique de l’IUT2

Upload: others

Post on 11-Feb-2021

10 views

Category:

Documents


3 download

TRANSCRIPT

  • 1

    M3302 Développement d’applications décisionnelles -

    Web

    Programmation côté serveur PHP

    Issu des cours de l’équipe pédagogique en développement web Du département informatique de l’IUT2

  • 2

    Programmation côté serveur PHP

    1.  Principes du web 2.  Le langage de programmation PHP 3.  Les formulaires en PHP 4.  PHP et accès base de données

  • 3

    WWW ou le Web

    Web ⇒ Gigantesque « système d ’information » composé de milliard de

    sites web connectés par le réseau Internet ⇒  Site web = ensemble de documents hypertextes (ou pages web)

    Créé en 1990 au CERN (Laboratoire de physique des particules en Suisse - Genève) par Tim Berners-Lee pour mettre de la documentation en ligne

    Un document hypertexte (une page web) est un document numérique composé : •  de liens vers d'autres documents permettant de passer du

    document à un autre •  de textes, images, sons, vidéos,…

  • 4

    Comment consulter des pages web?

    Principe de base : Client/Serveur

    Machine Client Machine Serveur (ex : votre PC) (ex : www.iut2.upmf-grenoble.fr)

    + + un logiciel « client web » un logiciel « serveur web » (ex : Firefox, Chrome, Safari, IE,…) (ex : Apache, IIS)

    réseau Internet

    http://www…. (requête)

    Page web (réponse)

    Protocole HTTP

  • Machine serveur => Data center

    5

    http://www.google.com/about/datacenters/

  • 6

    Le protocole HTTP

    Protocole informatique => un ensemble de règles de communication entre 2 entités (ex: protocoles IP, TCP, UDP, FTP,…)

    Protocole HTTP (HyperText Transfert Protocol) : –  utilisé pour transférer tout document web d'un

    serveur Web vers un client Web.

    Chaque document web – une page web entière ou une partie de page web – (on parle aussi de ressource web) est identifiée par une adresse, appelée « URL »

    URL: Uniform Resource Locator

  • 7

    URL URL: Uniform Resource Locator

    adresse identifiant toute ressource (document) du web.

    Syntaxe d’une URL: http:///

    ou (rare) http://:/

    Exemples : http://www.google.fr/ http://www.iut2.upmf-grenoble.fr/index.html http://www-etu-info.iut2.upmf-grenoble.fr/~jules/tp1/cv.html http://www.truc.fr/grenoble.html#montagne http://monsite:8080/page.html

  • Comment créer une page web?

    •  Un "éditeur de texte”, par exemple: –  gedit, notepad++, smultron,... (dédié à l’écriture de

    code informatique) ( ou un logiciel dit WYSIWYG (What You See Is What You Get), par exemple Dreamweaver)

    •  2 langages pour créer une page web : –  HTML (HyperText Markup Language)

    •  Pour décrire et structurer les informations de la page –  CSS (Cascading Style Sheets)

    •  Pour présenter les informations de la page (couleurs, encadrés, taille du texte, positionnement des divisions, des images,...)

    8

  • 9

    Le langage HTML HTML : HyperText Markup Language

    ⇒  langage de balisage pour le développement des pages web

    Ce langage permet : •  de structurer l'information : titres, paragraphes, tableaux… •  d'inclure des images, sons,… •  d'inclure des liens vers d'autres documents

    HTML5 : W3C Candidate Recommendation 6 August 2013 http://www.w3.org/TR/html5/

  • Exemple : 2 fichiers (page.html et style.css)

    10

  • Exemple : consultation à partir du navigateur

    11

  • 12

    Bilan

      Définition de la structure et du design des pages web

      Possibilité de pages multi média

      Possibilité de définir des animations (Javascript, Flash …)

      Interprétation de la page côté client

      Programmation relativement simple

    - Peu de sécurité

    -  Bon déroulement dépend du navigateur client

    -  Infos à afficher données par le programmeur

  • 13

    Programmation côté serveur PHP

    1.  Principes du web 2.  Le langage de programmation PHP 3.  PHP et accès base de données

  • 14

    Pages HTML statiques vs dynamiques

    •  contenu fixé à l’avance => manipulation de nombreuses pages pour la maintenance

    •  aucun moyen d ’action pour l ’utilisateur pour sélectionner et/ou transmettre des informations au serveur => pas de « personnalisation » des pages selon l’utilisateur

    => technique de base pour pallier ces inconvénients: CGI (Common Gateway Interface)

    => vers des sites web dynamiques : créer des pages dynamiquement en fonction du contenu d'une base de données

  • 15

    Principe de la programmation côté serveur

    Internet

    Requête http://www….

    réponse: document HTML

    HTTP

    Programme client (ex: mozilla)

    Machine client Machine serveur

    Programme serveur

    (ex: Apache)

    « Code »

  • 16

    Programme client (ex: mozilla)

    Programme serveur

    (ex: Apache)

    « Code »

    En PHP

    en C en Perl

    script shell ...

    HTTP

    1/ requête (souvent par formulaire)

    4/ document HTML

    2/ requête

    3/ document HTML

  • 17

    HTTP et programme

    HTTP : le client « réclame » simplement le fichier qu'il cherche:

    HTTP + code : relation client/serveur plus élaborée : –  le fichier spécifié ne doit pas être retourné tel quel –  mais c'est un programme qui est exécuté et génère

    la page HTML –  c'est le résultat de l ’exécution du programme qui

    est retourné au client –  des paramètres peuvent être passés au

    programme.

  • 18

    Langages de scripts

    Langages de scripts "côté serveur" : –  C, C++, ADA,… –  Perl, JSP, ASP, PHP…

    pour : –  exécuter une application –  collecter des données de formulaire –  consulter, mettre à jour,… des données d’une BD

    PHP (Hypertext Preprocessor) : –  langage de scripts généraliste –  Open Source –  spécialement conçu pour le développement

    d'applications web –  peut être intégré facilement au HTML

  • 19

    PHP (Hypertext Preprocessor)

    Langage de script généraliste et Open Source : –  Tire son origine de PHP/FI (1995, Rasmus Lerdorf) –  PHP 3.0 (1998, Zeev Suraski et Andi Gutmans) –  PHP 4.0 (2000, début des aspects objets) –  PHP 5.0 (2004, modèle objet complet)

    –  spécialement conçu pour le développement d’applications web ⇒  prévu d’emblée pour être intégré directement dans les

    pages HTML ⇒  Le code PHP de la page génère la page HTML ⇒ permet la génération dynamique des pages HTML

  • 20

    PHP (Hypertext Preprocessor)

    Langage de script interprété : –  interpréteur PHP = le « Zend Engine » –  interprété côté serveur (≠ Javascript qui s’exécute côté client) –  extrêmement simple pour les néophytes, –  mais offre des fonctionnalités avancées pour les experts.

    ⇒  Sites documentation PHP: http://www.phpdebutant.org/ http://www.phpfrance.com/ http://www.php.net/manual/fr/ http://www.manuelphp.com/ …

  • 21

    Une des grandes forces de PHP : –  le support de nombreuses bases de données:

    •  PostgreSQL •  Ingres •  Oracle (OCI7 et OCI8) •  Sybase •  IBM DB2 •  MySQL •  Informix •  ...

  • 22

    Syntaxe de base PHP

    •  délimité par des balises d’échappement (début et fin)

    •  instructions terminées par un point-virgule ; •  bloc d’instructions délimité par des accolades { } •  des commentaires :

    // ou # commentaire sur une ligne

    /*… */ commentaire sur plusieurs lignes

    •  4 types simples en PHP : booléen, entier, réel (flottant), chaîne de caractères

    •  typage faible et dynamique : le type d’une variable est déterminé par la valeur qu’on lui donne et peut changer au cours du programme

    •  Pour connaître le type: is_double() is_float() is_string() is_int() is_integer

    is_boolean() is_array() is_object() is_resource()

  • 23

    Les variables et constantes PHP

    Les variables : –  représentées par un signe dollar "$" suivi du nom de la

    variable : $NomDeVariable –  attention : $x != $X –  existence d’une variable : isset() –  valeur NULL : is_null() –  Variables dynamiques (variables variables):

    $pomme = "golden"; $fruit = "pomme"; print ${$fruit}; //équivalent à print $pomme; affiche golden !

    Les constantes : define pas de $, par convention => en majuscule

    define("TAUX",6.55957);

  • 24

    Syntaxe de base PHP : Opérateurs

    •  Opérateurs arithmétiques + - * / %

    •  Opérateurs de comparaison == != < >= === !==

    •  Opérateurs booléens ! AND && OR || XOR

    •  Opérateurs d'incrémentation, de décrémentation ++ --

    •  Opérateurs d'affectation, concaténation = . .=

  • Exemple: PHP « en-ligne »

    Fichier hello.php

    1.  Vérification syntaxique:

    php -l hello.php

    2.  Exécution

    php hello.php

    25

  • Exemple: PHP + HTML

    Fichier hello2.php

    Dans un fichier PHP, tout ce qui est en dehors des balises est produit en sortie sans modification.

    Le serveur web Apache intègre un module "interpréteur PHP”:

    Exécution du programme :

    http://www-etu-info… /hello2.php

    Un exemple Voici le résultat :

    26

  • 27

    for($i=1;$i

  • 28

    Syntaxe de base PHP : les fonctions

    function nom_fonction ([param_1, …, param_n]) { instruction_1;

    … instruction_m;

    [return $resultat;]

    }

    PHP met à disposition un très grand nombre de fonctions (dites natives) http://www.php.net

  • 29

    Syntaxe de base PHP : inclure des fichiers

    Inclusion d'un fichier PHP séparé à l’endroit désiré : include() ou require() : include('fichier.inc.php');

    Remarque n°1: include() ? ou require() ? –  include() : inclusion dynamique lors de l'exécution et

    réévaluation à chaque passage (exemple $var dans une boucle)

    –  require() : pas de réévaluation lors d'un second passage

    Reamarque n°2: include_once() ou require_once() –  doivent être utilisées dans les cas où le même fichier risque

    d'être inclus et évalué plusieurs fois durant l'exécution d'un script.

    =>sûr de n’être inclus qu'une fois et évite les problèmes de re-déclarations de fonctions ou autres.

  • 30

    Les chaînes de caractères (string)

    •  Interprétation des variables $fruit = "la pomme"; $chaine1 = "mon fruit préféré est $fruit";

    •  Pas d'interprétation des variables $chaine = 'mon caractère préféré est le $'; $chaine2 = 'mon fruit préféré est $fruit'; echo $chaine1; ??? echo $chaine2; ???

    •  Caractère d'échappement \ $chaine1 = "mon fruit préféré est \$fruit"; ??? •  Concaténation de chaînes

    $chaîne = $chaîne1.$chaîne2; $chaîne .= $chaîne1;

  • 31

    Traitement des chaînes

    •  Affichage simple : echo() print() echo('Bonjour les étudiants'); print('Bonjour les étudiants'); echo 'Bonsoir les étudiants'; print 'Bonsoir les étudiants'; echo 'PHP',5,' est super ',$val;

    •  Accès à un caractère d'une chaîne $chaine = "vive les pommes !"; echo $chaine{1} //affiche i

    •  Affichage avec masque printf() sprintf() $masque = 'la dernière version de %s est %d'; printf ($masque,'PHP', 5.3); $chaine = sprintf ($masque,'PHP', 5.3);

  • 32

    Traitement des chaînes

    •  Taille d'une chaîne strlen() •  Changement de casse strtoupper() strtolower() •  Echappement et inverse addslashes() stripslashes()

    $prenom = addslashes("Eddie");

    $nom = addslashes ("O'Sullivan");

    $req = "INSERT INTO selectionneur (prenom, nom)VALUES ('$prenom','$nom')";

    •  … de l'ordre de 100 fonctions!

  • 33

    Les tableaux (array)

    1.  Tableau indexé numériquement $tab = array('pomme','poire','pêche'); $tab[0]= 'pomme'; $tab[1]= 'poire'; $tab[2]= 'pêche'; $tab[]= 'pomme'; $tab[]= 'poire'; $tab[]= 'pêche';

    2.  Tableau associatif : associe une chaîne de caractère a un élément $tab = array (

    'prenom' => 'toto', 'age' => 10, 'note' => 0

    ); echo "{$tab['prenom']} a eu la note {$tab['note' ]}"; ???

    3.  Tableau multidimensionnel $matrice = array ( array(1,2), array(3,4), array(4,5));

  • 34

    Traitements des tableaux

    •  Afficher un tableau: print_r($nomTableau); // ou var_dump

    •  Taille d’un tableau: $n=count($nomTableau); // ou sizeof

    •  Convertir une chaîne en tableau $chaîne = "Paul,Dupont,3 rue des prés,38999,Chaille"; $nomTableau = explode (",",$chaine);

    •  Parcourir un tableau (foreach, while, for): foreach ($nomTableau as $valeur)

    { echo ‘$valeur.’;

    }

    Et beaucoup d’autres choses! ⇒  notion de tableau très riche en PHP

  • 35

    Tableaux superglobaux de PHP

    •  Ce sont des tableaux d’informations accessibles sous formes de variables prédéfinies –  décrivent le contexte d'exécution: communication entre

    le navigateur du client et le serveur web (toutes les informations échangées)

    –  les noms de variables commencent par «_»

    Exemples : $_SERVER $_SERVER ['REMOTE_ADDR'], $_SERVER ['SERVER_NAME']…

    $_REQUEST $_GET $_POST $_REQUEST ['nom'] $_GET['nom'] $_POST['nom']

  • 36

    Tableaux superglobaux de PHP $GLOBALS Contient l’ensemble des variables globales définies.

    $_SERVER Permet de connaître le détail de la requête en cours (nom, chemin de la

    page,…) et les éléments spécifiques au serveur web (nom, version) et à la connexion (IP paramètres du navigateur,…)

    $_COOKIE Contient la liste des variables transmises par le navigateur via les cookies

    $_GET Contient la liste des variables transmises via la méthode GET (par l’URL)

    dans un formulaire

    $_POST Contient la liste des variables transmises via la méthode POST dans un

    formulaire

  • 37

    Tableaux superglobaux de PHP

    $_REQUEST Ce tableau agrège $_POST $_GET $_COOKIE en un seul tableau. Les

    valeurs des variables ont été transmises à l’interpréteur PHP via le réseau, depuis le navigateur du client et donc ce sont des variables « sensibles » (leur contenu peut être nocif)

    $_FILES Dans un formulaire, il est possible de télécharger des fichiers. Ce tableau

    décrits ces fichiers.

    $_ENV Contient les variables de l'environnement d'exécution de l’interpréteur

    PHP

    $_SESSION Ce tableau permet de manipuler directement les données de session

    utilisateur

  • 38

    Programmation côté serveur PHP

    1.  Principe du web 2.  Le langage de programmation PHP 3.  Les formulaires en PHP 4.  PHP et accès base de données

  • 39

    Créations de pages web dynamiques avec PHP

    L'un des points forts de PHP : sa capacité à traiter les formulaires. => tous les valeurs saisies dans le formulaire seront

    automatiquement disponibles dans le script PHP

    Exemple de formulaire :

  • 40

    Comment créer un formulaire?

    •  Dans une page HTML, on établit une zone de saisie (le formulaire ou form en anglais) en utilisant l’élément form

    •  On définit la méthode à employer pour transmettre au serveur l'information recueillie dans les champs du formulaire : la méthode post ou la méthode get (la différence est au niveau du passage des paramètres)

    •  On écrit un programme externe (par exemple un programme PHP) qui devra traiter les informations recueillies.

    … ou …

  • Les différentes possibilités

    1.  Zones de saisie de texte: –  1 seule ligne : text (ex: Google) –  plusieurs lignes : textarea

    2.  Les choix: –  Cases à cocher: checkbox (plusieurs choix

    possibles) –  Boutons radio : radio (1 seul choix possible) –  Liste déroulante (1 seul choix possible)

    3.  Et d’autres zones de saisie : –  file, password, email, url, tel, cursor, number,

    range, date, datetime, datetime-local, month, time, week.

    41

  • 42

    Formulaire – zone de texte simple ….

    Vos coordonnées Entrez votre pseudonyme:


    Entrez votre nom:
    Entrez votre prénom:

  • 43

    Explications •  Dans cet exemple, le programme qui traite les paramètres de

    l'utilisateur est un programme php et s'appelle bonjour.php. •  Il y a 3 variables passées au programme (ps, nm, pn) qui

    contiendront les valeurs saisies (attribut name de la balise )

    •  5 objets sont créés grâce à la balise –  3 champs de saisie de texte d'une longueur de 20

    caractères, avec pour chaque, un label () –  un bouton "reset" –  un bouton "submit" pour valider la saisie

    •  Les 3 zones de saisie sont regroupées en un ensemble () auquel on donne un titre ()

    •  L’attribut type de la balise ) définit le type d’information à saisir (ici une zone de texte => type="text")

  • Remarque: élément Datalist HTML5

    ...

    Entrez votre navigateur:

    44

  • 45

    Formulaire – Boutons radio …

    Que préférez-vous ? Les pommes ?
    Les poires ?
    Les pêches ?

  • Formulaire – Liste déroulante

    … Que choisissez-vous ? berger allemand Persan Siamois ...

    46

  • 47

    Plus généralement

    …..

    …..

  • 48

    Passage de paramètres

    Les paramètres sont transmis au serveur Web (Apache par exemple, qui ensuite les transmet au programme PHP pour traitement) sous forme d’une seule chaîne de caractères qui est :

    ⇒ une suite de couples nomvariable=valeur séparés par &

    var1=val1&var2=val2&var3=val3...

    Exemples de chaîne:

    q=css+form+w3school (recherche Google)

    ps=jolicoeur&nm=lagaffe&pn=gaston

  • 49

    2 méthodes pour transférer les paramètres entre le client et le programme de traitement:

    –  Méthode GET: les paramètres sont encodés par le client dans l'URL à la suite de l'adresse au programme (ici, traite.php)

    http://www-etu-info/~pestys/traite.php?ps=jolicoeur&nm=lagaffe&pn=gaston

    https://www.google.fr/#q=gateau+au+chocolat

    –  Méthode POST: l'URL ne contient plus la chaîne, http://www-etu-info/~pestys/traite.php

    les paramètres sont ensuite transmis par le serveur au script sur son entrée standard

  • 50

    Programmation côté serveur PHP

    1.  Principe du web 2.  Le langage de programmation PHP 3.  Les formulaires en PHP 4.  PHP et accès base de données

  • 51

    Accès aux Bases de Données

    •  Une des grandes forces de PHP => le support de nombreuses bases de données: –  PostgreSQL, Ingres, Oracle, Sybase, IBM DB2, MySQL, Informix,… –  PHP 5 :

    •  intègre un SGBDR, SQLite3 •  Interface PDO

    •  PDO (PHP Data Object ) ⇒  Interface pour accéder à une base de données depuis PHP ⇒ Accès identique pour toutes les BD

  • 52

    Architecture des drivers PDO

    PHP PDO

    PDO MySQL

    PDO PostGreSQL

    PDO SQLite

    PDO Oracle

  • 53

    Méthode d'accès

    Ouverture de la connexion et sélection de la BD

    Requête

    Exploitation des résultats

    Fermeture de la connexion

  • 54

    Connexion à la Base de Données

    •  La connexion à la base de données doit être faite qu'une seule fois, au début de la page

    •  Création d'une instance de la classe PDO = > les paramètres du constructeur de la classe sont: le DSN (Data Source Name), le login, le mot de passe

  • 55

    Effectuer une requête

    2 méthodes de l'objet PDO : exec() et query() exec()

    –  pour les requêtes qui ne renvoient pas de résultats (UPDATE, INSERT, DELETE)

    –  La méthode renvoie le nb de lignes traitées

    query()

    –  pour les requêtes qui renvoient un résultat (SELECT) –  La méthode renvoie une instance de l'objet PDOStatement

  • 56

    Récupérer le résultat d’une requête

    •  2 méthodes pour manipuler les données renvoyées: fetchAll():retourne l'ensemble des données fetch():permet une lecture séquentielle du résultat

    -> utilisez fetch() si votre requête ne retourne qu’un seul n-uplet $row = $resultat->fetch(); echo $row['noma’]

    •  3 formats possibles des résultats : –  $tableau=$sth->fetchAll(PDO::FETCH_ASSOC);

    Retourne un tableau associatif indexé par les noms de colonnes

    –  $tableau=$sth->fetchAll(PDO::FETCH_BOTH); Retourne un tableau associatif indexé par les noms de colonnes, mais aussi

    par les numéros des colonnes (mode par défaut)

    –  $tableau=$sth->fetchAll(PDO::FETCH_OBJ); Retourne un tableau d'objets dont les propriétés correspondent aux noms des

    colonnes

  • 57

    Exemple avec tableau associatif

    (echo $tableau[0][’lieu']; //affichage colonne lieu de la 1ère ligne)

  • Requête “préparée”

    •  Pour adapter les requêtes en fonction de variables •  Et gérer le typage des ?

    Exemple :

    58

  • 59

    Exemple complet

    •  Schéma relationnel de la base de données "zoo" :

    create table gardien ( numg numeric(2), nomg varchar(20), dateg date, primary key (numg));

    create table cage( numc numeric(2), lieu varchar(30), typecage varchar(30), primary key (numc));

    create table soccupe( numg numeric(2), numc numeric(2), primary key (numg, numc), foreign key (numg) references gardien(numg), foreign key (numc) references cage(numc));

    create table animal( noma varchar(10), espece varchar(20), sexe char(1) constraint c_sexe check (sexe in ('f','m')), datea date, numc numeric(2), primary key (noma), foreign key (numc) references cage(numc));

  • Page "client" souhaitée (version 1)

    60

    gardien.php

  • 61

    gardien.php

    Titre du document

  • 62

    gardien.inc.php

  • 63

    gardien.inc.php (fin)

    //requête $req= "select nomg from gardien"; $sth = $dbh->query($req) or die(print_r($dbh->errorInfo()));

    //récupération du tableau associatif $tableau=$sth->fetchAll(PDO::FETCH_ASSOC);

    //affichage de tout le tableau echo ''; foreach ($tableau as $row){ echo ''; echo $row['nomg']; echo '’;

    } echo '';

    //après avoir traité chaque requête $sth->closeCursor();

    echo '’; ?>

  • 64

    Page source généré pour le "client" …/..

    Gaston Lagaffe Achille Talon Titeuf Milou tintin Michel Vaillant Boule

    …/…

  • page "client" souhaitée (version 2)

    65

    gardienbis.php

  • et… pour le gardien Gaston

    66

    animal_gardien.php

  • gardienbis.php

    Titre du document

    67

  • 68

    gardienbis.inc.php

  • 69

    gardienbis.inc.php (fin)

    //requête $req= "select nomg from gardien"; $sth = $dbh->query($req) or die(print_r($dbh->errorInfo())); //récupération du tableau associatif $tableau=$sth->fetchAll(PDO::FETCH_ASSOC);

    //affichage de tout le tableau echo ''; foreach ($tableau as $row){ echo ''; $nomg = $row['nomg']; $urlnomg = rawurlencode($row['nomg']);

    echo ("$nomg"); echo '’; } echo '';

    //après avoir traité chaque requête $sth->closeCursor(); echo '’; ?>

  • animal_gardien.php

    Titre du document

  • Extrait de animal_gardien.inc.php

  • Autre solution – « requête préparée »