techniques internet de base 2006-2007

30
Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA [email protected]

Upload: cheri

Post on 10-Jan-2016

22 views

Category:

Documents


0 download

DESCRIPTION

Techniques Internet de Base 2006-2007. Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA [email protected]. Accès à MySQL avec PHP. Etapes. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Techniques Internet de Base 2006-2007

Techniques Internet de Base2006-2007

Licence 2 (Info, Maths, PC/PA)Université Jean Monnet

Ruggero G. [email protected]

Page 2: Techniques Internet de Base 2006-2007

Accès à MySQL avec PHP

Page 3: Techniques Internet de Base 2006-2007

Etapes

L'accès à une base MySQL et son utilisation, qu'il s'agisse d'insérer, de modifier ou de lire des données, suit les étapes ci-dessous :

1. Connexion au serveur MySQL

2. Envoi de requêtes SQL au serveur Insertion de données dans la base Recherche dans la base

3. Lecture du résultat d'une requête

4. Fermeture de la connexion

Page 4: Techniques Internet de Base 2006-2007

Connexion au serveur MySQL

Avant toute chose, le script doit permettre de se connecter au serveur MySQL.

La fonction à utiliser est mysql_connect()

Syntaxe : $res=mysql_connect($host,$user,$pass[,$multi]);

Paramètres : $host : le nom du serveur $user : le nom de l'utilisateur $pass : mot de passe de l'utilisateur $multi : nombre de connexion ouvertes à partir du même

script avec les mêmes paramètres

Page 5: Techniques Internet de Base 2006-2007

Quelques conseils

La fonction retourne une variable de type resource qui est un identifiant de connexion.

$res a la même fonction que l'$id retourné par fopen()

$host est souvent identifié avec le serveur web, c.a.d. "localhost"

Il faut éviter d'utiliser l'utilisateur root pour les opération de lecture/écriture courantes dans la base

Exemple : $res=mysql_connect("192.168.0.14", "dbuser", "aX34p0Zl");

Page 6: Techniques Internet de Base 2006-2007

Paramètres de connexion

Par mesure de sécurité il peut être utile de placer les valeurs des paramètres de connexion dans un fichier séparé

Le fichier peut être inclus dans les scripts d'accès à la base de données à travers la fonction include()

Exemple : parametres.inc.php<?phpdefine("MONHOST","localhost");define("MONUSER","root");defint("MOTDEPASSE","Az01x4oP");?>

Page 7: Techniques Internet de Base 2006-2007

Sélection de la base de données

Si le serveur comporte plusieurs bases de données, on doit préciser la base désirée au moyen de la fonction mysql_select_db();

Syntaxe : mysql_select_db($nombase,$res);

Exemple : $res=mysql_connect(...); mysql_select_db("mabase",$res);

La fonction retourne FALSE si la base de données n'existe pas

Page 8: Techniques Internet de Base 2006-2007

Fermeture de la connexion

La connexion établie prend fin automatiquement quand le script PHP est terminé

Il est recommandé de mettre fin à la connexion explicitement dès que possible de façon à liberer le serveur MySQL

Cette précaution améliore la vitesse des connexions des autres utilisateurs

Pour mettre fin à la connexion, il faut utiliser la fonction mysql_close()

Syntaxe : mysql_close($res);

Page 9: Techniques Internet de Base 2006-2007

Exemple de connexion à une base

<?phpinclude_once("parametres.inc.php");$idcom=@mysql_connect(MONHOST,MONUSER,MOTDEPASSE);$idbase=@mysql_select_db("mabase");if(!$idcom | !$idbase){ echo "<script type=text/javascript>";

echo "alert('Connexion Impossible à la base $base')</script>";}

//***************// Requêtes SQL//***************mysql_close($idcom);?>

Page 10: Techniques Internet de Base 2006-2007

Fonction de connexion

Fichier connexion.inc.php<?phpfunction connexion($base,$param){

include_once($param.".inc.php");$idcom=@mysql_connect(MYHOST,MYUSER,MYPASS);$idbase=@mysql_select_db($base);if(!$idcom | !$idbase){

echo "<script type=text/javascript>";echo "alert('Connexion Impossible à la base $base')</script>";

}return $idcom;

}?>

Page 11: Techniques Internet de Base 2006-2007

Utilisation de connexion.inc.php

Dans chaque script qui accède à une base de données on pourra ajouter les lignes suivantes avant toute requête

include("connexion.inc.php"); $idcom=connexion("mabase","parametres");

Page 12: Techniques Internet de Base 2006-2007

Envoi de requêtes SQL au serveur

Toute opération sur une base nécessite d'envoyer au serveur une requête SQL rédigée selon la syntaxe vue dans le cours précédent

Pour envoyer une requête, il faut utiliser la fonction mysql_query()

Syntaxe $result=mysql_query($requete, $res);

Paramètres : $requete : chaîne contenant la requête SQL $res : id de la connexion

Page 13: Techniques Internet de Base 2006-2007

Résultats d'une requête

La fonction retourne un identifiant de résultat de type resource

Si la requête contient des commandes SELECT, cet identifiant permet d'accéder aux données fournies par la requête

Pour les autres requêtes, la fonction retourne TRUE si la requête est bien exécutée

Si une requête quelconque n'est pas exécutée la fonction mysql_query() retourne FALSE

Page 14: Techniques Internet de Base 2006-2007

Exemple d'envoi de requête

<?phpinclude("connexion.inc.php");$idcom=connexion("mabase","parametres");$requete="SELECT * FROM album ORDER BY nom";$result=@mysql_query($requete,$idcom);if(!$result){

echo "Lecture impossible";}else{

//Lecture des résultats éventuels}?>

Page 15: Techniques Internet de Base 2006-2007

Lecture du résultat d'une requête Pour lire le résultat d'une requête contenant la

commande SELECT, il est indispensable de recueillir les données

Le résultat d'une requête peut être traité comme un tableau

La fonction mysql_fetch_row() récupere une ligne à la fois

Syntaxe $arrayres=mysql_fetch_row($idresult);

La fonction retourne un tableau (numérique) contenant autant d'éléments qu'il y a de colonnes précisées dans la requête SELECT

Chaque nouvel appel de la fonction retourne la ligne suivante du résultat, où FALSE s'il n'y a plus de ligne à lire

Page 16: Techniques Internet de Base 2006-2007

Nombre de lignes et colonnes d'un résultat

La fonction mysql_num_fields($idresult) retourne le nombre de colonnes du résultat

La fonction mysql_num_rows($idresult) permet de connaitre le nombre de lignes du résultat

Page 17: Techniques Internet de Base 2006-2007

Libération de la mémoire

Une fois les données utilisées, il est possible de libérer la mémoire occupée par la variable $idresult en appelant la fonction mysql_free_result($idresult)

Page 18: Techniques Internet de Base 2006-2007

Exemple (tableau numérique) 1

<html><head><title>Lecture de la table article</title></head><body><?phpinclude("connexion.inc.php");$idcom=connex("mabase","parametres");$requete="SELECT artist.name, album.name, label.name,

album.year FROM artist, album, label WHERE artist.id=album.artist_id AND album.label_id=label.id";

$result=@mysql_query($requete,$idcom);if(!$result){

echo "Lecture impossible";}

Page 19: Techniques Internet de Base 2006-2007

Exemple (tableau numérique) - 2else{

$nbart=mysql_num_rows($result);echo "<h3> Il y a $nbart albums</h3>";echo "<table border=\"1\"> <tr>";while($ligne=mysql_fetch_row($result)){ echo "<tr>";

foreach ($ligne as $valeur) {

echo "<td>".$valeur."</td>"; } echo "</tr>";}echo "</table>";mysql_free_result($result);

}?></body></html>

Page 20: Techniques Internet de Base 2006-2007

Lecture à l'aide d'un tableau associatif

La fonction mysql_fetch_assoc() récupere une ligne à la fois dans un tableau associatif

Syntaxe $arrayres=mysql_fetch_assoc($idresult);

La fonction retourne un tableau associatif contenant autant d'éléments qu'il y a de colonnes précisées dans la requête SELECT

Les clés sont les nom des colonnes Chaque nouvel appel de la fonction retourne la ligne

suivante du résultat, où FALSE s'il n'y a plus de ligne à lire

Page 21: Techniques Internet de Base 2006-2007

Exemple (tableau associatif) 1

<html><head><title>Lecture de la table article</title></head><body><?phpinclude("connexion.inc.php");$idcom=connex("mabase","parametres");$requete="SELECT artist.name as Artiste, album.name as Album,

label.name as Label, album.year as Annee FROM artist, album, labelWHERE artist.id=album.artist_id ANDalbum.label_id=label.id";

$result=@mysql_query($requete,$idcom);if(!$result){

echo "Lecture impossible";}

Page 22: Techniques Internet de Base 2006-2007

Exemple (tableau associatif) - 2

else{

$nbart=mysql_num_rows($result);echo "<h3> Il y a $nbart albums</h3>";echo "<table border=\"0\"> <tr>";

while($ligne=mysql_fetch_assoc($result)){ echo "<tr>";

foreach ($ligne as $cle=>$valeur) { echo "<td><b>".$cle."</b></td>";

echo "<td>".$valeur."</td>"; } echo "</tr>";}echo "</table>";mysql_free_result($result);

}?></body></html>

Page 23: Techniques Internet de Base 2006-2007

Lecture des noms de colonnes

Pour lire les noms des colonnes du résultat d'une requête : $colonne=mysql_field_name($resultat, $num_col)

$num_col est le numéro de la colonne dont on veut connaître le nom

Page 24: Techniques Internet de Base 2006-2007

Insertion de données

Exemple d'insertion de données :Nouvelle intervention dans un forum Inscription d'un utilisateur ...

L'insertion de données se fait presque toujours à partir d'un formulaire HTML

Il faut gérer les caractères spéciaux

Page 25: Techniques Internet de Base 2006-2007

Gestion des caractères spéciaux

Il est préférable d'utiliser un caractère d'échappement pour les caractères spéciaux des chaînes récupérées dans le tableau $_POST, en particulier les guillemets

On dispose de deux fonctions $val=mysql_escape_string($chaine); $val=mysql_real_escape_string($chaine);

La deuxième fonction prend en compte le jeu de caractères utilisé (ex. latin1)

Page 26: Techniques Internet de Base 2006-2007

Exemple – Inscription en ligne 1

<?phpinclude('connexion.inc.php');if(!empty($_POST['nom'])&& !empty($_POST['adresse'])&& !

empty($_POST['ville'])){ $id_utilisateur="\N"; $nom=mysql_escape_string($_POST['nom']); $prenom=mysql_escape_string($_POST['prenom']); $age=mysql_escape_string($_POST['age']); $adresse=mysql_escape_string($_POST['adresse']); $ville=mysql_escape_string($_POST['ville']); $mail=mysql_escape_string($_POST['mail']); //Requète SQL $requete="INSERT INTO utilisateur

VALUES('$id_utilisateur','$nom','$prenom','$age','$adresse','$ville','$mail')";

$idcom=connex('mabase','parametres'); $result=mysql_query($requete,$idcom);

Page 27: Techniques Internet de Base 2006-2007

Exemple – Inscription en ligne 2

if(!$result) { echo mysql_errno(); echo mysql_error(); echo "<script type=\"text/javascript\">

alert('Erreur : ".mysql_error()."')</script>";

} else { echo "<script type=\"text/javascript\">

alert('Vous êtes enregistré Votre id utilisateur est : ". mysql_insert_id()."')</script>";

}}else {echo "<h3>Formulaire à compléter!</h3>";}?>

Page 28: Techniques Internet de Base 2006-2007

Mise à jour d'une table

Exemples :Changement du mot de passeMise à jour du prix d'un produitMisa à jour d'un compteur ...

Il faut traiter les caractères spéciaux

Page 29: Techniques Internet de Base 2006-2007

Exemple – Mise à jour 1

<?phpif($_POST['modif']!='Enregistrer'){

//FORMULAIRE}elseif(isset($_POST['nom'])&& isset($_POST['adresse'])&&

isset($_POST['ville'])){ include('connexion.inc.php'); $nom=mysql_escape_string($_POST['nom']); $adresse=mysql_escape_string($_POST['adresse']); $ville=mysql_escape_string($_POST['ville']); $mail=mysql_escape_string($_POST['mail']); $code=mysql_escape_string($_POST['code']); $requete="UPDATE utilisateur SET

nom='$nom',adresse='$adresse',ville='$ville',mail='$mail' WHERE id_utilisateur='$code'";

$idcom=connex('mabase','parametres'); $result=mysql_query($requete,$idcom); mysql_close($idcom);

Page 30: Techniques Internet de Base 2006-2007

Exemple – Mise à jour 2

if(!$result) { echo "<script type=\"text/javascript\"> alert('Erreur : ".mysql_error()."')</script>"; } else { echo "<script type=\"text/javascript\"> alert('Vos

modifications sont enregistrées');window.location='index.htm';</script>";

}}else{

echo "Modifier vos coordonnées!";}?>