Accueil
 COURS INFORMATIQUE
 Cours Algorithmique
 Cours ASP
 Cours CSS
 Cours HTML
 Cours PHP / MySQL
 Cours Réseaux
 Cours SQL
 Cours Visual Basic
 ARTICLES
  Conception de sites
  Droit & Internet
  e-commerce
  Société
  Strategies du web
  Technologies Web
  Marketing Web
 LIVRES
  ASP/ASP.Net
  C/C++/C#
  Conception de sites
  DHTML/CSS
  Gestion de Projet
  HTML/Internet
  Java/JSP/J2EE
  JavaScript/VbScript
  Juridique
  Marketing/Stratégie
  PHP/Linux/Unix
  Réseaux
  XML/XHTML/XSL
 NETALYA RECOMMANDE
Reussir un projet de site web
Cours PHP N°6 : PHP et MySQL
Auteur : Frédéric Jacquenod
Adaptation : Christophe Magdelaine

Infinite Menus, Copyright 2006, OpenCube Inc. All Rights Reserved.

Interfaçage de MySql via le langage PHP

Intérêt

Il est très intéressant de pouvoir gérer son site web à travers les bases de données. En effet rien de plus embêtant que de devoir replonger dans le code source pour reprendre les pages à modifier même avec des logiciels WYSIWYG.
Ce serait si bien si l'ajout d'un nouvel article, d'une image ... dans mon site n'obligeait pas à reprendre la page qui propose des liens vers ces domaines.
Avec la base de données c'est possible. Vous ajoutez un élément dans un table et c'est tout. Via php, la page proposée à l'utilisateur est construite dynamiquement en effectuant une requête sur la base de données.
Les commandes utilisées en php pour réaliser ce que nous faisions manuellement commencent généralement par le mot mysql_.

Attention ! Pour suivre ce cours, il est indispensable d'avoir de bonnes notions sur les SGBDR et le langage de requête SQL.
De plus, votre hébergeur doit gérer les bases de données MYSQL via le plus souvent PHPMYADMIN.

Connexion et déconnexion à la base de données

  • Connexion à MySql
    Avant de pouvoir effectuer des requêtes sur la base de données, il faut s'y connecter via un utilisateur autorisé.
    On utilise la commande: mysql_connect

    $connexion=mysql_connect
        (nom_machine_locale,utilisateur,mot_de_passe);

  • Ouverture de la base
    Une fois la connexion à MySql réalisée, il va falloir indiquer quelle est la base de données sur laquelle nous désirons travailler.
    Pour cela utilisez la commande mysql_select_db.

    mysql_select_db(nom_de_la_base,connexion);

    Note : le pointeur de connexion serait ici $connexion déclaré lors l'ouverture de la connexion.
    On peut outrepasser cette fonction, dans ce cas, il faudra utiliser mysql_db_query($db,$requete)

    $resultat=mysql_db_query($bdd,$requete) or die ('Erreur '.$requete.' '.mysql_error());

    Notez que la fonction die est vue dans la gestion des erreurs plus bas sur cette page.
  • Déconnexion
    Lorsque vous avez terminé d'utiliser la base de données, vous devez, libérer la ressource au moyen de la commande mysql_close.

    mysql_close($connexion);

    Si vous omettez cette commande, la fin du script fera office de fermeture de connexion. Si vous omettez le pointeur, ce sera la dernière connexion ouverte qui sera lors fermée.

État de MySql

Avant de travailler sur une base contenue dans MySql vous pouvez vouloir connaître ou faire connaître le contenu de MySql, permettant ainsi à l'utilisateur de choisir la base sur laquelle il veut travailler (effectuer des requêtes, mise à jour ...).
Vous avez à votre disposition la commande mysql_list_dbs.
Cette commande est identique à SHOW DATABASES sous MySql.
La commande renvoie un pointeur sur le résultat. Vous n'obtenez pas directement les informations, il faut ensuite utiliser des fonctions de récupération des résultats (mysql_field_*, mysql_num_...) souvent dans une boucle.

mysql_list_dbs($connexion);

exemple

Je désire fournir à un utilisateur, sous forme de listes, la liste des bases contenues dans MySql. Il doit pouvoir, ensuite, en choisir une et l'ouvrir tout cela avec un seul programme php.

<HTML><BODY BGCOLOR=#FFFFFF>
<?php
$username="admin";
$password="motdepasse";
$hostname="monsite.com";
echo ("
<center><font size=7><U>PHP-MYSQL en action<br>Connexion à MySql</u></font>
<BR><BR>
</CENTER>
");
#On se connecte a MySql
if(!($connexion=mysql_connect
    ($hostname,$username,$password)))
{
echo "<U>probleme lors de la connexion à MySql</U>";
exit();
}
else
{
echo ("<B>Connexion a MySql OK <BR>");
# On recupere les bases presentes
$result=mysql_list_dbs($connexion);
# On compte le nombre de lignes de resultat
$nombre_base=mysql_num_rows($result);
echo "Nous avons <font color=green>$nombre_base</font> bases disponible(s)<BR>";
# On crée le formulaire qui pointera sur ce meme programme
echo "<FORM METHOD=POST>
<SELECT NAME=nombase SIZE=$nombre_base>
";
#On affiche chaque ligne de resultat
while ($ligne = mysql_fetch_row($result))
{ echo "<OPTION>$ligne[0]";}
echo "
</SELECT><BR>
<INPUT TYPE=submit VALUE=soumettre>
<INPUT TYPE=reset VALUE=reset></FORM>";
# Partie pour le traitement du resultat une fois une base selectionnee
if($nombase != "")
{
print "Vous avez choisi d'accéder à la base -->$nombase<--<br>";
#On se connecte a la base
if(!mysql_select_db($nombase,$connexion))
{echo ("Erreur de selection de la base -->$nombase<--<br>");exit();}
else
{echo ("<B>Ouverture de la base -->$nombase<-- ok<br>");}
}
}
mysql_close($connexion);
?>
</BODY></HTML>

La partie FORM ne contient pas d'option ACTION. Le programme recevant les informations une fois le formulaire soumis sera donc lui-même.
Vous pouvez sinon utiliser la variable d'environnement de php contenant le nom de votre programme:

<FORM ACTION=$PHP_SELF METHOD=POST>

État d'une base

Nous connaissons maintenant les bases disponibles, mais qu'y a t'il à l'intérieur ?
Nous allons donc avant de voir la récupération d'informations contenues dans les tables comment récupérer l'état d'une base (table, structure ...).
  • Liste des tables
    Nous l'avons déjà un peu évoqué avec la récupération des bases contenues dans MySql. Vous pouvez utiliser la fonction mysql_list_tables associée à la fonction mysql_tablename.

    $pointeur_resultat=mysql_list_tables
         ($nom_de_la_table,$pointeur_de_connexion);
    mysql_tablename($pointeur_resultat,$indice);

    exemple

    En reprenant l'exemple précédent, je désire maintenant montrer les tables disponibles dans la base sélectionnée. Afin d'avoir plus d'une table à ma disposition je vais travailler sur la base "baseetudiants".
    Je complète l'exemple précédent une fois la base ouverte.

    <HTML><BODY BGCOLOR=#FFFFFF>
    <?
    else
    {
    echo ("<B>Ouverture de la base -->$nombase<-- ok<br>");
    $result_table=mysql_list_tables($nombase,$connexion);
    # On compte le nombre de lignes de resultat
    $nombre_table=mysql_num_rows($result_table);
    echo "Nous avons <font color=green>$nombre_table</font> tables disponibles<BR>";
    # On crée le formulaire qui pointera su ce meme programme
    echo "<FORM ACTION=mysql_query_table.php METHOD=POST>
    <SELECT NAME=nomtable SIZE=$nombre_table>
    ";
    for($j=0;$j<$nombre_table;$j++)
    {
    echo "<OPTION>".mysql_tablename($result_table,$j);
    }
    echo "
    </SELECT><BR>
    <INPUT TYPE=submit VALUE=soumettre>
    <INPUT TYPE=reset VALUE=reset>
    </FORM>";
    }
    }
    }
    mysql_close($connexion);
    ?>
    </BODY></HTML>

  • Structure d'une table
    Avant d'effectuer des mises à jour, recherches, insertions d'informations dans une table, il est préférable de bien connaître la structure de la table pour éviter des erreurs.
    Vous pouvez utiliser la fonction mysql_query qui permet de passer une commande SQL.

    $pointeur_resultat=mysql_query
        ($requete,$pointeur_de_connexion);

    exemple

    $requete="DESC $nomtable";
    $result_query=mysql_query($requete,$connexion);

    Ainsi, la commande mysql_query permet de passer n'importe quelle commande comme si vous la tapiez en direct dans MySql. Le résultat est un pointeur référençant un tableau en mémoire.

    $colonne = mysql_num_fields($result_query);
    $ligne = mysql_num_rows($result_query);

    Je récupère, en utilisant le pointeur de résultat, le nombre de colonnes et de lignes contenues dans le tableau. Ceci me permet ensuite de créer des boucles permettant de lire le contenu de ce tableau. Les indices, je le rappelle commencent à 0.
    mysql_num_fields renvoie le nombre de colonnes du tableau résultat (les attributs ici).
    mysql_num_rows renvoie le nombre de lignes du tableau résultat (les champs ici).

    On peut ensuite afficher le Titre des colonnes (nom des attributs) via la fonction mysql_field_name et une boucle for qui parcourt le tableau en largeur (nombre de colonnes)

    for($cpt2=0;$cpt2<$colonne;$cpt2++)
    {print "<th bgcolor=yellow>".mysql_field_name
        ($result_query,$cpt2)."</th>";}

    La fonction mysql_field_name permet donc de récupérer le nom de la valeur contenu dans le tableau des résultats. Vous pouvez aussi récupérer la longueur (mysql_field_length), le type (mysql_field_type) ainsi que les options de l'attribut.

    Recuperation des resultats d'une ligne

    $tab_rows=mysql_fetch_row($result_query);

    Je récupère, sous forme de liste ($tab_rows), chaque ligne de résultats du tableau. A chaque passage, le pointeur se positionne sur la ligne suivante d'où la nécessité d'une boucle.

Requêtes sur les tables

Voyons maintenant comment effectuer des requêtes de sélections, d'ajout, de créations ...
Le principe est assez simple nous allons créer notre requête et ensuite la passer à MySql au moyen de la fonction mysql_query déjà vue précédemment.

Récupération d'informations

On souhaite maintenant récupérer toutes les informations contenues dans la table.
L'affichage se fera comme pour la structure de la table sous forme de tableau.
La requête est simple : select * from table Ici on sélectionne tous les enregistrements d'une table, en pratique cela se fait via:

$requete="select * from $nomtable";

en sachant que l'on peut effectuer une requête plus complexe en fonction des besoins comme :

$requete="SELECT * FROM $nomtable WHERE rubrique='chariot' AND type LIKE '%$type%'";
$resultat=mysql_db_query($db,$requete) or die ('Erreur '.$requete.' '.mysql_error());
$n=mysql_num_rows($resultat);

Dans ce dernier cas, on utilise la clause WHERE pour la requête SQL qui permet de cibler notre demande.

Il nous faut ensuite utiliser une boucle for pour lire le contenu de chaque enregistrement, champ par champ.

for($i=0;$i<$n;$i++) {
$ligne=mysql_fetch_row($resultat);
$id=$ligne[0];
$description=$ligne[1];

echo ("identifiant n°$id = $description<br>");
}

les différents champs sont présents dans un tableau indicé de 0 à (nombre de champs-1).

Ajout d'informations

comme indiqué précedemment, on se sert d'une autre reqûete SQL:

$requete="INSERT INTO matable (url,Titre,mail,note,date,logo) VALUES ('$url','$Titresite','$mail',5,NOW(),'$logo')";
$resultat1=mysql_db_query($bdd,$requete) or die ('Insertion dans la base de données du site '.$Titresite.' impossible '.$requete.' '.mysql_error());

On prend ici l'exemple d'un annuaire de liens où chaque nouveau site est ajouté dans une base de donnée "matable". On reprend les valeurs de variables renseignées via un formulaire par exemple.
Notez la correspondance rigoureuse des champs qui seront renseignés avec les valeurs indiquées après "VALUES".
On utilise également la fonction MYSQL NOW() pour entrer la date actuelle.

Suppression d'informations

On peut également supprimer un ou plusieurs enregistrements en fonction de critères.

$requete="DELETE FROM mabase WHERE url='$url'"; $resultat=mysql_db_query($bdd,$requete) or die ('Erreur : le site '.$Titresite.' n\'a pas été supprimé de la base de données : '.$requete.' '.mysql_error());

Dans cet exemple on utilise donc la fonction DELETE et un critère de sélection.

Gestion des erreurs

Deux fonctions permettent, suite à une commande qui a échoué, de récupérer un numéro référençant l'erreur (mysql_errno) et un message d'erreur (mysql_error).

echo ("Numero d'erreur : ".mysql_errno()."<BR>");
echo ("Message d'erreur : ").mysql_error();

ou plus simplement

print mysql_errno();
print mysql_error();

Vous pouvez éventuellement indiquer le pointeur de résultat. Si vous ne le faites pas le dernier récupéré sera alors utilisé.
Une méthode trés utilisée est de stopper le script par la fonction die en cas d'erreur.

$resultat=mysql_db_query($db,$requete) or die ('Erreur '.$requete.' '.mysql_error());

Informations sur la base

Avec la version php 4.0.5 vous avez à votre disposition des fonctions qui permettent d'obtenir des renseignements sur le client, le serveur ...
Ces fonctions renvoient une chaîne de caractères.

mysql_get_client_info() renvoie le numéro de version du client utilisé par PHP
mysql_get_host_info() renvoie le type de connexion utilisée et le nom du serveur hôte
mysql_get_proto_info() renvoie la version du protocole utilisée pour la connexion
mysql_get_server_info() renvoie la version du serveur.


Nous vous informons que ce cours constitue une œuvre protégée en France par le Code de la Propriété Intellectuelle, et à l’étranger par les conventions internationales en vigueur sur le droit d’auteur. La violation de l’un des droits d’auteur de l’œuvre est un délit de contrefaçon. Il est donc interdit, à titre privé ou public, de reproduire, copier, vendre, revendre ou exploiter, que ce soit dans un but commercial ou purement gratuit, ce cours, sauf accord exprès et préalable de son auteur.


Google
 
 RESSOURCES GRATUITES
 Caractères spéciaux
 Code Couleurs HTML
 Générateur Méta Tags
 Références HTML
 Scripts : ASP
 Scripts : Java Scripts
 PRATIQUE / OUTILS
 Salons Informatiques
 Astuces Windows
 TÉLÉCHARGEMENTS
 Utilitaires système
 Logiciels pratiques
 Jeux & démos
 INFOS SITE
 Contacts
 Mentions légales
 Qui sommes-nous ?
 PARTENAIRES
 Jeux et Jouets
 Murielle Cahen
 Cours d'anglais
 Droit NTIC
 Directeur Internet
 Australie
 Création site Internet
 VOD News
 Web Hostings