Internet et applications dans l`entreprise (4) PHP

Transcription

Internet et applications dans l`entreprise (4) PHP
Licence professionnelle
« Management des organisations »
Option « Systèmes d’information et Réseaux »
Internet et applications dans l’entreprise (4)
PHP
O. Auzende
2009-2010
PHP ......................................................................................................................................................................... 3
Balises PHP ......................................................................................................................................................... 3
Variables, formatage des données, structures de contrôle ................................................................................... 3
Tirages aléatoires ................................................................................................................................................ 4
Exercice............................................................................................................................................................... 4
Variables provenant d'un formulaire ................................................................................................................... 5
Fonctions PHP..................................................................................................................................................... 5
Les sessions ......................................................................................................................................................... 6
PHP et MySQL ....................................................................................................................................................... 7
Fonctions PHP d’accès aux bases de données mySQL ....................................................................................... 7
Lecture de la base de données ............................................................................................................................. 7
Ecriture dans la base de données ......................................................................................................................... 9
Suppression dans la base de données .................................................................................................................. 9
Exercices ........................................................................................................................................................... 10
2
Internet et applications dans l’entreprise
O. Auzende
PHP
PHP est un langage de scripts destiné à l’écriture d’applications Web. Les noms de fichiers attribués aux fichiers
contenant des scripts PHP ont pour extension .php qui permet à l’interpréteur PHP de les reconnaître et de les
exécuter immédiatement.
Sur une machine individuelle, avec Apache utilisable en hôte local, les fichiers PHP se mettent dans le même
répertoire que les pages HTML, donc généralement httpd/htdocs (sous Linux) ou www (easyPHP sous
Windows).
L’adresse fournie au navigateur pour l’affichage d’une page PHP est, pour les deux systèmes d’exploitation,
http://localhost/page.php
Si cette page contient un formulaire, l’appel à la page PHP devant traiter ce formulaire se fait par :
<form method="get"/"post" action="page.php" >
Balises PHP
Le code PHP est encadré par des balises PHP.
Styles de balise PHP :
<?php
... Code PHP ... ?>
o Les balises par défaut :
o
Les balises <script>:
<SCRIPT LANGUAGE="php">...Code PHP ...</SCRIPT>
Les balises d’ouverture courtes :
<?
... Code PHP ... ?> (à éviter avec PHP 5)
o
Quand l’interpréteur PHP rencontre la balise d’ouverture, il interprète tous les caractères rencontrés jusqu’à ce
qu’il trouve la balise de fermeture. Le script est alors exécuté et remplacé par le résultat qu’il produit.
Variables, formatage des données, structures de contrôle
o
o
o
o
o
Les variables du langage sont représentées par un identificateur précédé du signe $, quel que soit le type de
la variable : nombre (valeur numérique), chaîne de caractères, tableau, objet composite.
Pour créer des variables avec PHP, il suffit d’en faire usage. Il est donc inutile de les déclarer.
Si la variable $x représente un tableau avec un index numérique, on accède aux éléments individuels par la
spécification $x[0], $x[1], etc.
Si la variable $x représente un tableau avec un index associatif (un type énuméré tel que ("lundi", "mardi",
"mercredi", etc.), on accède aux éléments individuels par la spécification $x["lundi"], $x["mardi"], etc.
Les tableaux PHP peuvent avoir un index mixte (associatif et numérique). Ainsi, les éléments $x["lundi"] et
$x[1] peuvent appartenir au même tableau.
Page jours.php
<html>
<head>
<title>utilisation de tableau en PHP</title>
</head>
<body>
<p>Jours de la semaine en fran&ccedil;ais et en anglais</p>
<?php
$tab[1]="lundi"; $tab[2]="mardi"; $tab[3]="mercredi"; $tab[4]="jeudi";
$tab[5]="vendredi"; $tab[6]="samedi"; $tab[7]="dimanche";
$tab["lundi"]="monday"; $tab["mardi"]="tuesday";
$tab["mercredi"]="wednesday"; $tab["jeudi"]="thursday";
$tab["vendredi"]="friday"; $tab["samedi"]="saturday";
$tab["dimanche"]="sunday";
echo "<table border='1'>\n";
for ($i = 1; $i < 8 ; $i++) {
echo "<tr><td>",$tab[$i],"</td><td>",$tab[$tab[$i]],"</td></tr>";
}
echo "</table>";
?>
</body>
</html>
3
Avec des instructions d’affichage différentes :
Page jours2.php
<html>
<head><title>utilisation de tableau en PHP</title></head>
<body>
<p>Jours de la semaine en fran&ccedil;ais et en anglais</p>
<?php
$tab[1]="lundi"; $tab[2]="mardi"; $tab[3]="mercredi"; $tab[4]="jeudi";
$tab[5]="vendredi"; $tab[6]="samedi"; $tab[7]="dimanche";
$tab["lundi"]="monday"; $tab["mardi"]="tuesday";
$tab["mercredi"]="wednesday"; $tab["jeudi"]="thursday";
$tab["vendredi"]="friday"; $tab["samedi"]="saturday";
$tab["dimanche"]="sunday";
echo "<table border='1'>\n";
for ($i = 1; $i < 8 ; $i++) {
printf("<tr><td>%s</td><td>%s</td></tr>",$tab[$i],$tab[$tab[$i]]);
}
echo "</table>";
?>
</body>
</html>
Les chaînes de formatage permettent de préciser comment les divers éléments doivent être affichés :
printf("chaîne de formatage", éléments à afficher) ;
Les structures de contrôle sont :
if (test) { ... } else { ...}
for (initialisation ; test ; incrémentation) { ... }
while (test) { ... }
do { ... } while (test);
Tirages aléatoires
Page comptes.php
<html>
<head><title>Entiers aleatoires</title></head>
<body>
<p>Je tire 100 entiers au hasard entre 1 et 100.<p>
<?php
$compteur1 = 0 ;
$compteur2 = 0 ;
for ($i=0; $i<100; $i++) {
srand((double)microtime()*1000000);
$randval = rand(1,100);
if ($randval > 50) {
$compteur1++ ;
}
else {
$compteur2++;
}
}
printf("Sur 100 tirages, il y a : <br>- %d entiers sup&eacute;rieurs
&agrave; 50 <br>- %d entiers inf&eacute;rieurs ou egaux &agrave; 50.",
$compteur1, $compteur2);
?>
</body>
</html>
Exercice
Ecrire une page PHP qui remplit un tableau $tab avec 50 entiers aléatoires compris entre 1 et 100 et fait afficher
ces 50 entiers, séparés par des tirets.
Ajouter ensuite le calcul de la somme des éléments du tableau, puis de leur moyenne, puis la recherche du plus
grand élément et celle du plus petit élément du tableau.
4
Internet et applications dans l’entreprise
O. Auzende
Variables provenant d'un formulaire
On récupère les valeurs des variables par $_GET["nom"] ou $_POST["nom"] selon la méthode de
transmission des arguments employée.
Page formulaire2.html
<html>
<head><title>Variables de formulaire</title></head>
<body>
<form action="valeurs.php" method="get">
<table>
<tr><td>Nom :</td><td><input type="text" name="nom"></td></tr>
<tr><td>Prenom : </td><td><input type="text" name="prenom"></td></tr>
<tr><td>Ordinateur : </td>
<td><select name="ordinateur">
<option value="pc">PC</option>
<option value="mac">MAC</option>
<option value="sun">Station Sun</option>
<option value="autre">Autre</option>
</select></td></tr></table>
<input type="submit" value="Valider">
</form>
</body>
</html>
Page valeurs.php
<html>
<head><title>R&eacute;cup&eacute;ration des valeurs des variables</title></head>
<body>
<p>Vous avez donn&eacute; comme renseignements :</p>
<table>
<?php
$nom=$_GET["nom"]; echo "<tr><td>Nom : </td><td>$nom</td></tr>" ;
$prenom=$_GET["prenom"]; echo "<tr><td>Pr&eacute;nom :</td>
<td>$prenom</td></tr>" ;
$ordinateur=$_GET["ordinateur"];
echo "<tr><td>Ordinateur : </td><td>$ordinateur</td></tr>";
?>
</table>
</body>
</html>
Fonctions PHP
Page carres.php
<html>
<head><title>fonctions</title></head>
<body>
<?php
function carre ($num) {
return $num * $num;
}
function cube($num) {
return $num * $num * $num ;
}
?>
<p>Carr&eacute;s et cubes des nombres entiers de 1 &agrave; 10</p>
<?php
echo "<table border='1'>";
for ($i=1;$i<=10;$i++){
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>", $i, carre($i),
cube($i)) ;
}
echo "</table>";
?>
</body>
</html>
Les fonctions sont égnéralement déclarées dans un fichier externe que l’on inclut dans des pages PHP par un
script : <?php include "fichier.php" ; ?>
5
Les sessions
Une session permet de suivre un utilisateur pendant la durée de sa connexion à un site. La variable $_SESSION
est stockée sur le serveur pendant environ 30 minutes et permet de mémoriser des renseignements concernant le
visiteur. Exemple : page indexsession.html de connexion à un site demandant des renseignements à un visiteur :
Page indexsession.html
<html>
<head><title>Connexion au site</title></head>
<body>
<form method="post" action="creeSession.php">
<table border="0" width="400" align="center">
<tr><td width="200"><b>Votre pseudo<b></td>
<td width="200"><input type="text" name="pseudo"></td></tr>
<tr><td width="200"><b>Votre mail<b></td>
<td width="200"><input type="text" name="email"></td></tr>
<tr><td colspan="2">
<input type="submit" name="submit" value="Entrer"></td></tr>
</table>
</form>
</body>
</html>
La page creeSession.php initialise la session et y mémorise le pseudo et le mail :
Page creeSession.php
<?php
// On démarre la session
session_start();
// On vérifie que les informations ont été effectivement données
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['email'])) ) {
extract($_POST);
$_SESSION['pseudo'] = $pseudo;
$_SESSION['email'] = $email;
echo "Vous &ecirc;tes &agrave; pr&eacute;sent connect&eacute; au site";
?>
<form method="post" action="retrouve.php">
<input type="submit" value="Voir votre profil">
</form>
La page retrouve.php permet, dans une autre page, de retrouver les informations à partir de la session :
Page retrouve.php
<?php
// On appelle la session
session_start();
// On affiche une phrase résumant les infos sur l'utilisateur courant
echo "Pseudo : "; echo $_SESSION['pseudo']; echo "<br />";
echo "Email : "; echo $_SESSION['email']; echo "<br />";
?>
<form method="post" action="deconnect.php">
<input type="submit" value="Se d&eacute;connecter">
</form>
La page deconnect.php permet de vider l’objet $_SESSION sur le serveur.
Page deconnect.php
<?php
// On appelle la session
session_start();
// On écrase le tableau de session
$_SESSION = array();
// On détruit la session
session_destroy();
?>
Fin de connexion.
6
Internet et applications dans l’entreprise
O. Auzende
PHP et MySQL
Fonctions PHP d’accès aux bases de données mySQL
La fonctions PHP mysql_connect() reçoit en argument le nom d’une machine hôte, le nom d’un utilisateur et
son mot de passe. Son rôle est d’établir la connexion. Elle renvoie un identificateur de lien si la connexion a pu
être établie et FALSE si une erreur s’est produite.
La fonction mysql_select_db() permet de sélectionner une base de données particulière.
La fonction mysql_query() transmet une requête SQL au serveur pour qu’il l’exécute. En cas de succès, elle
renvoie l’identificateur d’un ensemble résultat, en l’occurrence une sous-table (virtuelle).
Les fonctions le plus souvent utilisées
mysql_connect :
mysql_select_db :
mysql_create_db :
mysql_drop_db :
mysql_query :
mysql_fetch_array :
mysql_fetch_row :
mysql_result :
mysql_insert_id() :
mysql_close :
Ouvre une connexion à un serveur MySQL.
Sélectionne une base de données MySQL.
Crée une base de données MySQL.
Efface une base de données MySQL.
Envoie une requête SQL à un serveur MySQL.
Retourne une ligne de résultat sous la forme d'un tableau associatif.
Retourne une ligne de résultat sous la forme d'un tableau.
Retourne un champ d'un résultat.
Ramène le dernier identificateur attribué.
Ferme la connexion MySQL.
Lecture de la base de données
A l’aide du fichier mydb.dump, créer et remplir la base de données mySQL mydb :
mysqladmin –u root create mydb
mysql –u root mydb < mydb.dump
Pour se connecter à la base, on définit un fichier mémorisant les paramètres de connexion. On inclut ensuite ce
fichier dans toute page PHP faisant appel à la base.
Fichier connexion.php
<?php
$host="localhost";
$login="root";
$base="mydb";
?>
Fichier lecture1.php : lecture des enregistrements lus en tableau à indice numérique
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
$result=mysql_query("SELECT * FROM employes",$db);
echo "<table border=1>\n";
echo "<tr><td>Prenom</td><td>Nom</td><td>Adresse</td><td>Service</td></tr>\n";
while ($lignes=mysql_fetch_row($result)) {
printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
$lignes[1],$lignes[2],$lignes[3],$lignes[4]);
}
echo "</table>\n";
?>
</body>
</html>
7
Lecture de la table employes en tableau associatif et test préalable si résultat vide :
Fichier lecture2.php
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
$result=mysql_query("SELECT * FROM employes",$db);
if ($lignes=mysql_fetch_array($result)) {
echo "<table border=1>\n";
echo "<tr><td>Prenom</td><td>Nom</td><td>Adresse</td>
<td>Service</td></tr>\n";
do {
printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
$lignes["prenom"],$lignes["nom"],$lignes["adresse"],
$lignes["service"]);
}
while ($lignes=mysql_fetch_array($result));
echo "</table>\n";
}
else
{echo "table vide";}
?>
</body>
</html>
Fichier interrogation.php : lecture ciblée
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
?>
<form method="post" action="lecture3.php">
Salari&eacute; : <select name="id">
<?php
$result=mysql_query("SELECT * FROM employes",$db);
if ($lignes=mysql_fetch_array($result)) {
do
{
printf("<option value=%s>%s</option>",$lignes["id"],$lignes["nom"]);
}
while ($lignes=mysql_fetch_array($result));
}
?>
</select><br />
<input type="submit" value="OK">
</form>
</body>
</html>
Fichier lecture3.php : réponse
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
$id=$_POST["id"];
if ($id) {
$result=mysql_query("SELECT * FROM employes WHERE id=$id",$db);
$lignes=mysql_fetch_array($result);
printf("Prenom : %s<br>",$lignes["prenom"]);
printf("Nom : %s<br>",$lignes["nom"]);
}
else {echo "pas de reponse";}
?>
</body>
</html>
8
Internet et applications dans l’entreprise
O. Auzende
Ecriture dans la base de données
Fichier ecriture.php : formulaire de demande d’insertion
<html>
<body>
<?php
include "connexion.php";
?>
<form method="get" action="ecriture1.php">
<table>
<tr><td>Nom :</td> <td><input type="text" name="nom"></td></tr>
<tr><td>Prenom :</td><td><input type="text" name="prenom"></td>
</tr>
<tr><td>Adresse :</td>
<td><input type="text" name="adresse"></td></tr>
<tr><td>Service :</td><td>
<select name="service">
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
$result=mysql_query("SELECT service FROM employes",$db);
if ($lignes=mysql_fetch_array($result)) {
do
{
printf("<option value=%s>%s</option>",
$lignes["service"],$lignes["service"]);
}
while ($lignes=mysql_fetch_array($result));
}
?>
</select></td></tr>
</table>
<input type="submit" name="submit" value="OK">
</form>
</body>
</html>
Fichier ecriture1.php : réponse (insertion effective)
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$submit=$_GET["submit"];
if ($submit) {
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
$prenom=$_GET["prenom"];
$nom=$_GET["nom"];
$adresse=$_GET["adresse"];
$service=$_GET["service"];
$sql="INSERT INTO employes (prenom, nom, adresse, service) VALUES
('$prenom','$nom','$adresse','$service')";
$result=mysql_query($sql);
echo "enregistrement effectue";
}
?>
</body>
</html>
Suppression dans la base de données
La page suppression.php demande le numéro de l'employé à supprimer, puis la page suppression1.php
supprime effectivement cet employé dans la table employes.
Fichier suppression.php : formulaire de demande de suppression
<html><body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
?>
9
<form method="get" action="suppression1.php">
Salari&eacute; &agrave; supprimer :
<select name="id">
<?php
$result=mysql_query("SELECT * FROM employes",$db);
if ($lignes=mysql_fetch_array($result)) {
do {
printf("<option value=%s>%s</option>",$lignes["id"],$lignes["nom"]);
}
while ($lignes=mysql_fetch_array($result));
}
?>
</select><br />
<input type="submit" value="OK">
</form>
</body>
</html>
Fichier suppression1.php : réponse (suppression effective)
<html>
<body>
<?php
include "connexion.php";
?>
<?php
$db=mysql_connect($host,$login);
mysql_select_db($base,$db);
?>
<?php
$id=$_GET["id"];
if ($id) {
$sql="DELETE FROM employes WHERE id=$id";
$result=mysql_query($sql);
echo "Employe supprime";
}
?>
</body>
</html>
Exercices
Le fichier baseqcm.dump vous est fourni. Il commence ainsi :
CREATE TABLE categories (num tinyint(2) NOT NULL AUTO_INCREMENT, intitule varchar(30), PRIMARY
KEY(num), UNIQUE id(num));
INSERT INTO categories VALUES(1, 'technique');
INSERT INTO categories VALUES(2, 'culture');
INSERT INTO categories VALUES(3, 'utilisation');
CREATE TABLE questions (num tinyint(4) NOT NULL AUTO_INCREMENT, categorie tinyint(2), texte
varchar(250), PRIMARY KEY(num), UNIQUE id(num));
CREATE TABLE reponses (num tinyint(5) NOT NULL AUTO_INCREMENT, question tinyint(4), texte
varchar(100), qualite tinyint(2), PRIMARY KEY(num), UNIQUE id(num));
INSERT INTO questions VALUES(1, 1, 'La memoire centrale :');
INSERT INTO reponses VALUES(1, 1, 'se vide lorsqu\'on arrete l\'ordinateur', 3);
INSERT INTO reponses VALUES(2, 1, 'conserve les donnees indefiniment', -1);
INSERT INTO reponses VALUES(3, 1, 'transfere les donnees sur le disque dur avant de se vider',
-1);
INSERT INTO reponses VALUES(4, 1, 'ne se vide jamais', -1);
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
questions VALUES(2, 1, 'Dans la mémoire centrale, on stocke :');
reponses VALUES(5, 2, 'les programmes et les donnees', 3);
reponses VALUES(6, 2, 'les programmes seulement', -1);
reponses VALUES(7, 2, 'les donnees seulement', -1);
reponses VALUES(8, 2, 'Windows', -1);
INSERT
INSERT
INSERT
INSERT
INSERT
...
INTO
INTO
INTO
INTO
INTO
questions VALUES(3, 1, 'Une disquette est :');
reponses VALUES(9, 3, 'une memoire remanente', 3);
reponses VALUES(10, 3, 'une memoire volatile', -1);
reponses VALUES(11, 3, 'une memoire permanente', -1);
reponses VALUES(12, 3, 'une memoire rapide', -1);
Placez ce fichier dans le dossier C:\Program Files\easyPHP1-8\mysql\bin
10
Internet et applications dans l’entreprise
O. Auzende
Allez dans ce dossier avec une fenêtre d’invite de commandes.
Créez la base baseqcm par la commande : mysqladmin –u root create baseqcm
Le remplissage de la base se fait alors par : mysql –u root baseqcm < baseqcm.dump
Interrogation de la base
Pour interroger votre base de données en mode interactif, lancez le programme mySQL par la commande :
mysql -u root
mysql affiche alors un prompt spécifique indiquant que l’interpréteur attend les requêtes.
Tapez successivement :
connect baseqcm;
show tables;
select * from categories;
select * from questions;
select * from reponses;
pour vous connecter à votre base
pour vérifier que les tables de votre base ont bien été créées
pour voir le contenu des tables
Vous pouvez maintenant tester des requêtes. Faites exécuter les requêtes suivantes et notez-en le texte :
- nombre de questions de la première catégorie :
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
- textes des questions de la première catégorie :
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
- textes et réponses des questions de la première catégorie :
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………….
Quittez ensuite l’interpréteur par quit;
Génération de QCM
1) Générer la page questions.php comportant les questions de la base et les réponses associées :
11
2) Modifier cette page en y introduisant un formulaire (method="post" et action="reponse.php") et en faisant
apparaître des boutons radio devant chaque réponse.
Le nom de la variable associée aux boutons radio correspondant aux réponses à la question 1 sera par exemple
"q1", celui de la variable associée aux boutons radio des réponses à la question 2 sera "q2", etc.
3) Modifier encore cette page en faisant apparaître, pour chaque question, les réponses dans le désordre.
Pour cela, initialiser un générateur de nombres aléatoires par la fonction srand(); tester la fonction shuffle
permettant de permuter les éléments d'un tableau.
4) Ecrire la page reponse.php calculant le score réalisé par l’utilisateur lorsqu’il valide le formulaire de la page
questions.php.
5) Ajout de catégorie
Ecrire la page insercategorie.php ci-contre qui affiche
les catégories existantes et demande le nom d’une
nouvelle catégorie.
Le formulaire fera appel comme action au fichier
insertioncategorie.php avec la méthode POST.
Ecrire ensuite la page réponse insertioncategorie.php
qui réalise l’insertion dans la base et réaffiche les
catégories existantes (ci-contre).
6) Ajout de question
Ecrire la page inserquestion.php ci-contre.
Le formulaire fera appel comme action au fichier
insertionquestion.php avec la méthode POST.
12
Internet et applications dans l’entreprise
O. Auzende
Ecrire la page insertionquestion.php qui réalise l’insertion effective de la question et des réponses dans la base.
A noter : on insère d’abord la question dans la table questions, on récupère son identificateur (son num) par la
ligne $num=mysql_insert_id() ; qui ramène le dernier identificateur attribué puis on insère les réponses dans
la table reponses. Affichage souhaité :
Ecrire enfin une page index.html proposant de générer un QCM, d’ajouter une catégorie ou d’ajouter une
question.
13