4. Le php
4.1. La connexion php-oracle
Pour la relation entre php et oracle, nous avons utilisé les fonctions
OCI de php. Ces fonctions nous ont été utiles pour la connexion
à la base et l’exécution des requêtes.
Pour plus de « propreté », nous avons réuni toutes
les utilisation de ces méthodes dans une classes conx pour ainsi facilité
le développement.
Ex : fonctions execRequete :
function
execRequete($sql) { $stmt = ociparse($this->conn,$sql); ociexecute($stmt); $nrows = ocifetchstatement($stmt, $results); $res = new resultat(); $res->init($results,$nrows); ocifreestatement($stmt); return($res); } |
Cette fonction a pour but d’exécuter une requête SQL et de
renvoyer un objet contenant les résultats de cette requête et le
nombre de résultats.
4.2. Les expressions régulières
Les expressions régulières qui ont été prises en
comptes sont les suivantes :
- et, and, &, &&, +
- ou, or, |, ||
- not, -, !
Pour repérer ces expressions dans la chaîne de caractères
entrée par l’utilisateur, il a fallu parser cette chaîne,
pour cela il a tout d’abord fallu découper cette chaîne en
une liste de mots ou d’expressions. Cette étape a été
réalisée à l’aide de la fonction explode :
$tab = explode(" ", $string);
Cette fonction sépare la chaîne de caractères $string à
chaque fois qu’elle repère un espace puis le résultats est
mis dans le tableau $tab. Une fois ce tableau obtenu, il suffit de le parcourir
pour construire la requête.
4.3. La création des requêtes
Comme on l’a vu précédemment, la requêtes est construite
en fonction des expressions régulières contenues dans la chaîne
de caractères entrée par l’utilisateur :
if ($etat == 1 && $i != 0) { //etat = 1 -> présence de et } elseif ($etat == 2 && $i != 0) { //etat = 2 -> présence de ou } elseif ($etat == 3 && $i != 0) { //etat = 3 -> présence de not } else { if ($etat == 0){ //etat = 0 -> pas d’expressions régulières}if($par == 0) { //premier mot} else $etat = 0;} else { |
On voit donc clairement que la requête suis les expressions régulières
mais aussi l’ordre dans lequel la chaîne de caractères a
été tapée.
Une fois la requête crée, l’exécution et l’affichage de la requête est demandée.
4.4. L’affichage des résultats
Nous avions envie que les résultats s’affichent pour groupe de dix pour cela il a fallu utiliser un moyen détourné pour que la requête ne renvoie que les dix résultats voulus : ce moyen est d’englober la requête principal par une autre requête dans laquelle une restriction est posée quand aux résultats voulus.
select a.* from (select rowum num + requete principale) a where a.num between 1 and 10 |
Cette requête retournera les dix premiers résultats de la requête principale.
Donc avec cette possibilité, il suffisait ensuite d’appeler la fonction d’affichage avec en paramètre les pages voulues et nous avons ainsi pu réaliser l’interface comme nous le voulions c’est à dire avec la possibilité de faire Suivant/Précédent mais aussi de cliquer directement sur la page voulue.