Université Mohamed Premier Année universitaire 2014/2015 Faculté des Sciences Filière SMI S6 Module «Technologies du Web» ---------------------------- Feuille de TP 6 MYSQL/PHP Exercice 1 : Testez les scripts PHP suivant pour apprendre à se connecter à un Serveur, a une base de données, créer une table et insérer des données dans cette base, et enfin afficher et exploiter ces données. Utilisation de bases de données MySQL avec PHP L'accès à une base de données se réalise en 3 étapes: La connexion La requête SQL La déconnexion 1. La connexion Avant de faire le moindre accès à une base de données, il faut impérativement établir une connexion et choisir sa base de données $nomutilisateur = "toto"; $motdepasse = "secret"; mysql_connect($serveurbd, $motdepasse); $connexionreussie = mysql_select_db($basededonnees); $serveurbd est le nom (ou adresse IP) du serveur où se trouve la base de données MySQL $nomutilisateur est l'identifiant sous lequel vous souhaitez vous connecter à la base de données Chez vous par défaut, c'est généralement "root". $motdepasse est le mot de passe associé à l'identifiant, Chez vous c'est une chaîne vide par défaut. $basededonnees est un nom de base de données qui doit vous devrez en créer une en passant par exemple par PHPMyAdmin (A vous de choisir son nom). Voici un exemple concret en local: $idconnexion = mysql_connect($serveurbd, $motdepasse); if ($idconnexion!== FALSE) echo "Connexion au serveur réussie"; else echo "Echec de connexion au serveur"; $connexionbase = mysql_select_db($basededonnees); if ($connexionbase) echo "Connexion à la base réussie"; else echo "Echec de connexion à la base"; Page 1 sur 6
On peut aussi utiliser une autre méthode pour stopper le script si la connexion ne peut pas se faire (inutile d'essayer d'accéder à la base si le serveur n'est pas accessible) : @mysql_connect($serveurbd, $motdepasse) or die("impossible de se connecter au serveur de bases de données."); @mysql_select_db($basededonnees) or die(" Cette base de donnees n'existe pas"); or die("") permet d'afficher un texte et de stopper le script si la fonction précédente renvoie une erreur. Notez que pour ne pas avoir à l'écran les messages d'erreur remontés par PHP, il suffit de mettre un @ devant les appels aux fonctions, par exemple @mysql_connect() 2. La déconnexion Comme vous avez pu le voir dans les exemples précédents, la déconnexion se fait par appel à la fonction mysql_close(). 3. Requête SQL ne retournant pas de résultat (CREATE TABLE, INSERT, UPDATE, etc.) Pour exécuter une requête SQL nous pouvons faire appel à la fonction mysql_query(). @mysql_connect($serveurbd, $motdepasse) or die("impossible de se connecter au serveur de bases de données."); @mysql_select_db($basededonnees) or die(" Cette base de donnees n'existe pas"); $sql = "CREATE TABLE IF NOT EXISTS s mi ". "(id INTEGER PRIMARY KEY AUTO_INCREMENT,". "nom VARCHAR(128))"; $retour = mysql_query($sql); if ($retour === FALSE) echo "La requête CREATE TABLE a échoué."; else echo "La table s mi a été créé."; $sql = "INSERT INTO s mi (nom) VALUES (' TP1 HTML SMI S6')"; $retour = mysql_query($sql); if ($retour === FALSE) echo "La requête INSERT a échoué."; else echo "Un nouveau nom a été ajouté dans la table s mi."; Avec ce script, nous créons une table puis nous y insérons un nom. Ajoutez autre nom de TP. Page 2 sur 6
4. Requête SQL retournant des résultats (ex: SELECT) Pour une requête de type SELECT, nous ferons également appel à la fonction mysql_query() mais le traitement sera légèrement différent. @mysql_connect($serveurbd, $motdepasse) or die("impossible de se connecter au serveur de bases de données."); @mysql_select_db($basededonnees) or die(" Cette base de donnees n'existe pas"); $sql = "SELECT * FROM smi"; $retour = mysql_query($sql); if ($retour === FALSE) echo "La requête SELECT a échoué."; else while ($enreg = mysql_fetch_array($retour)) echo $enreg["id"]."-".$enreg["nom"]."<br />\n"; Exercice 2 : Ecrire un script PHP qui va créer la base de données suivante «dbsmi». Ecrire un script PHP qui va (CREATE TABLE) la Table inscription, dans la base dbsmi. Ecrire le script PHP qui va (INSERT, UPDATE, et AFFICHER.)Les données du formulaire suivant dans cette table. Page 3 sur 6
Indications sur La démarche à suivre comme suit : On commence par récupérer les champs, avec if et isset On vérifie si les champs sont vides, avec if et empty connexion à la base on écrit la requête sql on insère les informations du formulaire dans la table on affiche le résultat pour le visiteur on ferme la connexion correction if(isset($_post['nom'])) else $nom=""; if(isset($_post['prenom'])) else $prenom=""; if(isset($_post['email'])) else $email=""; if(isset($_post['sexe'])) else $icq=""; if(isset($_post['pass'])) else $titre=""; $nom=$_post['nom']; $prenom=$_post['prenom']; $email=$_post['email']; $icq=$_post['sexe']; $titre=$_post['pass']; if(isset($_post['age'])) else $url=""; $url=$_post['age']; if(empty($nom) OR empty($prenom) OR empty($email) OR empty($sex) OR empty($pass)) echo '<font color="red">attention, seul le champs <b>age</b> peut rester vide!</font>'; else // connexion à la base $db = mysql_connect('localhost', 'login', 'password') or die('erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db('nom_de_la_base',$db) or die('erreur de selection '.mysql_error()); // on écrit la requête sql $sql = "INSERT INTO infos_tbl(id, nom, prenom,email, Sexe, pass, age) VALUES('','$nom','$prenom','$email','$sex','$pass','$age')"; // on insère les informations du formulaire dans la table mysql_query($sql) or die('erreur SQL!'.$sql.'<br>'.mysql_error()); Page 4 sur 6
// on affiche le résultat pour le visiteur echo 'Vos infos on été ajoutées.'; // on ferme la connexion Exercice 3 : Bien sûr faire entrer des données dans une base de données est une très bonne chose, mais l'idéal et de tester si des valeurs de certains champs comme (NOM, Email, ETC) existe dans la table pour éviter les doublons. Réécrire le script PHP de l exercice précédent pour vérifier si un tel NOM ou Email existe déjà dans la table pour éviter les doublons. Correction // On récupère les champs (voir exemple du cours) if(empty($nom) OR empty($prenom) OR empty($email) OR empty($sexe) OR empty( $pass)) echo '<font color="red">attention, seul le champs <b>age</b> peut rester vide!</font>'; // Aucun champ n'est vide, on peut enregistrer dans la table else $db = mysql_connect('localhost', 'login', 'password'); mysql_select_db('nom_de_la_base',$db); $sql = "SELECT id FROM infos_tbl WHERE nom='$nom'"; $req = mysql_query($sql) or die('erreur SQL!'.$sql.'<br>'.mysql_error()); $res = mysql_num_rows($req); if($res!=0) // le nom existe déjà, on affiche un message d'erreur echo '<font color="red">désolé, mais ce nom existe déjà dans notre base.</font>'; else // Le nom n'existe pas, on insère les informations du formulaire dans la table $sql = "INSERT INTO infos_tbl(id, nom, prenom,email, sexe, password,age) VALUES('','$nom','$prenom','$email','$sexe','$pass','$age')"; mysql_query($sql) or die('erreur SQL!'.$sql.'<br>'.mysql_error()); // on affiche le résultat pour le visiteur echo 'Vos infos on été ajoutées.'; Page 5 sur 6
Exercice 4 : Ecrire le script PHP qui permet de lister et afficher les noms de toutes les Bases de Données qui existent sur le serveur MYSQL. Correction error_reporting(e_all); $link = mysql_connect('localhost', 'root', ''); $db_list = mysql_list_dbs($link); $i = 0; $cnt = mysql_num_rows($db_list); while ($i < $cnt) echo mysql_db_name($db_list, $i). "<br> \n" ; $i++; Page 6 sur 6