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