Créée le, 19/06/2015

 Mise à jour le, 19/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Accéder à votre base de données MySQL à partir du Web (1ère partie) :



Quelques rappels :


Auparavant, lorsque nous travaillions avec PHP, nous nous servions d'un fichier brut pour enregistrer et récupérer nos données. Lorsque nous avons mentionné cette approche de la deuxième leçon, en cliquant ici, nous avons également dit que les systèmes de bases de données relationnelles rendent ces deux tâches (enregistrement et récupération des données) à la fois plus simples, plus sûres et plus efficaces dans le cadre d'une application Web. Maintenant que nous sommes capable de nous servir de MySQL pour créer des bases de données, nous pouvons commencer à connecter cette base de données à une interface Web.

Dans cette leçon, nous verrons comment accéder à la base de données de chez Jean-Pierre à partir du Web, en utilisant PHP. Vous apprendrez à lire et à écrire dans cette base de données, et à filtrer les données d'entrée qui peuvent poser problème.

Fonctionnement des architectures de bases de données Web :

Dans la leçon précédente, en cliquant ici, nous avons mis en évidence le fonctionnement des architectures de bases de données Web. A titre de rappel, voici les principales étapes de ce processus :

  1. Le navigateur Web d'un utilisateur envoie une requête HTTP correspondant à une page particulière. Par exemple, l'utilisateur peut avoir demandé de chercher tous les livres écrits par Michaël-Pierre ROBERT, du site de chez Jean-Pierre, à l'aide d'un formulaire HTML. La page de recherche des résultats est appelée Resultats_Serveur.php.

  2. Le serveur Web reçoit la requête concernant Resultats_Serveur.php, récupère le fichier correspondant, et le passe au moteur PHP afin qu'il y soit traité.

  3. Le moteur PHP commence à analyser le script. A l'intérieur de ce script se trouve une commande permettant de se connecter à la base de données, et d'exécuter une requête (c'est-à-dire de rechercher les livres). PHP ouvre ensuite une connexion vers le serveur MySQL, et envoie la requête appropriée.

  4. Le serveur MySQL reçoit la requête en provenance de la base de données, la traite, et renvoie les résultats obtenus (une liste de livres) au moteur PHP.

  5. Le moteur PHP finit l'exécution du script, qui consiste généralement à formater les résultats de la requête d'une manière agréable à lire, en HTML. Le fichier HTML obtenu est alors renvoyé au serveur Web.

  6. Le serveur Web renvoie à son tour le fichier HTML au navigateur, qui l'affiche pour que l'utilisateur puisse voir la liste de livres qu'il a demandée.

Maintenant que nous possédons une base de données MySQL, nous pouvons écrire le code PHP permettant d'exécuter les étapes précédentes. Nous commencerons par le formulaire de recherche. Il s'agit d'un formulaire en HTML classique. Le code de ce formulaire se trouve dans le Listing 1.

Listing 1. - Catalogue_de_Recherche.html - La page de recherche dans la base de données de chez Jean-Pierre :


Le formulaire HTML est très simple. Sa sortie est présentée à la figure 1.


Interface_Formulaire_de_Jean_Pierre.png

Le script invoqué lorsque l'utilisateur clique sur le bouton Recherchez est Resultats_Serveur.php. Vous trouverez le code correspondant au Listing 2. Tout au long de cette leçon, nous allons expliquer le but et le fonctionnement de ce script.

Listing 2. - Resultats_Serveur.php - Le script qui récupère les résultats de notre base de données MySQL et qui les formate pour les afficher correctement :


La figure 2 illustre les résultats de ce script :


Resultats_de_Votre_Recherche_Jean_Pierre.png

A noter : pour visualiser correctement l'aperçu et voir le bon déroulement du programme, vous pouvez insérer ces noms dans le champ de : "entrez votre recherche" comme ci-après : Daniel ROBERT, Julie DUPONDRA, Jennifer-Josiane LEDUC, Michelle-Patty MONPARNA. Mais vous aurez l'occasion d'enregistrer votre pseudo, [exemple 2], en bas de cette page de la première ou de la deuxième partie de cette leçon.

Pour visualiser l'aperçu, en cliquant ici. [Exemple 1].

Principales étapes pour interroger une base de données à partir du Web :

Dans tous les scripts utlisés pour accéder à une base de données à partir du Web, il faut respecter les étapes suivantes :

  1. Vérifier et filtrer les données fournies pas l'utilisateur.
  2. Etablir une connexion vers la base de données appropriée.
  3. Interroger la base de données.
  4. Récupérer les résultats.
  5. Présenter les résultats à l'utilisateur

Ces étapes ont été respectées dans le script Resultats_Serveur.php, et nous allons maintenant les étudier une par une.

Vérifier et filtrer les données saisies par l'utilisateur :

Nous commençons notre script, en supprimant tous les espaces que l'utilisateur peut avoir saisis par inadvertance au début ou à la fin de ses données. Pour cela, nous appliquons la fonction trim() à $Terme_de_recherche.

    $Terme_de_recherche = trim($Terme_de_recherche) ;

La prochaine étape consiste à vérifier que l'utilisateur a bien entré une expression à chercher, et un type de recherche. Vous remarquerez que nous effectuons cette vérification après avoir supprimé les espaces blancs aux deux extrémités de $Terme_de_recherche. Si nous avions inversé ces deux opérations, nous ne pourrions pas détecter le cas où l'utilisateur a saisi uniquement des espaces :

    if (!$Type_de_Recherche || !$Terme_de_recherche)

    {

       echo "<font color = '#005555'> <b> Vous n'avez pas saisi tous les d&eacute;tails requis ! Veuillez recommencer, merci ! </b> </font>" ;

    exit ;

    }

Vous remarquerez aussi que nous vérifions la variable $Type_de_Recherche, bien qu'elle provienne dans notre cas d'une instruction HTML SELECT. Vous vous demandez peut-être pourquoi nous prenons la peine de vérifier des variables qui doivent être remplies automatiquement. Il est très important de se rappeler qu'il peut exister plusieurs interfaces à votre base de données. Par exemple, Amazon possède plusieurs filiales qui se servent de la même interface de recherche. De plus, il est important de filtrer les données, en cas de problème de sécurité.

Il faut savoir que lorsque vous travaillez avec des données saisies par les utilisateurs. Vous devez filtrer ces données pour supprimer tous les caractères de contrôle. Rappelez-vous que les fonctions addslashes() et stripslashes() que nous avons vues à la quatrième leçon, en cliquant ici. Vous devez vous servir de addslashes() lorsque vous envoyez les données des utilisateurs à une base de données comme MySQL, et de stripslashes() pour renvoyer les résultats de la base de données à vos utilisateurs.

Dans notre cas, nous nous servons de addslashes() sur l'expression recherchée.

    $Terme_de_recherche = addslashes($Terme_de_recherche) ;

Nous nous servons également de stripslashes() sur les données provenant de la base de données. En effet, aucune des données que nous avons entrées manuellement dans la base de données ne contient de slashs (/), ni aucun caractère de contrôle. L'appel de la fonction stripslashes() n'a donc en principe aucun effet. Comme nous construisons une interface Web pour la base de données, il y a de fortes chances que nous soyons amené à y ajouter de nouveaux livres, et les données saisies peuvent contenir ces caractères. Lorsque nous les ajoutons à la base de données, nous appelons addslashes(), ce qui signifie que nous devons appeler stripslashes() quand nous récupérons les données. Il s'agit surtout d'une bonne habitude à prendre.

Nous nous servons de la fonction htmlspecialchars() pour coder les caractères qui ont une signification particulière en HTML. Nos données de test actuelles ne contiennent aucun de ces caractères (&, <, >, ou "), mais il existe plusieurs titres de livres qui contiennent le symbole &. Grâce à cette fonction, nous pouvons éliminer de futures erreurs.

    echo htmlspecialchars(stripslashes($row["titre"])) ;

Établissement de la connexion :

Dans notre script, les lignes suivantes permettent d'établir la connexion au serveur MySQL :

    <?php

     echo "<BR> <font face = 'Arial' size = '3'>" ; // Permet d'améliorer l'affichage des caractères en cas d'erreur

     // Connexion base de données MYSQL

    $connect = mysql_connect('localhost', 'root', '') ; // Connexion au serveur local EasyPHP, sinon, pour les serveurs à distant, il faudra changer les paramètres de cette connexion

    if (!$connect)

    {

      die('Impossible de se connecter au serveur MySQL') ;

      exit ;

    }

    mysql_select_db('books', $connect) ; // Base de données sélectionnées pour la table "books"

    mysql_query("SET NAMES 'UTF8'"); // Permet de se connecter en UTF8 concernant les caractères accentués

    ?>

Nous nous sommes servi de la fonction mysql_connect() pour nous connecter à la base de données. Nous mettons le prototype de cette fonction :

    int mysql_pconnect( [string host [:port] [:/socketpath] ] ,

                        [string user] , [string password] ) ;

D'une manière générale, il faut lui fournir le nom de l'hôte qui héberge le serveur MySQL, le nom d'utilisateur permettant de se logger, et le mot de passe correspondant à cet utilisateur. Tous ces arguments sont optionnels, et si vous ne les spécifiez pas, la fonction se sert des valeurs par défaut : localhost pour l'hôte, le nom d'utilisateur sous lequel PHP est exécuté, et aucun mot de passe dans le cas du serveur local EasyPHP. Sinon, chaque serveur à distant, il faudra lui fournir un mot de passe ainsi que le nom de l'utilisateur que le fournisseur d'accès Internet (FAI) vous a transmis.

Cette fonction renvoie un identificateur de lien vers votre base de données MySQL, en cas de succès (qu'il faut conserver, puisque nous en aurons besoin par la suite), ou false en cas d'échec. Il est intéressant de tester le résultat de cette fonction, puisque le reste du code ne fonctionnera pas si la connexion n'a pas pu être établie. Nous nous sommes servi du code suivant :

    if (!$connect)

    {

      die('Impossible de se connecter au serveur MySQL') ;

      exit ;

    }

Listing 3. - Connexion_MySQL.php - Le script qui vous permet de vous connecter au serveur MySQL (pour serveur à distant, il faudra changer certains paramètres) :

Une autre fonction, très semblable à mysql_pconnect() est mysql_connect(). La différence avec mysql_pconnect() et que cette fonction renvoie une "connexion persistante" vers la base de données.

Une connexion normale vers la base de données est fermée lorsque l'exécution du script est terminée, ou lorsque le script appelle mysql_close(). Une connexion persistante reste ouverte après la fin de l'exécution du script, et ne peut pas être fermée par la fonction mysql_close().

Vous vous demandez peut-être à quoi servent les connexions persistantes. La réponse est assez simple : la connexion à une base de données prend un certain temps. Lorsque mysql_pconnect() est invoquée, elle vérifie automatiquement s'il existe une connexion persitante, avant de se connecter à la base de données. Si c'est le cas, elle se sert de la connexion déjà établie, au lieu d'en ouvrir une nouvelle, ce qui permet de gagner un peu de temps, et de soulager le serveur.

Il est également intéressant de remarquer que les connexions persistantes deviennent des connexions normales si vous exécutez votre code PHP sous la forme d'un script CGI : chaque appel à un script PHP démarre une nouvelle instance de PHP et la referme après l'exécution du script. Ce mécanisme ferme aussi toutes les connexions persistantes ouvertes.

N'oubliez pas qu'il existe une limite sur le nombre de connexions MySQL qui peuvent exister simultanément. Le paramètre MySQL max_connections détermine cette limite. L'intérêt de ce paramètre et du paramètre Apache "MaxClients" associé et de permettre au serveur de rejeter les nouvelles requêtes de connexion lorsqu'un ordinateur commence à être surcharger, ou lors d'un plantage.

Bien sûr, vous pouvez modifier la valeur par défaut de ces deux paramètres, en modifiant le fichier de configuration. Pour modifier MaxClients dans Apache, éditez le fichier httpd.conf de votre système. Pour changer le paramètre max_connections de MySQL, modifiez le fichier my.conf.

Si vous utilisez des connexions persistantes et que presque toutes les pages de votre site aient besoin d'accéder à une base de données, vous ouvrirez une connexion persistante pour chaque processus Apache. Cela peut poser problème si vous avez conservé les paramètres par défaut. En effet, Apache autorise par défaut 150 connexions (environ), mais MySQL n'en autorise que 100. Lorsque votre site sera très fréquenté, il se peut que vous manquiez de connexions. En fonction des caractéristiques de votre plate-forme, vous devez ajuster ces paramètres pour que chaque processus du serveur Web puisse ouvrir une connexion.

Choisir la base de données à utiliser :

Vous vous rappelez sans doute que lorsque nous utilisons MySQL à partir de la ligne de commande, nous devons lui indiquer la base de données que nous avons l'intention d'utiliser, avec une commande comme celle-ci :

    use books ; // Sur certains serveurs locaux : erreur 1044 - Accès refusé pour l'utilisateur à la base de données 'books'

Attention : sur certains serveurs à distant, USE ne peut fonctionner pour cause que ce paramètre peut être désactivé par le FAI (Fournisseur d'Accès Internet).

La création d'une base de données particulière par défaut au moyen de l'instruction USE ne vous empêche pas d'accéder aux tables d'autres bases de données.

Cette étape est aussi nécessaire lorsque nous nous connectons à partir du Web. Nous pouvons nous servir de PHP, grâce à un appel de la fonction mysql_select_db(), comme ci-après :

    mysql_select_db('books', $connect) ; // Base de données sélectionnée pour la table "books"

Voici le prototype de la fonction mysql_select_db() :

    int mysql_select_db(string database, [int database_connection] ) ;

Cette fonction indique que nous souhaitons utiliser la base de données appelée database. Il est également possible de spécifier optionnellement le lien vers la base de données, lien sur lequel vous souhaitez effectuer cette opération (dans ce cas, $connect), mais si vous n'en spécifiez aucun, le dernier lien ouvert sera utilisé. Si aucun lien n'a été ouvert, le lien par défaut sera ouvert, comme si vous aviez appelé mysql_connect().

Interroger la base de données :

Pour effectuer réellement la requête, vous pouvez utiliser la fonction mysql_query(). Cependant, avant d'appeler cette fonction, il faut mieux configurer la requête que vous voulez exécuter :

    $req = mysql_query("SELECT * FROM les_livres WHERE auteur = '$Terme_de_recherche'") ;

    $query = "$req" . $Type_de_Recherche . "like '%" . $Terme_de_recherche . "%'" ;

Dans ce cas, nous cherchons les données saisies par l'utilisateur ($Terme_de_recherche) dans le champ spécifié par l'utilisateur ($Type_de_Recherche. Vous remarquerez que nous avons spécifié l'opérateur like au lieu de egal. Il faut généralement mieux être assez tolérant pour les recherches dans les bases de données.

Il est important de bien comprendre que les requêtes que vous envoyez à MySQL n'ont pas besoin de se terminer par un point-virgule, contrairement aux requêtes que vous saisissez dans le moniteur de MySQL.

La fonction mysql_query() possède le prototype suivant :

    int mysql_query(string query, [int database_connection] ) ;

Cette fonction reçoit la requête que vous souhaitez exécuter, et optionnellement le lien vers la base de données (ici, $connect). Si ce lien n'est pas spécifié, la fonction récupère le dernier lien ouvert. S'il n'y en a aucun, la fonction ouvre le lien par défaut, comme si vous aviez appelé mysql_connect().

Vous pouvez aussi utiliser la fonction mysql_db_query(), dont voici le prototype :

    int mysql_db_query(string database, string query, [int database_connection] ) ;

Cette fonction permet de spécifier la base de données que vous souhaitez interroger. Il s'agit donc d'une combinaison des fonctions mysql_select_db() et mysql_query().

Ces deux fonctions renvoient un identificateur de résultat (qui permet de récupérer les résultats des requêtes), en cas de succès, et false en cas d'échec. Il convient d'enregistrer cet identificateur (dans notre cas, nous l'enregistrons dans $req), pour pouvoir s'en servir par la suite.

Récupérer les résultats de la requête :

Il existe plusieurs fonctions permettant de récupérer ces résultats à partir de l'identificateur. Ce dernier sert de clé pour accéder à zéro, une ou plusieurs lignes renvoyées par la requête.

Dans notre exemple, nous nous servons de deux de ces fonctions : mysql_num_rows() et mysql_fetch_array().

La fonction mysql_num_rows() fournit le nombre de lignes renvoyées par la requête. Il faut lui passer l'identificateur de résultat, comme ceci :

    $num_results = mysql_num_rows($req) ;

Cette information est intéressante : si nous avons l'intention de traiter ou d'afficher les résultats par la suite, nous pouvons ainsi savoir combien il y en a, pour les traiter à tour de rôle :

    for ($i = 0 ; $i < $num_results ; $i++)

    {

    // Traitement des résultats ...

    }

Pendant chaque itération de cette boucle, nous appelons mysql_fetch_array(). Cette boucle n'est pas exécutée si aucune ligne n'est renvoyée. Cette fonction prend en argument chaque ligne renvoyée et renvoie à son tour cette même ligne sous la forme d'un tableau associatif, chaque clé étant transformée en nom d'attribut et chaque valeur étant associée à la valeur correspondante dans le tableau :

    $row = mysql_fetch_array($req) ;

A partir du tableau associatif $row, nous pouvons parcourir chaque champ et l'afficher d'une manière appropriée, comme ceci :

    echo "<BR/>&nbsp;&nbsp;&nbsp;&nbsp;Prix : &nbsp;" ;

    echo htmlspecialchars(stripslashes($row["prix"])) ;

Comme nous l'avons déjà vu, nous nous servons de stripslashes() pour filtrer les valeurs avant de les afficher.

Il existe plusieurs manières de récupérer les résultats à partir de l'identificateur de résultats. Au lieu de passer par un tableau associatif, nous pouvons placer les résultats dans un tableau d'énumération avec mysql_fetch_row(), comme ci-après :

    $row = mysql_fetch_row($req) ;

Les valeurs des attributs sont listées dans les valeurs du tableau $row[0], $row[1], $row[2), etc.

Il est également possible de placer une ligne entière dans un objet avec la fonction mysql_fetch_objet() :

    $row = mysql_fetch_object($req) ;

Vous pouvez alors accéder à chacun des attributs avec $row->titre, $row->auteur, etc.

Chacune de ces approches lit une ligne lors de chaque opération. Une autre approche consiste à lire un champ chaque fois, en utilisant mysql_result(). Pour cela, vous devez spécifier le numéro de la ligne (compris entre 0 et le nombre total de lignes - 1), ainsi que le nom du champ. Par exemple :

    $row = mysql_result($req, $i, "titre") ;

Vous pouvez spécifier le nom du champ sous la forme d'une chaîne (soit au format "les_livres", ou au format "books . les_livres"), ou sous la forme d'un nombre (comme dans mysql_fetch_row()). Il ne faut pas mélanger l'utilisation de mysql_result() avec celle des autres fonctions de lecture.

Les fonctions de lecture par lignes sont bien plus efficaces que mysql_result(), c'est pourquoi ces fonctions sont plus souvent utilisées.

Déconnexion de la base de données :

Vous pouvez vous servir de mysql_close :

    mysql_close($connect) ;

Pour fermer une connexion non persistante à une base de données. Ce n'est pas strictement nécessaire, parce que, de toute manière, les connexions sont fermées lorsque le script a terminé son exécution.

Nous terminons ainsi ce premier chapitre de cette leçon et nous verrons dans le prochain, Comment Ajouter des informations dans la base de données de chez Jean-Pierre (sur le Web).



  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet.   Haut de page
  Page précédente   Page suivante







Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.