www.agroparistech.fr 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_commande3 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. 2. Afficher le formulaire. 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'); } INSERT INTO client (NOM, ADRESSE, LOCALITE, COMPTE) VALUES (nom, adresse, localité, compte) 4. Exécuter la requête sur la BD 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 Execution de la requête traitement.php <?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 BD connexion 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