w w w. a g r o p a r i s t e c h. f r Système d information http://www.agroparistech.fr/systeme-d-information.html Requêtes MySQL en PHP avec AgroSIXPack Liliana IBANESCU UFR Informatique Département MMIP Année 2014 2015
Motivation Consultation de la BD SELECT NOM FROM client WHERE COMPTE < 0 Requête en SQL BD Réponse FRANCK GILLET MERCIER Client_commande 2
Accès aux Bases de données Il faut connaître la structure des tables Il faut connaître SQL Risque d erreurs / incohérence INSERT INTO client (NOM, ADRESSE, LOCALITE, COMPTE) VALUES ('FRANCK', '14 avenue du Reclus', 'Lille', '0') Requête en SQL BD Réponse Client_commande 3
Solution 1. Afficher le formulaire. 2. Coté utilisateur: Saisir de(s) donnée(s) Envoyer 3. Traiter les données saisies et construire une requête SQL INSERT INTO client (NOM, ADRESSE, LOCALITE, COMPTE) VALUES (nom, adresse, localité, 0.00) 4. Exécuter la requête sur la BD 4
Créer un formulaire Phase de conception Quelle information est à saisir par l utilisateur? Mise en page sur papier Phase de réalisation = Écrire le code pour afficher les composants du formulaire traiter les données saisies fonctions du AgroSIXPack ou (PHP et HTML) Voir le doc Formulaires avec AgroSIXPack.pdf 5
Construction de la requête 1. Afficher le formulaire. 2. Coté utilisateur: Saisir de(s) donnée(s) Envoyer 3. Traiter les données saisies et construire une requête SQL function traiter_formulaire() { $nom = valeur_champ('nom'); $adresse = valeur_champ('adresse'); $localite = valeur_champ('localite'); $compte = valeur_champ ('compte'); } 4. Exécuter la requête sur la BD INSERT INTO client (NOM, ADRESSE, LOCALITE, COMPTE) VALUES (nom, adresse, localité, compte) 6
Construction de requêtes function traiter_formulaire() { // Récupération des données $nom = valeur_champ('nom'); $adresse = valeur_champ('adresse'); $localite = valeur_champ('localite'); $compte = valeur_champ('compte'); // Utilisation des données } // Construction de la requête!!! Syntaxe SQL $requete = 'INSERT INTO client'; $requete.= '(NOM, ADRESSE, LOCALITE, COMPTE) VALUES ('; $requete.= chaine_en_sql($nom). ', '; $requete.= chaine_en_sql($adresse). ', '; $requete.= chaine_en_sql($localite). ', '; $requete.= chaine_en_sql($compte). ' )'; INSERT INTO client(nom, ADRESSE, LOCALITE, COMPTE) VALUES ( 'FRANCK', '14 avenue du Reclus', 'Lille', '0.0' ) 7
Chaîne en SQL Utiliser la fonction chaine_en_sql: pour les apostrophes pour prévenir les injections de code SQL // $chaine : string // -> string function chaine_en_sql($chaine) { return '\''. mysql_real_escape_string($chaine). '\''; } 8
traitement.php Execution de la requête <?php // construction de la requête $requete = 'INSERT INTO client'; $requete.= '(NOM, ADRESSE, LOCALITE, COMPTE) VALUES ('; $requete.= chaine_en_sql($nom). ', '; $requete.= chaine_en_sql($adresse). ', '; $requete.= chaine_en_sql($localite). ', '; $requete.= chaine_en_sql($compte). ' )';?> fermer connexion connexion BD Serveur PHP envoie des requêtes Serveur MySQL INSERT INTO client (NOM, ADRESSE, LOCALITE, COMPTE) VALUES (nom, adresse, localité, 0.00) 9
Principe Exécutions des requêtes SQL en PHP: 1. Établissement d une connexion à MySQL 2. Sélection d une base de données 3. Exécution des différentes requêtes et traitement des réponses 4. Fermeture de la connexion 10
Outils Exécution de requêtes en PHP: 1. Établissement d une connexion à MySQL mysql_connect 2. Sélection d une base de données mysql_select_db 3. Exécution des différentes requêtes et traitement des réponses 4. Fermeture de la connexion mysql_close 11
Exécution de requêtes function traiter_formulaire() { // 1. Ouverture de la connexion au serveur MySQL mysql_connect( localhost, root, mysql ); // 2. Selection de la base de données mysql_select_db( client_commande ); // 3.a Construction de la requête $requete = 'INSERT INTO client'; $requete.= '(NOM, ADRESSE, LOCALITE, COMPTE) VALUES ('; $requete.= chaine_en_sql($nom). ', '; $requete.= chaine_en_sql($adresse). ', '; $requete.= chaine_en_sql($localite). ', '; $requete.= chaine_en_sql($compte). ' )'; // 3.b Afficher la requête à l écran, puis l exécuter et // récupérer la table SQL résultat $res = mysql_query_affiche($requete); } // 4. fermeture de la connexion à la base mysql_close(); 12
Afficher le résultat en PHP function traiter_formulaire() { // construction de la requête $requete = 'SELECT nom, adresse FROM client'; // 3. Afficher la requête à l écran, puis l exécuter et // récupérer la ressource SQL résultat $res = mysql_query_affiche($requete); } while($ligne = mysql_ligne_suivante($res)){ printline($ligne['nom']. ' ' ); printline($ligne['adresse']); } 13