dans un tableau PHP à partir d'une base de données.
- Dans la majorité des cas, le programmeur PHP a besoin d'extraire des données d'une table de base de données et les utiliser dans son programme.
Voici une méthode très efficace qui consiste à créer une image de données dans un tableau indexé à partir d'une requête de sélection.
L'intérêt majeur est de permettre un accès indexé aux données : recherche, suppression, modification et ajout.
L'idée est de créer un tableau associatif indexé par l'index unique de la source de données (généralement la clé primaire) ou par indice numérique dans le cas où aucune clé ou index uniques ne sont disponibles dans la base.
- Exécuter la requête de sélection, la lire séquentiellement et construire le tableau indexé ligne par ligne (clé d'une ligne du tableau = un index unique ou/et un indice numérique)
- Dans cet exemple, supposons qu'on administre la gestion des clients en mode intranet
<?php
//session ouverte pour l'exemple de ce tuto
session_start();
//Requête SQL
$sql = "SELECT id, nom, prénom, adresse, email FROM client " ;
//Exécuter la requête sous Mysql par exemple
$resultat = mysql_db_query (" test ", $sql, mysql_connect("localhost", "root", "") ) ;
//lire le résultat en construisant le tableau indexé
while ($resultat && $ligne = mysql_fetch_array($resultat)){
//ligne du tableau indexée par un index unique (champ id)
$_SESSION["client"] ["$ligne[id]"] = $ligne ;
// et par indice numérique
$_SESSION["client"] [] = $ligne ;
}
//Après cette boucle : on a un tableau indexé par id du client (tableau associatif) et accessoirement une deuxième copie indexée par indices numériques (tableau indexé)
?>
Exploitation simplifiée grâce à l'accès indexé
- On peut mémoriser le tableau dans la session pour le rendre accessible durant la navigation
pour effectuer dessus des actions de consultation, ajout, modification ou suppression.
Ajout de client
- Pour ajouter un nouveau client dont l'id est unique on n'a pas besoin de vérifier si ce client existe déjà par une procédure de recherche mais tout simplement en testant si son id existe en tant qu'index du tableau $_SESSION["client"] par If ( isSet ($_SESSION["client"][" $id "])
Ce qui détermine si un client est déjà identifié par le nouvel $id au quel cas il faut refuser l'ajout. La clé est $id :
<?php
//session ouverte pour l'exemple de ce tuto
session_start();
//Ajout
$id = $_GET["id"] ;
$nom = $_GET ["nom"] ;
$prénom = $_GET ["prénom"] ;
$adresse = $_GET ["adresse"] ;
$email = $_GET ["email"] ;
echo " <Form>
<h1>Ajout</h1>
<p>Id <input name=id value='$id''>
<p>Nom <input name=nom value='$nom'>
<p>Prénom <input name=prénom value='$prénom'>
<p>Adresse <input name=adresse value='$adresse'>
<p>Email <input name=email value='$email'>
<p><input type='submit' name=ajouter value='Ajouter'>
</Form>" ;
//Si ajout
If ( $_GET["ajouter"]) {
//Si existe déjà
if (isSet ($_SESSION["client"]["$id"])) {
//Erreur
echo "<p><font color=red>L'id $id désigne un client existant, Ajout refusé !</font>" ;
}
else {
//Sinon, ajouter le nouveau client dans $_SESSION["client"] :
$_SESSION["client"]["$id"] = array("id"=>$id, "nom"=>$nom, "prénom"=>$prénom, "adresse"=>$adresse, "email"=>$email) ;
}
}
?>
Modification :
- Pour modifier il faut rechercher, afficher la ligne où le client est enregistré et modifier. La clé est $id :
<?php
//session ouverte pour l'exemple de ce tuto
session_start();
//Modification
$id = $_GET["id"] ;
echo "
<Form>
<h1>Modification</h1>
<p>Id <input name=id value='$id'><input type='submit' name=chercher value='Chercher'>" ;
//Si id existe
If ( isSet ($_SESSION["client"]["$id"])) {
//client recherché trouvé, accèder aux données existantes
$nom = $_SESSION["client"]["$id"]["nom"] ;
$prénom = $_SESSION["client"]["$id"]["prénom"] ;
$adresse = $_SESSION["client"]["$id"]["adresse"] ;
$email = $_SESSION["client"]["$id"]["email"] ;
//si modification
If ($_GET["modifier"]){
//client recherché trouvé, modifier les données
$nom = $_SESSION["client"]["$id"]["nom"] = $_GET ["nom"] ;
$prénom = $_SESSION["client"]["$id"]["prénom"] = $_GET ["prénom"] ;
$adresse = $_SESSION["client"]["$id"]["adresse"] = $_GET ["adresse"] ;
$email = $_SESSION["client"]["$id"]["email"] = $_GET ["email"] ;
}
//Afficher
echo " <p>Nom <input name=nom value='$nom'>
<p>Prénom <input name=prénom value='$prénom'>
<p>Adresse <input name=adresse value='$adresse'>
<p>Email <input name=email value='$email'>
<p><input type='submit' name=modifier value='Modifier'>" ;
}
else { echo " <p><font color=red>Client (id=$id) non trouvé !</font>" ;}
echo " </Form> " ;
?>