programmation mysql/php - zenk - security · notre exemple script de création d’une table. #...

19
Programmation MySQL/PHP Programmation MySQL/PHP – p.1/19

Upload: phamduong

Post on 29-Aug-2018

226 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

ProgrammationMySQL/PHP

Programmation MySQL/PHP – p.1/19

Page 2: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

CGI et bases de donnéesPrincipe : création de documents à partir d’une BD

MySQL se charge du stockage, de la protection desdonnées, de l’interface SQL

PHP :

extrait des données et les met en forme

reçoit des données et les stocke

Le navigateur fournit l’interface graphique

Architecture à trois pôles, à la sauce Web

Programmation MySQL/PHP – p.2/19

Page 3: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Architecture MySQL/PHP

de donnéesBaseFichiers

PHP

requêtes

Internet document(s)

HTML

requêtesprogrammeserveur

Serveur mysqld

SQL

données(navigateur)

Site web avec scripts PHP et MySQL

Client HTTP

Prog. client

Programmation MySQL/PHP – p.3/19

Page 4: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Notre exemple

Script de création d’une table.

# Création d’une table ’FilmSimple’

CREATE TABLE FilmSimple(titre VARCHAR (30),

annee INTEGER,nomMES VARCHAR (30),prenomMES VARCHAR (30),anneeNaiss INTEGER

);

Programmation MySQL/PHP – p.4/19

Page 5: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Les principales fonctionsMySQL/PHP

mysql_pconnect (serveur, nom, passe)établit une connexion. Si OK, renvoie un identifiant nonnul cnx

mysql_select_db(base, cnx)se place dans une base et renvoie vrai si OK

mysql_query (requete, cnx)exécute une requête et renvoie un identifiant

mysql_fetch_object (resultat)renvoie la ligne suivante sous forme d’objet

Programmation MySQL/PHP – p.5/19

Page 6: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

La fonctionmysql_pconnect

Première fonction à appeler pour accéder à MySQL.

On lui passe le nom du serveur, le login utilisateur et lemot de passe;⇒ la fonction essaie de se connecter au serveur.

Si la connexion réussit: un identifiant de connexion estrenvoyé; sinon la fonction renvoie 0;

L’identifiant doit ensuite être utilisé pour tous les appelsà MySQL

Essentiel: bien tester la valeur retournée. Si elle vaut 0, il y

a un problème.Programmation MySQL/PHP – p.6/19

Page 7: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

La fonctionmysql_select_db

Seconde fonction: elle sert à choisir la base sur laquelle ontravaille.

On lui passe le nom de la base, et l’identifiant deconnexion.

Le serveur place connecte dans la base choisie, saufsi l’utilisateur n’a pas les droits.

La fonction renvoie 0 si la connexion à la base échoue,ou un nombre non nul sinon.

Noter: connexion à MySQL en deux étapes, le serveur puis

la base.Programmation MySQL/PHP – p.7/19

Page 8: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Exemple de connexion

$cnx = mysql_pconnect ("localhost","rigaux", "toto");

if ($cnx == 0) {echo "Connexion à localhost impossible";exit;

}

if (mysql_select_db ("mabase", $cnx) == 0){

echo "Accès à " . BASE . " impossible\n";exit;

}

Mieux vaut isoler cette partie de code dans une fonction.

Programmation MySQL/PHP – p.8/19

Page 9: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Fonction de connexionfunction Connexion ($nom, $passe,

$base, $serveur){

// Connexion au serveur$cnx = mysql_pconnect ($serveur,

$nom, $passe);if ($cnx == 0) {

echo "Connexion à $serveur impossible\n";exit;

}// Connexion à la baseif (mysql_select_db ($base, $cnx) == 0) {

echo "Accès à $base impossible\n";echo mysql_error($cnx);exit;

}// On renvoie la variable de connexionreturn $cnx;

}Programmation MySQL/PHP – p.9/19

Page 10: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

La fonction mysql_query

Elle permet d’exécuter n’importe quelle commande SQL.

On lui passe le texte de la commande SQL, etl’identifiant de connexion.

Le serveur exécute la commande, et renvoie unidentifiant de résultat.

La fonction renvoie 0 si la commande échoue.

Noter: la fonction mysql_error permet de récupérer le texte

du message d’erreur au besoin.

Programmation MySQL/PHP – p.10/19

Page 11: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

La fonctionmysql_fetch_object

Elle ramène une ligne d’un résultat d’une interrogationSQL. Voici le principe (dit de « curseur »).

On exécute la requête SELECT avec mysql_query. Onrécupère l’identifiant de résultat.

Le premier appel à mysql_fetch_object : renvoie lapremière ligne du résultat sous forme d’objet.

Chaque nouvel appel renvoie la ligne suivante.

Si la fonction renvoie 0, c’est terminé.

On boucle jusqu’à ce que mysql_fecth_object renvoie 0.Programmation MySQL/PHP – p.11/19

Page 12: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Application ( ExMyPHP1.php)

$resultat =mysql_query ("SELECT * FROM FilmSimple",

$connexion);

if ($resultat != 0) {while($film =

mysql_fetch_object ($resultat)){

echo "$film->titre, ". "paru en $film->annee, ". "réalisé par $film->nomMES.<BR>";

}}else

echo "Erreur rencontrée: ". mysql_error($connexion);

Programmation MySQL/PHP – p.12/19

Page 13: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

En association avec unformulaire

<FORM ACTION="ExMyPHP2.php" METHOD=POST>

Ce formulaire vous permet d’indiquer desparamètres pour la recherche de films :<P>Titre : <INPUT TYPE=TEXT SIZE=20

NAME=’titre’ VALUE=’%’><BR><P>Année début : <INPUT TYPE=TEXT SIZE=4

NAME=’anMin’ VALUE=1900>Année fin : <INPUT TYPE=TEXT SIZE=4

NAME=’anMax’ VALUE=2100><P>

<INPUT TYPE=SUBMIT VALUE=’Rechercher’></FORM>

Programmation MySQL/PHP – p.13/19

Page 14: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Le script PHP (1)

require ("Connect.php");require ("Connexion.php");

// On récupère les paramètres$titre=$_REQUEST[’titre’];$anMin=$_REQUEST[’anMin’];$anMax=$_REQUEST[’anMax’];

echo "Titre = $titre ". " Annnée début = $anMin ". "Année fin=$anMax<HR>";

// On crée la requête$requete = "SELECT * FROM FilmSimple "

. "WHERE titre LIKE ’$titre’ "

. "AND annee BETWEEN $anMin and $anMax";

Programmation MySQL/PHP – p.14/19

Page 15: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Le script PHP ( ExForm2.html)

// On se connecte$connexion =

Connexion (NOM, PASSE, BASE, SERVEUR);

// On exécute la requête$resultat =

mysql_query ($requete, $connexion);

while ($film =mysql_fetch_object ($resultat))

{echo "$film->titre, paru en $film->annee, "

. " réalisé par $film->prenomMES "

. " $film->nomMES.<BR>\n";}

Programmation MySQL/PHP – p.15/19

Page 16: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Mise à jour de la base

On utilise un formulaire de saisie, et on déclenche:

Un ordre INSERT pour des insertions

Un ordre UPDATE pour une modification

Un ordre DELETE pour une destruction

Dans tous les cas la fonction mysql_query permetd’exécuter l’ordre.

Programmation MySQL/PHP – p.16/19

Page 17: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Exemple : mise à jour deFilmSimple

<FORM ACTION="ExMyPHP3.php" METHOD=POST>

Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"><BR>Année : <INPUT TYPE=TEXT SIZE=4 MAXLENGTH=4

NAME="annee" VALUE="2000"><P>Nom : <INPUT TYPE=TEXT SIZE=20 NAME="prenom"><BR>Prénom : <INPUT TYPE=TEXT SIZE=20 NAME="nom"><BR>

<H1>Votre choix</H1><INPUT TYPE=SUBMIT VALUE=’Insérer’

NAME=’inserer’ ><INPUT TYPE=SUBMIT VALUE=’Modifier’

NAME=’modifier’ ><INPUT TYPE=SUBMIT VALUE=’Détruire’

NAME=’detruire’ ></FORM>

Programmation MySQL/PHP – p.17/19

Page 18: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Le script PHP (1)

<?phprequire ("Connect.php");

// Test du type de mise à jour effectuée

if (isset($inserer))echo "Insertion du film $titre";

elseif (isset($modifier))echo "Modification du film $titre";

elseif (isset($detruire))echo "Destruction du film $titre";

Programmation MySQL/PHP – p.18/19

Page 19: Programmation MySQL/PHP - Zenk - Security · Notre exemple Script de création d’une table. # Création d’une table ’FilmSimple’ CREATE TABLE FilmSimple (titre VARCHAR (30),

Le script PHP ( ExForm3.html)

if (isset($inserer))$requete =

"INSERT INTO FilmSimple (titre, annee, ". "prenomMES, nomMES, anneeNaiss) ". "VALUES (’$titre’, $annee, ". "’$nom’, ’$prenom’, $anneeNaiss) ";

if (isset($modifier))$requete =

"UPDATE FilmSimple SET annee=$annee, ". "prenomMES = ’$prenom’, nomMES=’$nom’, ". "anneeNaiss=$anneeNaiss WHERE titre = ’$titre’

if (isset($detruire))$requete = "DELETE FROM FilmSimple "

. "WHERE titre=’$titre’";

$resultat = mysql_query ($requete, $connexion);

Programmation MySQL/PHP – p.19/19