Programmation MySQL/PHP - Zenk - Security

publicité
Programmation
MySQL/PHP
Programmation MySQL/PHP – p.1/19
CGI et bases de données
Principe : création de documents à partir d’une BD
MySQL se charge du stockage, de la protection des
donné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
Architecture MySQL/PHP
Prog. client
(navigateur)
Client HTTP
requêtes
requêtes
Internet
document(s)
programme SQL
serveur
Serveur
mysqld
données
HTML
Fichiers
PHP
Base
de données
Site web avec scripts PHP et MySQL
Programmation MySQL/PHP – p.3/19
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
Les principales fonctions
MySQL/PHP
mysql_pconnect (serveur, nom, passe)
établit une connexion. Si OK, renvoie un identifiant non
nul 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
La fonction
mysql_pconnect
Première fonction à appeler pour accéder à MySQL.
On lui passe le nom du serveur, le login utilisateur et le
mot de passe;
⇒ la fonction essaie de se connecter au serveur.
Si la connexion réussit: un identifiant de connexion est
renvoyé; 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
La fonction
mysql_select_db
Seconde fonction: elle sert à choisir la base sur laquelle on
travaille.
On lui passe le nom de la base, et l’identifiant de
connexion.
Le serveur place connecte dans la base choisie, sauf
si 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
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
Fonction de connexion
function 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 base
if (mysql_select_db ($base, $cnx) == 0) {
echo "Accès à $base impossible\n";
echo mysql_error($cnx);
exit;
}
// On renvoie la variable de connexion
return $cnx;
Programmation MySQL/PHP – p.9/19
La fonction mysql_query
Elle permet d’exécuter n’importe quelle commande SQL.
On lui passe le texte de la commande SQL, et
l’identifiant de connexion.
Le serveur exécute la commande, et renvoie un
identifiant 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
La fonction
mysql_fetch_object
Elle ramène une ligne d’un résultat d’une interrogation
SQL. Voici le principe (dit de « curseur »).
On exécute la requête SELECT avec mysql_query. On
récupère l’identifiant de résultat.
Le premier appel à mysql_fetch_object: renvoie la
premiè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
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
En association avec un
formulaire
<FORM ACTION="ExMyPHP2.php" METHOD=POST>
Ce formulaire vous permet d’indiquer des
paramè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
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
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
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 permet
d’exécuter l’ordre.
Programmation MySQL/PHP – p.16/19
Exemple : mise à jour de
FilmSimple
<FORM ACTION="ExMyPHP3.php" METHOD=POST>
Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"><B
Année : <INPUT TYPE=TEXT SIZE=4 MAXLENGTH=4
NAME="annee" VALUE="2000">
<P>
Nom :
<INPUT TYPE=TEXT SIZE=20 NAME="prenom">
Prénom : <INPUT TYPE=TEXT SIZE=20 NAME="nom"><B
<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
Le script PHP (1)
<?php
require ("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
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 = ’
if (isset($detruire))
$requete = "DELETE FROM FilmSimple "
. "WHERE titre=’$titre’";
$resultat = mysql_query ($requete, $connexion);
Programmation MySQL/PHP – p.19/19
Téléchargement
Study collections