1 / 30

Techniques Internet de Base 2006-2007

Techniques Internet de Base 2006-2007. Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr. Accès à MySQL avec PHP. Etapes.

cheri
Télécharger la présentation

Techniques Internet de Base 2006-2007

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Techniques Internet de Base2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSAruggero.pensa@univ-st-etienne.fr

  2. Accès à MySQL avec PHP

  3. 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 : • Connexion au serveur MySQL • Envoi de requêtes SQL au serveur • Insertion de données dans la base • Recherche dans la base • Lecture du résultat d'une requête • Fermeture de la connexion

  4. 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

  5. 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");

  6. 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 <?php define("MONHOST","localhost"); define("MONUSER","root"); defint("MOTDEPASSE","Az01x4oP"); ?>

  7. 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

  8. 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);

  9. Exemple de connexion à une base <?php include_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); ?>

  10. Fonction de connexion • Fichier connexion.inc.php <?php function 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; } ?>

  11. 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");

  12. 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

  13. 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

  14. Exemple d'envoi de requête <?php include("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 } ?>

  15. 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

  16. 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

  17. 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)

  18. Exemple (tableau numérique) 1 <html> <head> <title>Lecture de la table article</title> </head> <body> <?php include("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"; }

  19. Exemple (tableau numérique) - 2 else { $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>

  20. 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

  21. Exemple (tableau associatif) 1 <html> <head> <title>Lecture de la table article</title> </head> <body> <?php include("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, label WHERE artist.id=album.artist_id AND album.label_id=label.id"; $result=@mysql_query($requete,$idcom); if(!$result) { echo "Lecture impossible"; }

  22. 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>

  23. 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

  24. 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

  25. 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)

  26. Exemple – Inscription en ligne 1 <?php include('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);

  27. 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>";} ?>

  28. Mise à jour d'une table • Exemples : • Changement du mot de passe • Mise à jour du prix d'un produit • Misa à jour d'un compteur • ... • Il faut traiter les caractères spéciaux

  29. Exemple – Mise à jour 1 <?php if($_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);

  30. 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!"; } ?>

More Related