Création de fonctions de recherche
Bonjour à tous,
Je suis actuellement en train de développer une application PHP orienté objet en relation avec une base de données MySQL.
J'ai déjà créé plusieurs classe de la façon suivante :
La plus importante est donc Database.php qui permet de se connecter ainsi que de lier toutes les autres classes
Elle ressemble à ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <?php
require ("SurgeonData.php");
require ("CaseData.php");
class Database
{
private $con;
public function __construct($host,$username,$password,$database)
{
$this->con = new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password);
}
public function getSurgeon($sql)
{
$statement = $this->con->prepare($sql);
$statement->execute();
while($row = $statement->fetch())
{
$dataSet[] = new SurgeonData($row);
}
if(!empty($dataSet))
return $dataSet;
else
return null;
}
public function getCase($sql)
{
$statement = $this->con->prepare($sql);
$statement->execute();
while($row = $statement->fetch())
{
$dataSet[] = new CaseData($row);
}
if(!empty($dataSet))
return $dataSet;
else
return null;
}
}
?> |
J'ai évidemment beaucoup d'autres fonctions autres que getSurgeon() et getCase().
Mais voici à quoi ces classes ressemblent :
SurgeonData.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php
class SurgeonData
{
private $id_surgeon;
private $lastname_surgeon;
...
public function __construct($dbRow)
{
$this->id_surgeon = $dbRow['id_surgeon'];
$this->lastname_surgeon = $dbRow['lastname_surgeon'];
...
}
public function getSurgeonID() {return $this->id_surgeon;}
public function getSurgeonLastname() {return $this->lastname_surgeon;}
...
}
?> |
C'est tout pour l'orienté objet ! Et dans mon code principal j'ai besoin d'afficher différentes informations venant de plusieurs tables. Voici mon procédé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| $db = new Database("mon adresse","mon user","mon password","ma database");
$dataSet = $db->getCase ("
select *
from cases
inner join [OTHER_TABLE]
on cases.id_cases=[OTHER_TABLE].case_id
and ...
order by ...;
");
if($dataSet)
{
foreach($dataSet as $data) //Display all current cases
{
echo "Case n° " .$data->getCaseID()."<br />";
echo "Case : " .$data->getCaseCase()."<br />";
echo "Date : " .$data->getCaseDateSurgery()."<br />";
//Ici je ne peux effectuer que les fonctions présentes dans CaseData.php, donc je dois faire toute l'opération précédente pour chaque table différente que je veux query
$dataSet2 = $db->getSurgeon ("
select *
from surgeons
inner join cases
on cases.surgeon_id=surgeons.id_surgeon
and cases.id_cases = ".$id_case."
");
if($dataSet2)
{
foreach($dataSet2 as $data2) //Display all current cases
{echo "Surgeon : " .$data2->getSurgeonLastname()."<br />";}
}
}
}
else
echo "No result found"; |
Pour résumer, comment puis-je créer une fonction qui me faciliterait l’affichage des mes données ?
Histoire que je n'ai plus qu'à faire par exemple :
Code:
1 2
| $newFunction = newFunctionToGetSurgeon()
echo "Something : " .$newFunction->getAlreadyCreatedFunction().; |
Dois-je changer ma façon de procéder, changer mon système de connection à la base de donnée ? Ou bien est-ce possible de créer une fonction à partir de la structure actuelle de mon projet ?
Cordialement,
EDIT
Voilà j'ai trouvé ma solution pour ceux que ça intéresse ...
J'ai créé query.php qui gère à lui seul la connection ainsi que toutes les requêtes, cela permet ainsi au code principal d'être beaucoup plus lisible et clair
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php
include_once "../class/Database.php";
$db = new Database("localhost","root","","3dside");
function getCurrentCases()
{
global $db;
if($db != null)
{
$dataSet = $db->getCase
("
select *
from cases
inner join progress
on cases.id_cases=progress.case_id
and progress.current=1
order by cases.date_surgery;
");
return $dataSet;
}
else "Erreur interne dans [query.php] contactez l'administrateur";
}
?> |
Et dans le code principal il suffit juste d'y inclure le fichier query.php et faire ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
$currentCases = getCurrentCases();
foreach($currentCases as $data) //Display all current cases
{
echo "Case n° " .$data->getCaseID()."<br />";
echo "Case : " .$data->getCaseCase()."<br />";
echo "Date : " .$data->getCaseDateSurgery()."<br />";
$currentSurgeon = getCurrentSurgeon();
foreach($currentSurgeon as $data)
{
echo "Surgeon : " .$data->getSurgeonLastname()."<br />";
}
}
?> |