Tableau indexé = traitement simplifié

1 message   •   Page 1 sur 1
Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 mai 2006, 16:56

Comment construire une source de données indexée
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.
Remplissage à partir de la base de données
  • 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)
Exemple :
  • 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> " ;
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

1 message   •   Page 1 sur 1