Projet de CMS personnel

Moderator: Mod

Projet de CMS personnel

Postby SPARADRAP » Fri May 06, 2011 10:34 pm

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) :

[b:2471b2bb46]Mysql :[/b:2471b2bb46] Comme expliquer plus, permet de construire et d'exécuté des requêtes.
Formulaire : Outil de création de formulaire selon la demande.
[b:2471b2bb46]Secure :[/b:2471b2bb46] 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.
[b:2471b2bb46]Fichier :[/b:2471b2bb46] 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...
[b:2471b2bb46]Contenu[/b:2471b2bb46] : 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.
[b:2471b2bb46]Archiver[/b:2471b2bb46] : 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 :)


[code:1:2471b2bb46]<?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;
}
}
}

?>
[/code:1:2471b2bb46]

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 :)
SPARADRAP
Projets
 
Posts: 4
Joined: Fri May 06, 2011 8:49 pm

Postby TorTukiTu » Sat May 07, 2011 9:17 am

En gros, tu découvres la conception quoi...

Je te conseille de te renseigner sur les modèles de conception, MVC par exemple, les designs patterns et l'UML.

Pour commenter ton code, va plutot voir du côté de Doxygen ou JavaDoc.

Tortue 974.
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message

Postby SPARADRAP » Sat May 07, 2011 11:17 am

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
SPARADRAP
Projets
 
Posts: 4
Joined: Fri May 06, 2011 8:49 pm

Postby TorTukiTu » Sat May 07, 2011 3:35 pm

[quote:9289400626]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é. [/quote:9289400626]

Oula, sache que si tu n'as pas de diplome, aussi bon que tu sois, tu seras probablement [b:9289400626]payé au smic[/b:9289400626], (et avec de [b:9289400626]très très nombreuses heures sup non payées [Merci la Syntec][/b:9289400626], 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.
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message


Return to Php

Who is online

Users browsing this forum: No registered users and 3 guests

cron