Web dynamique avec PHP et MySQL

Transcription

Web dynamique avec PHP et MySQL
Web dynamique
avec
PHP et MySQL
Programmation Internet,
IvMad, 2005-2013
1
Modèle Client Serveur

Le modèle client serveur est tripartite, c.à.d.
constitué en trois parties:
1. Client Web qui visualise le contenu des pages HTML
et JavaScript demandées au serveur Web
2. Serveur Web qui stocke l'intégralité des pages d'un
site : HTML, PHP, JSP, ASP, CGI, JavaScript
3. Serveur d'application et de base de données qui
stocke et traite la partie dynamique d'un site.
Programmation Internet, IvMad, 2005-2013
2
PHP et les BD




PHP permet un interfaçage très simple avec un
grand nombre de bases de données. Lorsqu'une
base de données n'est pas directement supportée
par PHP, il est possible d'utiliser un driver ODBC,
pilote standard pour communiquer avec la BD.
La communication avec les bases de données se
fait à l'aide de requêtes SQL, un langage reconnu
par l'ensemble des SGBDR.
Le système de gestion de bases de données
(SGBDR) MySQL est un système gratuit et rapide
fonctionnant sous Linux et Windows.
MySQL est le SGBDR le plus utilisé avec PHP sur
des serveurs Web.
Programmation Internet, IvMad, 2005-2013
3
PHP et MySQL

SGBD MySQL
– Libre ( GNU )
– Multiplateforme
– multi‐utilisateurs

Principe:
– Utilisation de requêtes SQL dans du code PHP
– API MySQL : Ensemble de fonctions PHP permettant d'accéder aux bases de données MySQL

Différences entre MySQL et le standard SGBD
– Pas de gestion des transactions
– Pas de procédure stockée ni de trigger
– Pas de vue (view)
Programmation Internet, IvMad, 2005-2013
4
Connexion à une BD

La première étape consiste à déclarer les
variables qui vont permettre la connexion à
la base de données:
–
–
–
–
$user :
$passwd :
$host :
$bdd :
Le nom d'utilisateur;
Le mot de passe;
L'hôte hébergeant le SGBD;
Le nom de la base de données.
$bdd= "mabase";
$host="mysql.univ-mrs.fr";
$user= "etude";
$pass= "12345";
Programmation Internet, IvMad, 2005-2013
5
Connexion à une BD

PHP fournit un grand choix de fonctions
permettant de manipuler les BD, dont
quatre fonctions sont essentielles :
–
–
–
–

La
La
La
La
fonction
fonction
fonction
fonction
de
de
de
de
connexion au serveur
choix de la base de données
requête
déconnexion
Avec MySQL ces fonctions sont :
–
–
–
–
mysql_connect();
mysql_select_db();
mysql_query();
mysql_close();
Programmation Internet, IvMad, 2005-2013
6
Bases de Données

Connexion à une BD (MySQL)
<?php
$bdd= "mabase";
// Base de données
$host="jumbo.univ-mrs.fr"; // Serveur
$user= "etude";
// Utilisateur
$pass= "12345";
// Mot de passe
mysql_connect($host, $user, $pass) or die
("Impossible de se connecter à la BD");
mysql_select_db($bdd);
?>
Programmation Internet, IvMad, 2005-2013
7
Requêtes SQL

La requête SQL en chaîne de caractères
$query =
"SELECT num, pays, date FROM $nomtable";

Le résultat
$result = mysql_query($query);

Traitement de l'erreur
if (mysql_error()) {
print "Erreur dans la BD: " .mysql_error();
exit();
}
Programmation Internet, IvMad, 2005-2013
8
Requêtes SQL

Créer une table dans MySQL
<?php
$user="webuser";
$password="123456";
$database="hotel";
$dbserver="mysql.iut.fr";
mysql_connect($dbserver, $user, $password);
mysql_select_db($database) or die ("BD inaccessible");
$query="CREATE TABLE reservation (id int NOT NULL
AUTO_INCREMENT PRIMARY KEY, nom varchar(25), email
varchar(20), date_arr date, date_dep date, nbjours int);";
if(mysql_query($query))
echo "Création de la table";
else
echo "échec de création!";
mysql_close();
?>
Programmation Internet, IvMad, 2005-2013
9
Requêtes SQL

Insérer des données dans une table
<?php
$nom=$_POST["nom"];
$email=$_POST["email1"];
$date_arr=$_POST["date1"]; // la date en format jj/mm/aaaa
$date_dep=$_POST["date2"];
$nbjours=$_POST["jours"];
// passer la date en format yyyy-mm-dd
$date_arr = substr($date_arr, 6, 4)."-".substr($date_arr, 3, 2)."".substr($date_arr, 0, 2);
$date_dep = substr($date_dep, 6, 4)."-".substr($date_dep, 3, 2)."".substr($date_dep, 0, 2);
$database="hotel"; $user="user"; $password=""; $dbserver="s.iut.fr";
mysql_connect($dbserver, $user, $password);
mysql_select_db($database) or die("BD inaccessible");
$query = "INSERT INTO reservation
(nom, email, date_arr, date_dep, nbjours) VALUES
('$nom','$email','$date_arr','$date_dep','$nbjours');";
$result = mysql_query($query);
if ($result) { echo "Une réservation ajoutée";
} else
echo "Il y a un problème!";
mysql_close();
?>
Programmation Internet, IvMad, 2005-2013
10
Requêtes SQL

Afficher le contenu d’une table
<?php
$database="test";
mysql_connect("mysql.iut.fr", "user", "");
mysql_select_db($database) or die ("BD inaccessible");
$result = mysql_query
("SELECT nom, email, nbjours FROM reservation");
echo '<TABLE border="1">';
Echo '<TR><TH>Nom</TH><th>Mail</TH><th>Jours</th></TR>';
while ($myrow = mysql_fetch_array($result)) {
echo "<TR><TD>"; echo $myrow["nom"];
echo "</td><td>";
echo $myrow["email"];
echo "</td><td>";
echo $myrow["nbjours"];
echo "</TD></tr>";
} echo "</TABLE>"; ?>
Programmation Internet, IvMad, 2005-2013
11
Récupération résultats

La fonction mysql_fetch_row()
array mysql_fetch_row ( $result )
– retourne un tableau qui contient tous les
champs d’une rangée de résultat (un tuple).
Chaque appel produit le tuple jusqu’à ce qu’il
n’y en ait plus (FALSE).
– La ressource $result provient de la fonction
mysql_query()
Programmation Internet, IvMad, 2005-2013
12
Récupération résultats
<?php
$result = mysql_query
("SELECT id, email FROM people WHERE id = '42'");
if (!$result) {
echo 'Requête impossible : ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // 42
echo $row[1]; // [email protected]
?>
Programmation Internet, IvMad, 2005-2013
13
Récupération résultats
while ($row = mysql_fetch_row($result))
// $result a été obtenu par le msql_query ()
{
// récupération des informations
$num = mysql_result($row[0]);
$pays = mysql_result($row[1]);
$date = mysql_result($row[2]);
print
"… ";
}
Programmation Internet, IvMad, 2005-2013
14
Fonctions utiles

État de MySql ou connaître le contenu de
MySql (show databases;):
mysql_list_dbs($connexion);

État d'une base ou la liste des tables
contenues dans une BD (show tables;)
$pointeur_resultat = mysql_list_tables
($nom_de_la_table, $pointeur_de_connexion);
Programmation Internet, IvMad, 2005-2013
15
Fonctions utiles






mysql_fetch_array() - Retourne une ligne de résultat MySQL
sous la forme d'un tableau associatif, d'un tableau indexé, ou
les deux
mysql_fetch_assoc() - Lit une ligne de résultat MySQL dans
un tableau associatif
mysql_fetch_object() - Retourne une ligne de résultat MySQL
sous la forme d'un objet
mysql_data_seek() - Déplace le pointeur interne de résultat
MySQL
mysql_fetch_lengths() - Retourne la taille de chaque colonne
d'une ligne de résultat MySQL
mysql_result() - Retourne un champ d'un résultat MySQL
Programmation Internet, IvMad, 2005-2013
16
Fonctions utiles
mysql_drop_db : Efface une base de données MySQL
mysql_errno : Retourne le numéro d'erreur de la dernière
commande MySQL
mysql_error : Retourne le texte associé avec l'erreur générée
lors de la dernière requête
mysql_escape_string : Protège une chaîne pour la passer à
mysql_query
mysql_fetch_assoc : Lit une ligne de résultat MySQL dans un
tableau associatif
mysql_fetch_field : Retourne les données enregistrées dans
une colonne MySQL sous forme d'objet






Programmation Internet, IvMad, 2005-2013
17
BD Perso Luminy
Connexion à la BD perso sans passer en claire
ses identifiants:
<?php
$link = mysql_connect (
$_SERVER['dbHost'], // le nom du serveur MySQL
$_SERVER['dbLogin'], // nom d'utilisateur MySQL
$_SERVER['dbPass']) // mot de passe associé
or die ("Impossible de se connecter : " . mysql_error() );
echo "Connexion réussie";
mysql_close($link);
?>
 Une configuration assurée par la DOSI à Luminy

Programmation Internet, IvMad, 2005-2013
18
BD Perso Luminy

Création d'une table dans votre BD perso:
<?php
$link = mysql_connect( $_SERVER['dbHost'], $_SERVER['dbLogin'], $_SERVER['dbPass'] )
or die("Impossible de se connecter : " . mysql_error());
echo 'Connexion réussie';
mysql_select_db($_SERVER['dbBd'], $link) or die( "Unable to select db");
echo 'BD selectionnée';
$query="CREATE TABLE carnet (id int, prenom varchar(25), nom varchar(20), email varchar(35), PRIMARY KEY (id))";
mysql_query($query);
echo 'Création réussie';
mysql_close($link);
?>
Programmation Internet, IvMad, 2005-2013
19
BD Perso Luminy

Insertion de données dans la table "carnet" de la BD perso
<?php $name="carnet";
$link = mysql_connect($_SERVER['dbHost'], $_SERVER['dbLogin'], $_SERVER['dbPass'])
or die("Impossible de se connecter : " . mysql_error());
echo 'Connexion réussie';
mysql_select_db($_SERVER['dbBd'], $link) or die( "Unable to select database");
$query = "INSERT INTO carnet VALUES ('1','Yves','BLANC', '[email protected]')";
$result = mysql_db_query($_SERVER['dbBd'], $query);
if ($result) { echo "<p>$name est ajouté à la base</p>";
} else { echo "<p>Il y a un problème!</p>"; }
mysql_close($link);
?>
Programmation Internet, IvMad, 2005-2013
20
BD Perso Luminy

Afficher le contenu de la table "carnet"
<?php $name="carnet";
$link = mysql_connect($_SERVER['dbHost'], $_SERVER['dbLogin'], $_SERVER['dbPass'])
or die("Impossible de se connecter : " . mysql_error());
mysql_select_db($_SERVER['dbBd'], $link) or die("Unable to select database");
$result = mysql_query("SELECT * FROM carnet",$link);
echo "<TABLE>";
echo "<TR><th>| Id </th><TH>| Prenom </TH><TH>| Nom </TH></TR>";
while ($myrow = mysql_fetch_array($result)) {
echo "<TR><TD>"; echo $myrow["| id "];
echo "</td><td>";
echo $myrow["prenom"]; echo " | </td>";
echo $myrow["nom"];
echo " | </td> </tr>";
} echo "</TABLE>";
mysql_close($link);
?>
Programmation Internet, IvMad, 2005-2013
21
PHP et les Images

Formats supportés
– JPG, GIF, PNG

Fonctionnalités
– Récupération,
– Création,
– Modification,
– Manipulation.
Programmation Internet, IvMad, 2005-2013
22
Fonctions liées aux images

Avec la bibliothèque GD
– id = getimagesize (nom de fichier)
– id = imagecreate(largeur, hauteur)
• GIF, JPG, PNG
– imagedestroy(identifiant image)
– imagefill (image, x, y, couleur)
– imagechar($image, police, x, y, "txt",
couleur)
– imagecharup ...
Programmation Internet, IvMad, 2005-2013
23
Gestion des fichiers
La fonction fopen( ) permet d'ouvrir un
fichier pour un certain mode d'utilisation:
entier fopen(chaine nomdufichier, chaine mode);
Différents modes:






r : ouverture en lecture seulement
w : ouverture en écriture seulement (la fonction crée le
fichier s'il n'existe pas)
a : ouverture en écriture seulement avec ajout du
contenu à la fin du fichier et le crée s'il n'existe pas
r+ : ouverture en lecture et écriture
w+ : ouverture en lecture et écriture (la fonction crée le
fichier s'il n'existe pas)
a+ : ouverture en lecture et écriture avec ajout du
contenu à la fin du fichier et le crée s'il n'existe pas.
Programmation Internet, IvMad, 2005-2013
24
Gestion des fichiers
Exemples :
$fp = fopen("../fichier.txt", "r"); // lecture
$fp = fopen("ftp://iut.univ.fr/pub/fichier.txt",
"w"); // écriture depuis début du fichier
$fp = fopen(http://www.nexen.com/fichier.txt,
"a"); // écriture depuis fin du fichier
Remarque:
$fp contient l'adresse du buffer d'Entrée/Sortie
Programmation Internet, IvMad, 2005-2013
25
Gestion des fichiers

File diagram des opérations sur fichiers
Programmation Internet, IvMad, 2005-2013
26
Lecture dans un fichier
$monfichier = fopen("monfichier.txt", "r") ;
if ( !($monfichier)) {
print("Impossible d’ouvrir le fichier") ;
exit ;
}
while ( !feof($monfichier) ) {
$ligne = fgets($monfichier, 255);
// 255 caractères max. ou bien fin de ligne.
print " $ligne <BR>";
}
fclose ($monfichier) ;
Programmation Internet, IvMad, 2005-2013
27
Écriture dans un fichier
< ? php // ouverture en écriture
$monFichier = fopen("monfichier.txt", "w") ;
if ( !($monfichier)) {
print("Impossible de créer le fichier \n") ;
exit ;
} // on écrit deux lignes
fputs($monfichier, "ligne 1") ;
fputs($monfichier, "ligne 2") ;
fclose($monfichier) ;
// on ferme le fichier, on libère les ressources
?>
Programmation Internet, IvMad, 2005-2013
28
Exemple de script

Réaliser un compteur dans un fichier texte.
<?php
$fic="cpt.txt";
if (!file_exists($fic)) {
print "<H3>fichier compteur manquant</H3>"; exit;}
else { $fd = fopen($fic, "w+");
$hits = fgets($fd, 10);
$hits++;
fseek($fd, 0);
fputs($fd, $hits);
fclose($fd);
print "<b><i>$hits</i></b>";
} php?>
Programmation Internet, IvMad, 2005-2013
29
Fonction Explode


Il est fréquent d’avoir des fichiers
contenant différents champs séparés par
un délimiteur quelconque.
Une fonction très utile dans ces cas là:
explode ("caractère délimiteur",
chaîne de donnée)
Roose | Philippe | 27
Goudin | David
| 28
Programmation Internet, IvMad, 2005-2013
30
Fonction Explode
<?php
if (!file_exists("test.txt")) {
print "<H3><BR>fichier manquant<BR>"; exit;
} else {
$fd = fopen($fic,"r");
while (!feof($fd)) {
$ligne = fgets($fd, 255);
$tab=explode("|",$ligne);
print "Nom : $tab[0]<br>";
print "Prénom : $tab[1]<br>";
print "Age : $tab[2]<br>";
} fclose($fd);
}
?>
Programmation Internet, IvMad, 2005-2013
31
Programmation OO

Déclaration de classe
class Personne { // attributs, méthodes
var $nom, $adresse;
function Personne($nom, $adresse, $age) {
$this->nom = $nom;
$this->adresse = $adresse;
}
function toprint() { print $this->nom; }
}
Instanciation
$p = new Personne("Jacques","Aubagne");
Référenciassions
print $p->nom;
$p->print();
Programmation Internet, IvMad, 2005-2013
32
Programmation OO

Héritage
class Cadre extends Personne {
var $poste, $salaire;
function Cadre($nom, $adresse, $poste, $salaire) {
$this->Person($nom, $adresse, $age);
$this->poste = $poste;
$this->salaire = $salaire;
}
function toprint() {
print parent::toprint();
print $this->salaire; print $this->poste;
}
}
Programmation Internet, IvMad, 2005-2013
33
Programmation OO

Exécution
$p=new Personne("Jacques","Aubagne");
echo "<p><i>la classe Personne</i></p>";
print $p->nom;
echo "<p><i>la classe Cadre</i></p>";
$c=new Cadre("Ivan", "Marseille", "MCF", "XXX");
$c->toprint();
Programmation Internet, IvMad, 2005-2013
34