Cours

publicité
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 e­commerce
 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.035e­3;
• 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=nom­du­serveur
dbname=nom­de­la­base
user=nom­de­login
password=mot­de­passe"); • 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
Téléchargement