AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux
version 1.04 du 20/02/2007
SOMMAIRE
1. Préambule
A. Les annexes
1) PREAMBULE
La classe ClasseBases.php permet de gérer les bases de données en faisant abstraction de leur type. Dans l'exemple ci-dessous on illustre les 3 façons différentes de gérer une base ODBC (Access) , mySQL <= 4.0 ou mySQL >=4.1
ODBC
$link = odbc_connect($nomDSN,$bdd_user,$bdd_pwd);
$resultat_requete = odbc_exec($link,$bdd_requete);
while ( odbc_fetch_row($resultat_requete) ) {print odbc_result($resultat_requete, $nomchamp)
}
odbc_close($link)mySQL <=4.0
$link = mysql_connect($bdd_host,$bdd_user,$bdd_pwd);
mysql_select_db($nombase);
$resultat_requete = mysql_query($bdd_requete);
while ($row = mysql_fetch_array ( $resultat_requete , MYSQL_ASSOC ) ) {print $row[$nomchamp];
}
mysql_close($link);mySQL >=4.1 ( MYSQLI )
$link = new mysqli($bdd_host,$bdd_user,$bdd_pwd,$nombase);
$resultat_requete = $link -> query($bdd_requete);
while ( $row = $resultat_requete -> fetch_array(MYSQLI_BOTH) ) {print $row[$nomchamp];
}
mysqli_close($link)LE MEME PROGRAMME AVEC classeBases :
$base = New Bdd;
$base->bdd_connecter_base($nombase);
$base->bdd_execsql($bdd_requete);
$ligne = $base->bdd_lire_ligne();
while ($ligne) {print $base->bdd_lire_champ($nomchamp;
$ligne = $base->bdd_lire_ligne();}
$base->bdd_fermer();
Ce n'est pas plus court mais c'est complètement indépendant de la base de données
2) INSTALLATION DE LA CLASSE
Définir un répertoire "include_path" en modifiant le fichier de configuration de PHP %SYSTEMROOT%\PHP.INI sous IIS
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = "d:/wwwroot/rubappli/communs"Décompresser dans le répertoire "include_path" du serveur PHP le fichier classeForms.php et le répertoire classeForms (ce répertoire contient toutes les ressources nécessaires à la classe)
On obtient l'arborescence :
.../Répertoire_Include
classeBases.php
classeBases<dir>Editer le fichier _classePath.php et modifier la ligne DEFINE en terminant par un "/" obligatoirement, la constante INCLUDEPATH doit pointer sur le répertoire ou se situe le fichier classeForms.php et _classePath.php
// PARAMETRAGE :
DEFINE('INCLUDEPATH','/rubappli/communs/');
Dans le répertoire d'inclusion créer le fichier : _classeBases_description.php
Ce fichier décrit le ou les bases à ouvrir, leurs types (ODBC, MYSQL, MYSQLI) et leurs paramètres de connexion (HOST, USER, PWD)
exemple :
$tablebases["NOMBASE_MYSQLI"] = array("MYSQL","127.0.0.1","root","pwd",["nombase_mysql"] );
"nombase_mysql" est optionnel, a defaut c'est "NOMBASE_MYSQLI" qui est utilisé
$tablebases["NOMBASE_MYSQL"] = array("MYSQL","127.0.0.1","root","");
$tablebases["NOMBASE_ODBC"] = array("ODBC");
C'est tout ! la classe est maintenant exploitable directement
GESTION DE LA DATE ET L'HEURE
GESTION DE LA STRUCTURE DE LA BASE
EXTRACTION DE VALEURS
exemples :
$requete = "SELECT user_id FROM table_users";
$base->bdd_execsql($requete);
$chaine_ids = $base->bdd_listeidverschaine();
// retournera "1,2,5,6"$requete = "SELECT * FROM table_users";
$base->bdd_execsql($requete);
$chaine_ids = $base->bdd_listeidverschaine("USR_ID");
// retournera "1,2,5,6" pareillement$base->bdd_execsql($requete);
$chaine_ids = $base->bdd_listeidverschaine("USR_ID","|")";
// retournera "1|2|5|6"
NOTA : l'interet de cette fonction est d'enchainer ensuite une requete de la forme :
SELECT * FROM Commande WHERE cmd_user_id IN ( $chaine_ids )
FONCTIONS ASSOCIEES A LA GESTION DES FORMULAIRES
// CHARGEMENT DE TOUTES LES NATURES
$base->bdd_execsql("SELECT * FROM Client ORDER BY nom_client,prenom_client");
$tablenat = $base->bdd_tableversliste( array("id_client","nom_client","prenom_client") );
// LE "LIBELLE" EST LA CONCATENATION DES CHAMPS SUIVANT L'ID
var myData1 = [
["12","Action scolaire"],
["22","Action Sociale"],
...
["24","Urbanisme"]
];
<!-- Objet XML genere par la fonction bdd_table2xml()-->
<xml id="XmlId0">
<request>
<record>
<AGENT_ID>90</AGENT_ID>
<AGENT_NOM>BON</AGENT_NOM>
<AGENT_PRENOM>Michel</AGENT_PRENOM>
<AGENT_DATE_CREATION>2003-09-01 00:00:00</AGENT_DATE_CREATION>
</record>
...
<record>
<AGENT_ID>58</AGENT_ID>
<AGENT_NOM>DUPONT</AGENT_NOM>
<AGENT_PRENOM>Jacques</AGENT_PRENOM>
<AGENT_DATE_CREATION>2003-09-01 00:00:00</AGENT_DATE_CREATION>
</record>
</request>
</xml>
<!-- Nombre d'elements dans l'objet XML = 129 -->
array(
"1" => "Homme",
"2" => "Femme",
"1.1" => "Jean",
"1.2" => "Paul",
"2.1" => "Brigitte",
"2.2" => "Paulette",
"2.3" => "Cathy" )TablePereFils(1,2,3,4,5,6,7)
Liste des paramètres :
1 . Pointeur vers l'objet Base de données "Bdd"
2 . Nom de la table PERE
3 . Nom de l'identifiant dans la table PERE
4 . Nom du libellé dans la table PERE
5 . Nom de l'identifiant dans la table FILS
6 . Nom du libellé dans la table FILS
7 . Pointeur de la tablea FILS vers la table PERE
FONCTIONS ASSOCIEES A LA GESTION DES FORMULAIRES
les fonctions bdd_auto_init(), bdd_auto_security(), bdd_auto_sql(), bdd_auto_header() sont des fonctions spécialisées pour simplifier l'usage de classeForm.
- bdd_auto_init() nécessite 3 paramètres :
1 - Le nom de la table mise à jour par le formulaire
2 - le nom de la clef primaire
3 - le nom de la page qui sera appelée en cas de validation ou d'annulation de saisie
- bdd_auto_security() [ optionnelle ] permet en ajout ou en modification d'initialiser un champ à une valeur donnée. Elle nécessite 2 paramètres :
1 - Le nom du champ
2 - La valeur de ce champ
On utilisera cette fonction par exemple pour affecter à une commande le lien vers le client qui la passe, la valeur du code client sera initialisée au logon puis véhiculée de page en page par une variable de session
- bdd_auto_sql() nécessite 1 seul paramètre :
1 - L'initiale de l'action souhaitée : "A" pour Ajouter, "M" pour Modifier, "C" pour chercher et "E" pour effacer
- bdd_auto_sql() ne nécessite pas de paramètre :
effectue un branchement à l'URL définie au débutles fonctions bdd_param_init(),bdd_param_security(), bdd_param_rec(), bdd_param_load() sont des fonctions spécialisées pour simplifier l'usage de la gestion d'un fichier de paramètres qui aurait la structure suivante :
nom_table_param
param_id INTEGER (PRIMARY KEY) param_clef VARCHAR(50) (INDEXE) param_valeur VARCHAR(255) param_num_client INTEGER (optionnel)
pour une table de paramètres simples partagée par tous les utilisateurs le champ "param_num_client" est inutile. ( bdd_param_security() aussi )
- bdd_param_init() nécessite 3 paramètres :
1 - Le nom de la table des paramètres
2 - le nom du champ clef (param_clef)
3 - le nom du champ valeur (param_valeur)
- bdd_param_security() [ optionnelle ] permet en ajout ou en modification d'initialiser un champ à une valeur donnée. Elle nécessite 2 paramètres :
1 - Le nom du champ
2 - La valeur de ce champ
On utilisera cette fonction par exemple pour affecter un paramètre à chaque client
- bdd_param_load() nécessite 2 paramètre (dont 1 optionnel) :
1 - le nom de l'étiquette du paramètre à chercher
2 - [ optionel ] la valeur par défaut si inexistant dans la table
- bdd_param_rec() nécessite 2 paramètre (dont 1 optionnel) :
1 - le nom de l'étiquette du paramètre à chercher
2 - [ optionel ] la valeur par défaut si inexistant dans la table
Dans n'importe quelle page aillant besoin d'un paramètre de la table, il est facile de récupérer la valeur en 3 lignes :
$base->bdd_param_init("nom_table_param","param_clef","param_valeur");
$base->bdd_param_security('param_num_client',$_SESSION['NUM_CLIENT']);$chemin_lu = $base->bdd_param_load("PARAM1","valeur_par_defaut");
FONCTIONS DIVERSES
A-1 UN SOURCE QUI GERE TOUTES LES FONCTIONS SUR LES ENREGISTREMENT COLLABORATEURS:
<?php
session_start();
include('classeBases.php');
include('./inc_base.php');
include('classeForms.php');
$base = New Bdd;
$base->bdd_connecter_base(BASE);
$delete = isset($_GET['DELETE']);
$base->bdd_auto_init('inv_compte_collaborateurs','COLLAB_ID','hd_collaborateurs_lister.php');
$base->bdd_auto_security('COLLAB_CPT_ID',$_SESSION['NUMERO_DU_CLIENT']);
// DEFINITION DU FORMULAIRE ##############################################################################
$f = New Forms;
$f->frm_Init($delete,'150px');
definition_des_champs();
// ILLUSTRATION DE LA RE-ENTRANCE FORMULAIRE #############################################################
$ret = $f->frm_Aiguiller('COLLAB_ID');
$valeurpardefaut = false;
switch ( $ret ) {
// AJOUT 1ER APPEL #############################################################
case "A0" :
$f->frm_InitConfirm("Ajouter ce nouveau collaborateur ?");
break;
// AJOUT RE-ENTRANT #############################################################
case "A1" :
$_POST['COLLAB_PWD'] = (String) mt_rand(10000, 99999);
$base->bdd_auto_sql( "A" );
$base->bdd_auto_header();
case "M0" :
// MODIFICATION 1ER APPEL #############################################################
$f->frm_InitConfirm("Enregistrer les modifications ?");
$f->frm_InitConfirmCancel("Rétablir les données avant la modification ?");
$base->bdd_auto_sql( "C" );
$f->frm_ChargerLesChamps($base->bdd_resultats_vers_tableau());
break;
case "M1" :
// MODIFICATION RE-ENTRANT #############################################################
$base->bdd_auto_sql( "M" );
$base->bdd_auto_header();
case "L0" :
// EFFACEMENT 1ER APPEL #############################################################
$f->frm_InitConfirm("Effacer ce collaborateur ?");
$f->frm_LibBoutons('Effacer','Quitter','Rétablir');
$base->bdd_auto_sql( "C" );
$f->frm_ChargerLesChamps($base->bdd_resultats_vers_tableau());
break;
// EFFACEMENT RE-ENTRANT #############################################################
case "L1" :
// ATTENTION ON ZAPE !
$base->bdd_auto_sql( "E" );
$base->bdd_auto_header();
default :
$base->bdd_auto_header();
}
?>
<html>
<head>
<title>www.oberlechner.net - EDITER UN UTILISATEUR</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="/css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<p>
<?php
include('classeMenu.php');
$mn = New PopMenu($_SESSION['DEFAULT_SKIN']);
$mn->ShowPopMenu('_datamenu.js');
include('./inc_menu_dynamique.php');
$idclient = $_SESSION['NUMERO_DU_CLIENT'];
?>
</p>
<br>
<br>
<br>
<blockquote><img src="../../popmenu/icones16-16/beos_group.gif" width="16" height="16">
<?php
$initiale = substr($ret,0,1);
if ( $initiale=='A' ) {
$titrefenetre = "<b>SAISISSEZ UN NOUVEAU COLLABORATEUR</b>";
} elseif ( $initiale=='L' ) {
if ( $statutlu==ADMIN ) {
$titrefenetre = "<b>EFFACER UN ADMINISTRATEUR EST INTERDIT</b>";
} else {
$titrefenetre = "<b>EFFACER L'UTILISATEUR CI DESSOUS</b>";
}
} else {
$titrefenetre = "<b>MODIFIER LES DONNEES D'UN UTILISATEUR</b>";
}
print "<span class=titre1>".$titrefenetre."</span><p>";
$f->frm_Ouvrir();
print "</p>";
?>
</blockquote>
</body>
</html>
<?php
function definition_des_champs() {
global $f, $tabstatut ;
$f->frm_ObjetChampTexte("COLLAB_NOM", array( "attrib" => "R",
"label" => "Nom du collaborateur :",
"width" => "300px",
"help" => "Saisissez le nom du collaborateur"
)
);
$f->frm_ObjetChampTexte("COLLAB_EMAIL", array( "attrib" => "RM",
"label" => "Adresse de messagerie :",
"width" => "300px"
)
);
$f->frm_SautLignes(1);
$f->frm_ObjetCoche("COLLAB_ACTIF", array( "label" => "Activité",
"title" => "Le compte est actif",
"help" => "Décocher pour rendre le collaborateur inactif",
"default" => "1"
)
);
}
?>
A-2 UN SOURCE QUI GERE TOUTES LES FONCTIONS DE LA GESTION D'UNE TABLE DE PARAMETRES
<?php
session_start();
include('classeBases.php');
include('./inc_base.php');
include('classeForms.php');
$base = New Bdd;
$base->bdd_connecter_base(BASE);
$base->bdd_param_init("nom_table_param","param_clef","param_valeur");
$base->bdd_param_security('param_num_client',$_SESSION['NUM_CLIENT']);
// DEFINITION DU FORMULAIRE ##############################################################################
$f = New Forms;
$f->frm_Init($delete,'150px');
definition_des_champs();
// ILLUSTRATION DE LA RE-ENTRANCE FORMULAIRE #############################################################
$ret = $f->frm_Aiguiller('');
$valeurpardefaut = false;
switch ( $ret ) {
// MODIF 1ER APPEL #############################################################
case "A0" :
$f->frm_ChampInitialiserValeur("PARAM1", $base->bdd_param_load("PARAM1",10) );
$f->frm_ChampInitialiserValeur("PARAM2", $base->bdd_param_load("PARAM2","valeur par défaut n°=2") );
$f->frm_ChampInitialiserValeur("PARAM3", $base->bdd_param_load("PARAM3","5") );
break;
// MODIF RE-ENTRANT #############################################################
case "A1" :
$base->bdd_param_rec("PARAM1");
$base->bdd_param_rec("PARAM2");
$base->bdd_param_rec("PARAM3");
$f->frm_ChampsRecopier();
break;
default:
header('location: hd_logon_ok.php');
break;
}
?>
<html>
<head>
<title>Paramètrage du client </title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="/css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<p>
<?php
include('classeMenu.php');
$mn = New PopMenu($_SESSION['DEFAULT_SKIN']);
$mn->ShowPopMenu('_datamenu.js');
include('./inc_menu_dynamique.php');
$idclient = $_SESSION['NUM_CLIENT'];
?>
<br>
<br>
<blockquote><br><img src="../../popmenu/icones16-16/services.gif" width="16" height="16"> <span class="titre1">PARAMETRAGES DIVERS</span>
<br>
<?php
$f->frm_Ouvrir();
if ($ret=='A1') {
print "<b>Les paramètres sont enregistrés !</b>";
}
?>
</blockquote>
</body>
</html>
<?php
function definition_des_champs() {
global $f,$tablecomiques;
$f->frm_ObjetChampTexte("PARAM1", array( "attrib" => "RN",
"label" => "Parametre n°=1",
"maxlength" => "4",
"width" => "50px",
"mask" => "####",
)
);
$f->frm_ObjetChampTexte("PARAM2", array( "attrib" => "RU",
"label" => "Parametre n°=2",
"maxlength" => "200",
"width" => "200px" )
);
$f->frm_SautLignes(1);
$f->frm_ObjetSlider("PARAM3", array("label" => "Parametre n°=3",
"orientation" => "H",
"width" => "80px",
"mini"=> "0",
"maxi"=>"10",
);
}
?>