Cours
Transcription
Cours
Systèmes d'informations C'est un ensemble d'outils pour stocker / gérer / diffuser des informations / des données Le stockage : Bases de données + SGDBR La gestion : Saisie, Mise à jour, Contrôle La diffusion : Catalogue, Sites Web, Services spécifiques Programmation avancée 1 Exemple : Site de ecommerce Bases de données : Articles en ventes • Clients + commandes / factures • Diffusion du catalogue sur le Web Extraction et affichage des données • Outils de recherche • Un client passe commande : Ajout de données dans la table "commandes" • Diffusion de la commande au service expédition • Suivi du paiement • Programmation avancée 2 Quels langages pour cela ? L'utilisateur ne peut pas accéder directement aux BD Il faut transiter par un serveur Web Affichage + formulaires Le serveur accède aux données et déclanche des actions Requêtes sur le SGDBR Alertes au services d'expédition / de facturation Plusieurs langages possibles coté serveur : PHP (Apache, ...) ASP (IIS, ...) Programmes CGI : C/C++, Perl, Python Programmation avancée 3 Le langage PHP Généralités Liaison avec un serveur de base de données Génération d'une page d’après une BD Réception de données provenant d'un formulaire Insertion de données reçues dans une BD Programmation avancée 4 L'architecture Client/Serveur en PHP Le client demande une URL classique : • Le serveur envoie un fichier HTML Le client demande une URL contenant du PHP : Le serveur exécute le script • Le serveur peut accéder à des fichiers, des BD • Le serveur envoie les résultats sous forme HTML • Conséquences le client n'a pas à connaître PHP le client ne voit pas les scripts PHP, mais leurs résultats Programmation avancée 5 Insertion dans un document HTML Le document HTML doit avoir l ’extension ".php" et doit être ouvert via un serveur Web (http://…) Pour insérer un script : <? print("coucou"); ?> ou <?php instruction1; instruction2; ?> Programmation avancée 6 Les variables Les noms de variables commencent tous par "$" Il existe 4 principaux types de variables : • integer (entiers) : $i = 4; • float (réel = nombres à virgule flottante) : $x = 4.2; $y = 1.035e3; • string (chaînes de caractères) : $nom = "Dupond"; • array (tableaux) Programmation avancée 7 Les tableaux Ils sont définis de 2 façons : • d'un bloc : $tab = array("Lundi","Mardi",…); • case par case (avec l'indice précis) : $tab[0] = "Lundi"; $tab[3] = "Mardi"; • comme résultat d'une fonction (ex : requête SQL) La taille du tableau et la création des cases vides sont gérées automatiquement Programmation avancée 8 Lire les valeurs d'un tableau Lire une seule case et placer sa valeur dans une variable : $x = $tab[8]; Lire plusieurs cases et remplir une liste de variables : $t = array("1","Dupond","Paris"); list($num,$nom) = $t; // résultats // $num = "1"; // $nom = "Dupond"; // la valeur "Paris" n'est pas lue Programmation avancée 9 Définir une fonction Mot clé "function" + nom des arguments + instructions : function affiche($nom,$prénom) { print("Nom = $nom<BR>"); print("Prénom = $prénom<BR>"); } Appelle de la fonction avec des valeurs : affiche("Dupond","Jean"); Produit le code HTML suivant : Nom = Dupond<BR>Prénom = Jean<BR> Programmation avancée 10 Structure d'un programme Identique au langage Java / JavaScript / C : • conditionnelles simples : if (condition) instruction; • alternatives : if (condition) { instructions; } else { instructions; }; • boucles : for ($i=6; $i<12; $i++) { ... }; while (conditions) { ... }; Programmation avancée 11 La diffusion d'information Pour diffuser des données sur une page Web en PHP, il faut : • se connecter à un serveur (PostgreSQL ici) • demander l'exécution d'une requête • afficher un entête • afficher les données : boucle : pour chaque ligne mise en forme HTML afficher un pied de page • fermer la connexion • Programmation avancée 12 Accéder à un serveur PostgreSQL Connexion à une base de donnée $c = pg_connect("host=nomduserveur dbname=nomdelabase user=nomdelogin password=motdepasse"); • la variable $c contient un numéro de connexion • $c est nulle (booléen faux) si la connexion a échoué : if (!$c) { print("Erreur de connexion.");… } Programmation avancée 13 Exécuter une requête On exécute une requête SQL à travers la connexion crée : $result = pg_Exec($c,"requête SQL;"); $result est un tableau à deux dimensions contenant la table résultant de la requête (éventuellement vide) • $result est nul si la requête a échoué : • if (!$result) { print("Erreur dans la requête.");... } Programmation avancée 14 Exemple de requêtes $c = pg_connect("host=iuthaprojet dbname=biblio user=biblio"); if (!$c) { print("Echec de la connection"); exit; } $result = pg_exec($, "SELECT titre,prix FROM livres;"); Programmation avancée 15 Afficher le résultat d'une requête Il faut rechercher le nombre de lignes : $nlignes = pg_numrows($result); Il faut faire une boucle pour afficher chaque ligne : for ($i=0;$i < $n;$i++) { extraire les données de la ligne $i produire le HTML pour la ligne $i} Il faut extraire les données ligne par ligne : list($case1,$case2,…,$caseN) = pg_fetch_row($result,$i); Programmation avancée 16 Exemple : affichage simple $result = pg_exec($, "SELECT titre,prix FROM livres;"); $nlignes = pg_numrows($result); for ($i=0;$i<$nlignes;$i++) { list($titre,$prix) = pg_fetch_row($result,$i); print("$titre $prix<BR>"); } Programmation avancée 17 Exemple pour afficher une table print("<TABLE>"); print("<TR><TH>ISBN</TH><TH>Prix</TH></TR >"); for ($i=0;$i<$nlignes;$i++) { list($titre,$prix) = pg_fetch_row($result,$i); print("<TR><TD>$titre</TD>"); print("<TD ALIGN='RIGHT'>$prix</TD></TR>"); } print("</TABLE>"); Programmation avancée 18 Recevoir des données sur le serveur Envoi : créer un formulaire avec : action = l'URL du fichier contenant le script PHP • méthode = POST (ou GET pour débugger) • nommer tous les éléments du formulaire à lire • donner des valeurs aux boutons radio et choix • Réception : dans le script PHP : une variable est crée par élément (elle porte son nom) • pour un groupe de bouton radio, une liste de choix : valeur de variable = "value" de l'élément choisi • Programmation avancée 19 Exemple de formulaire <FORM ACTION="recept.php"METHOD="POST"> Nom : <INPUT TYPE="TEXT" NAME="nom"> <BR>Enfants :<BR> <INPUT TYPE="RADIO" NAME="x" VALUE="0"> aucun<BR> <INPUT TYPE="RADIO" NAME="x" VALUE="1"> 1<BR> <INPUT TYPE="RADIO" NAME="x" VALUE="2"> 2<BR> <INPUT TYPE="RADIO" NAME="x" VALUE="3"> plus </FORM> Programmation avancée 20 Exemple de réception : recept.php <BODY>Bonjour <? print($nom); ?> <BR>Vous avez <?php switch ($x) { case 0 : print("aucun enfant"); case 1 : print("1 enfant"); case 2 : print("2 enfants"); case 3 : print("3 enfants ou plus"); } ?> </HTML> Programmation avancée 21 Réception et insertion dans une BD Connexion à la base de données Exécution d'une requête de type "INSERT INTO" avec les variables contenant les données du formulaires reçues Affichage d'un message de confirmation ou redirection vers une autre page du site Programmation avancée 22 Exemple <?php $c = pg_connect("host=iuthaprojet dbname=clients"); pg_exec($c, "INSERT INTO clients VALUES ( $nom,$x);"); ?> <H3>Inscription effectuées</H3> <A HREF="...">Retour à l'accueil</A> Programmation avancée 23 Compléments Transfert de données client => serveur • Methodes : GET ou POST GET : données envoyées sur l'URL POST : données envoyées à part (invisible) • Les données reçues sont placées dans 2 tableaux : $_GET[] $_POST[] • On récupère les variables en indiquant le nom de l'élément du formulaire portant la donnée : $texte = $_GET["texte"]; $monTitre = $_POST["titre"]; Programmation avancée 24