 |
|
Page 1 sur 1
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Posté le: Ven Mai 06, 2011 10:34 pm Sujet du message: Projet de CMS personnel |
|
|
SPARADRAP
Projets
Inscrit le: 06 Mai 2011
Messages: 4
|
Salut !
Alors, comme promis dans ma présentation, je vais dans ce post vous partagez mon travail, pour qu'il soit entre autre confronté à des yeux averti.
L'idée de départ c'est de pouvoir réduire un maximum le chose que je dois taper et re-taper réguliÚrement, ce qui est vraiment trÚs lourd quand on vient de taper sa 50Úme requete SQL par exemple.
J'ai donc commencer par une classe qui me permettrait simplement d'avoir accĂšs facilement Ă un outils qui me construise lui mĂȘme mes requĂȘtes selon mes directives.
J'ai pas mal découvert l'utilisation des tableau d'ailleurs (vraiment utile ! mangez en !)
En y rĂ©flĂ©chissant, je me suis dit que si il Ă©tait possible d'automatiser la construction de requĂȘtes SQL, il devrait ĂȘtre assez simple de crĂ©er un constructeur de formulaire aussi ! Et paf, me voilĂ lancĂ© dans une autre classe appelĂ©e simplement "Formulaire".
Bref, j'en suis venu à la conclusion qu'avec du temps je pourrais construire un systÚme qui me permettent de géré pas mal de chose, alors je me suis fait une petite liste de d'outils à créer et en voici la liste (je mettrais le code au fur et à mesure de l'avancement du projet) :
Mysql : Comme expliquer plus, permet de construire et d'exĂ©cutĂ© des requĂȘtes.
Formulaire : Outil de création de formulaire selon la demande.
Secure : Outil qui permettra d'analyser et de protéger toutes les données venant de l'utilisateur ou de la base de données. Mais aussi quelques fonctions importante comme un captcha, fonction anti brute force, etc... C'est l'outil de sécurisation du systÚme.
Fichier : Outil qui permettra la gestion de tout types de fichier, mais également la connexion FTP, génération d'image aléatoire (trop envie d'étudier la création d'image en php !), etc...
Contenu : Alors cet outils lĂ , se sert de Mysql, Secure et Formulaire. Il s'arrange pour recevoir les donnĂ©es (via Formulaire ou Mysql), les protĂ©gĂ©es (via secure) et de les renvoyĂ©es, au module qui Ă requit des donnĂ©es, rangĂ©es et prĂȘte Ă l'affichage.
Archiver : Un outil que j'ai envie de crĂ©er, un truc simple, qui permet d'archiver automatiquement des donnĂ©es quand une table dĂ©passe un certains nombre d'entrĂ©e. Il permettra donc l'allĂ©gĂ© les tables et donc, d'optimiser les requĂȘtes SQL (en thĂ©orie).
Aller ! un peu de code, voici ma classe Mysql, le reste suivra avec le temps
 |
 |
<?php
//----------------------------------------------------------------------\\
// \\
// Classe Mysql : \\
// Auteur : Sparadrap \\
// \\
// RĂŽle : \\
// Cette classe permet de gĂ©nĂ©rer des requĂȘtes SQL simplement et \\
// directement de les traitées. \\
// \\
// Son rÎle est de transmettre ou de recevoir les données de la base \\
// en les organisant directement selon la demande et le niveau de \\
// l'utilisateur. \\
// \\
//----------------------------------------------------------------------\\
class Mysql
{
//--------------------------------------------------------------\\
// \\
// Fonction d'execution : \\
// Lorsqu'on a créer notre requete sql, elle sera traitée ici \\
// dans cette fonction. \\
// \\
// Il y a plusieurs parametres Ă la fonction : \\
// \\
// $requete -> La requete qu'on vient de créer. \\
// \\
// $opt -> le type de requete, si c'est un select on fera un \\
// query(), sinon on fait un exec(). Donc il suffit de préciser \\
// QUERY ou EXEC \\
// \\
//--------------------------------------------------------------\\
private function mysql_execute($requete, $champ, $opt)
{
try
{
// Déclaration type d'un appel à connexion en PDO
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
// On vérifie le type d'action voulue :
// Si c'est une requĂȘte pour rĂ©cupĂ©rĂ© des donnĂ©es
if($opt == 'QUERY')
{
// Déclaration des tableaux, qui contiendront les données transmises par la base.
$i = 0;
$tableau = NULL;
$tableau2 = NULL;
$reponse = $bdd->query(''. $requete .'');
// On met les données dans les tableaux.
// PremiÚre boucle while qui permet la création d'une premiÚre ligne de données.
while($donnees = $reponse->fetch())
{
// Seconde boucle qui reprend le nom des champs (via le tableau $champ transmis dans la fonction)
// Elle crée les colonnes.
foreach($champ as $cle => $element)
{
// Et on tape les données dans les cases :)
$tableau[$cle] = $donnees[$cle];
}
$tableau2[$i] = $tableau;
$i++;
}
return $tableau2;
}
// Si c'est une requĂȘte pour exĂ©cutĂ© un envoi, une Ă©dition ou une suppression de donnĂ©es
if($opt == 'EXEC')
{
$bdd->exec(''. $requete .'');
return TRUE;
}
// Sinon, erreur, soit le paramĂštre est faux ou absent.
else
{
die('Erreur : pas de parametre !');
return FALSE;
}
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
return FALSE;
}
// Commentaire sur cette fonction :
// Je sais que je dois retravailler cette fonction dans la gestion des tableau.
}
//--------------------------------------------------------------\\
// \\
// Les paramĂštres des fonctions : \\
// \\
// $table -> nom de la table sur laquelle on doit agir. \\
// \\
// $champ -> tableau contenant le nom des champs ET leur valeurs\\
// analysé et sécurisé au préalable bien entendu :) \\
// \\
// $opt -> contient les différentes conditions dont on aurait \\
// éventuellement besoin (WHERE, AND, etc...). Pour $opt les \\
// condition sql doivent ĂȘtre Ă©crite complĂštement. \\
// \\
// $acces -> accréditation de l'utilisateur, une vérification \\
// est faite, si $acces est diffĂ©rent de TRUE alors on empĂȘche \\
// la crĂ©ation de la requĂȘte et on affiche un message d'erreur. \\
// \\
//--------------------------------------------------------------\\
public function mysql_envoi($table, $champ, $acces)
{
if($acces != TRUE)
{
echo '<center><strong>Vous n\'ĂȘtes pas autorisĂ© Ă faire cette action.</strong></center><br />';
}
else
{
$a = NULL;
$nbr_champ = NULL;
// Calcul du nombre de champ
foreach($champ as $nbr)
{
$nbr_champ++;
}
// Préparation des deux partie de la requete.
// Premiere partie de la requete tous les champs qui doivent etre traité.
$requete = 'INSERT INTO '.$table.' (';
// Deuxieme partie de la requete, toutes les valeurs.
$requete2 = ') VALUES(';
// Concaténation des données.
foreach($champ as $cle => $element)
{
// D'abord la premiere partie de la requete.
// On concatĂšne les noms des champs.
$requete = $requete.$cle;
if($a != ($nbr_champ - 1))
{
$requete = $requete.', ';
}
// Ensuite la deuxieme partie de la requete.
// On concatĂšne les valeurs des champs.
$requete2 = $requete2.'\''. $element .'\'';
if($a != ($nbr_champ - 1))
{
$requete2 = $requete2.', ';
}
$a++;
}
// Pour finir on concatÚne les deux partie de la requete et les options éventuelle.
$requete = $requete.$requete2.')';
Mysql::mysql_execute($requete, NULL, 'EXEC');
return TRUE;
}
}
public function mysql_recuperation($table, $champ, $opt, $acces)
{
if($acces != TRUE)
{
echo '<center><strong>Vous n\'ĂȘtes pas autorisĂ© Ă faire cette action.</strong></center><br />';
}
else
{
$a = NULL;
$nbr_champ = NULL;
// Construction de la requete.
// On veut récupéré des données, donc on opÚre sur un SELECT.
$requete = 'SELECT ';
foreach($champ as $nbr)
{
$nbr_champ++;
}
// Boucle de concaténation des champ sur lesquels ont doit agir.
foreach($champ as $cle => $element)
{
$requete = $requete.$cle;
if($a != ($nbr_champ - 1))
{
$requete = $requete.', ';
}
$a++;
}
// On défini la table sur laquelle agir.
$requete = $requete.' FROM '.$table.' ';
// Concaténation des conditions.
if($opt != NULL)
{
$requete = $requete.$opt;
}
$donnees = Mysql::mysql_execute($requete, $champ, 'QUERY');
return $donnees;
}
}
public function mysql_edition($table, $champ, $opt, $acces)
{
if($acces != TRUE)
{
echo '<center><strong>Vous n\'ĂȘtes pas autorisĂ© Ă faire cette action.</strong></center><br />';
}
else
{
$a = NULL;
$nbr_champ = NULL;
$requete = 'UPDATE '.$table.' SET ';
foreach($champ as $nbr)
{
$nbr_champ++;
}
foreach($champ as $cle => $element)
{
$requete = $requete.$cle.' = \''. $element .'\'';
if($a != ($nbr_champ - 1))
{
$requete = $requete.', ';
}
$a++;
}
$requete = $requete.' '.$opt;
Mysql::mysql_execute($requete, NULL, 'EXEC');
return TRUE;
}
}
public function mysql_suppression($table, $opt, $acces)
{
if($acces != TRUE)
{
echo '<center><strong>Vous n\'ĂȘtes pas autorisĂ© Ă faire cette action.</strong></center><br />';
}
else
{
$requete = 'DELETE FROM '.$table.' '.$opt;
Mysql::mysql_execute($requete, NULL, 'EXEC');
return TRUE;
}
}
}
?>
|
Voilà , je pense vraiment pas que ce soit parfait. Par exemple j'aurais pu fusionné les fonctions et analysé simplement la demande (je veux une requete SELECT ou une UPDATE) à passer en parametre de fonction, mais je voulais d'abord une bonne lecture de chaque type de requete.
Si vous avez des suggestions, des améliorations, ou autre, n'hésitez surtout pas !
Bien Ă vous,
Sparadrap  |
|
|
|
 |
|
|
|
 |
Posté le: Sam Mai 07, 2011 11:17 am Sujet du message: |
|
|
SPARADRAP
Projets
Inscrit le: 06 Mai 2011
Messages: 4
|
Heu.. effectivement, je découvre la conception, c'est en majeure partie pour ça que je viens sur ce forum, pour pouvoir avoir une certaine structure via des réflexions, des commentaires, des suggestions, conseils.
Je dois apprendre tout seul, j'ai pas la thune pour suivre des formations professionnelles, ni de diplÎme pour aller dans une haute école ou une université.
J'avais déjà effectivement reçu le conseil de m'intéresser au MVC et design pattern, je n'avais par contre pas connaissance de l'UML.
Je tente donc de faire mon ModÚle (via Contenu, qui offre un modÚle de gestion de contenu), le contrÎleur (Secure) et la vue, qui sera simplement les modules permettant des actions bien précises pour l'utilisateur.
Je ne sais pas si je fonctionne dans la bonne voie, je test, voir comment ça marche et si ça fonctionne, j'essaye d'améliorer.
Merci pour Doxygen, ça à l'air intéressant (et faciliterait pas mal la tùche pour une future documentation).
Merci !
Sparadrap |
|
|
|
 |
Posté le: Sam Mai 07, 2011 3:35 pm Sujet du message: |
|
|
TorTukiTu
Site Admin

Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message |
 |
 |
Je dois apprendre tout seul, j'ai pas la thune pour suivre des formations professionnelles, ni de diplÎme pour aller dans une haute école ou une université. |
Oula, sache que si tu n'as pas de diplome, aussi bon que tu sois, tu seras probablement payé au smic, (et avec de trÚs trÚs nombreuses heures sup non payées [Merci la Syntec], ce qui est une constante dans le domaine de l'informatique) pour ton travail. C'est comme ça que ça marche en France.
Qui plus est, faire du code tranquillement dans son coin est une chose, en faire son métier en est une autre. Tu as des grosses contraintes de temps et surtout tu devras avoir une rigueur qui ne s'invente pas.
Donc, sans vouloir te décourager, je te conseille d'oublier l'idée de te lancer professionellement là dedans sans faire de formation.
Tortue 974. |
|
|
|
 |
|
 |
|
Page 1 sur 1
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|