FonfonBlog, CMS Blog - version 1.0 Alpha

Eléphant du PHP | 388 Messages

06 janv. 2011, 18:07

- Y'a vraiment beaucoup beaucoup beaucoup de commentaire initule (//fin if, //fin class), tout ca c'est a virer, tout comme les anciens code.
Ouep c est juste pour moi pour pas m’emmêler dans les boucles.
- Il manque quasiment tout les public pour les fonctions, j'en ai rajouter beaucoup, il va en rester a chaque fois que t'en voix un tu le met ;)
- Pareil pour les var
Oké, je ferai attention ^^.
- t'as 2 fois la même fonction verifSyntaxeTitre (appcontrol) et renommeImage (class image), y'a surment moyen de mixer les 2, les 2 fichier etant en encodage russe en plus
Je préfère pour l'instant garder les deux méthodes. Tu as des soucis d'encodages sur les fichiers ?
Le tableau des caractères est comme ceci :
       $carac['CARACT'] = array('À' => 'a', 'Á' => 'a', 'Â' => 'a', 'Ã' => 'a', 'Ä' => 'a','Å' => 'a', 
								'Ç' => 'c', 'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 
								'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 
								'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Õ' => 'o', 'Ö' => 'o', 
								'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'Ý' => 'y', 
								'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a','å' => 'a',								
								'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 
       							'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 
								'ð' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o',
								'ù' => 'u', 'ú'	=> 'u', 'û' => 'u', 'ü' => 'u',
								'ý' => 'y', 'ÿ' => 'y',
       							'ø'=>'o', 'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z','Þ'=>'B', 'ß'=>'Ss'
- j'ai changer ton bloque d'en-tete de fichier les carrés avec les étoiles autour c'est pas pratique, la ta un bon bloque type DocBook (qui faudra remetre partout), tout neuf, par contre va falloir documenter tout y compris les classes
- y'a 2 classes pgsql et postgre ?
postgres est à virer. Elle a été remplacé par pgsql tout simplement.
- les __construct vide ou avec juste parent::__construct sont inutile, idem pour tout les __destruct que t'as fait, aucun ne sert
ça prend automatiquement le constructeur de la classe parente ?
- je te conseil de changer de lib pour openid, elle est vraiment bourrer d'erreur
C est pourtant la lib fourni par JanRain :?

EDIT : j'ai envoyer le lien en MP :wink:[/quote]
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

06 janv. 2011, 18:12

- les __construct vide ou avec juste parent::__construct sont inutile, idem pour tout les __destruct que t'as fait, aucun ne sert
ça prend automatiquement le constructeur de la classe parente ?
oui, et destruct c'est juste pour un appelle quand le script est finie ou que tu fait un unset de la class, faut savoir que quand ton script php est terminer les variable n'existe plus

Eléphant du PHP | 388 Messages

06 janv. 2011, 22:17

J'ai commencé à faire quelques modifications :).
Elles sont accessibles sur SVN

Sinon c est faisable ça ?
<?php if (class_exists('PDO')) { ?>
	<input type="checkbox" name="pdo" />&nbsp;Utiliser PDO (Php Database Object)<br />
<?php } ?>
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

07 janv. 2011, 11:04

J'ai commencé à faire quelques modifications :).
Elles sont accessibles sur SVN

Sinon c est faisable ça ?
<?php if (class_exists('PDO')) { ?>
	<input type="checkbox" name="pdo" />&nbsp;Utiliser PDO (Php Database Object)<br />
<?php } ?>
oui bien sur, tu peux faire comme ca c'est plus lisible
<?php if (class_exists('PDO')): ?>
	<input type="checkbox" name="pdo" />&nbsp;Utiliser PDO (Php Database Object)<br />
<?php endif; ?>

Eléphant du PHP | 388 Messages

07 janv. 2011, 11:20

Nickel alors =D !!

Par contre, je viens de revenir à une ancienne version sur le SVN car je me suis aperçu y avoir fait une tite connerie...Si j'ai le temps, je fais une MAJ comme il faut ce midi :).
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Eléphant du PHP | 388 Messages

18 janv. 2011, 15:39

Apres 3 semaines de pause, je vais me motiver à reprendre le développement du CMS. Pour information, voila une liste de choses qu'il reste à faire

- Finir la classe bd_pdo ! Important
- En cours Optimiser la section Administration en sortant les code Javascript
- En cours Obfusquer ces codes javascript
- Régler une bonne fois pour toutes le problèmes de MySQL avec la récupération d'un dernier identifiant ! Important
- Fait ! Modifier les blocs d'en-têtes par celui proposé par stealth35
- Faire de la doc :cry:

J'ai modifié un peu le CSS en rajoutant line-height à la balise p ainsi que les texte en couleur #505050

En parallèle, j ai commencé le site "vitrine" de l'application mais y a pas grand chose à metter dedans, c est 70% de HTML/CSS et 30% de PHP ^^

Allez je me motive, c est reparti...
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Eléphant du PHP | 388 Messages

21 janv. 2011, 11:04

J'ai commencé à développer la classe de connexion PDO...mais je commence à douter de son utilité dans mon appli (uniquement pour ce cas, je ne dis pas que PDO est inutile :D , ce qui est faux ^^).
J'ai quelques soucis pour la faire de la même façon que les autres classes de connexion (je rapelle que chaque classe de connexion implemente une interface, et que la classe est instancié à partir d'une classe Connexion générale via factory() )

Voila la classe à l'heure actuelle :
class Db_pdo implements connexionBDI {
	
	public function __construct(){
		//$this->connected = false;
		/**
		* TODo : construire le driver de connexion ici
		**/	
	}
	
	public function connexion($host, $db, $loginDB, $passDB, $typePDO){
		
		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
		$this->m_nConnect 	= new PDO($typePDO.':host='.$host.';dbname='.$db,$loginDB,$passDB, $pdo_options);
			
		if(!$this->m_nConnect){
			throw new MyException ('Probleme de connexion PDO '.$this->psConnect.'<br />Resultat connexion :  '.$this->m_nConnect);
			$date = date("Ymd",time());
			$logDestination = LOGS . 'log_' . $date . '.txt';
			$message = date("d/m/Y H:i", time()) . ' Probleme connexion PDO' . chr(10);
			error_log($message,3,$logDestination);
		}//fin if
			
	}
	
	/**
	* Methode obsolete ?
	**/
	public function prepareInsertionDonnees($donnees){
		$donnesOK = $donnees;
		return $donnesOK;
	}
	
	
	public function requete($requete){
		if(empty($requete)){
			throw new MyException('Pas de requete SQL envoye');
		}else{
			/**
			* TODO : Utiliser exec() ou query() ??
			**/
			$this->sResult = $this->m_nConnect->query($requete);
			//$this->messError = pg_result_error($requete);
			return $this->sResult->setFetchMode(PDO::FETCH_OBJ);
		}
	}
	
	/**
	* TODO : recuperation dernier identifiant
	**/
	/**public function recupLastId($table, $champ=null){
		$seq = $table . '_' . $champ . '_seq';
		$sql = "SELECT last_value AS lastid FROM \"{$seq}\"";
		$this->sResult = pg_query($sql);
		$this->tabLastId = $this->recupDonnesRequete($this->sResult);
		return $this->tabLastId[0];
	}**/
	
	public function recupDonnesRequete($resultat){
		$tabResult = array();
		while($aListe = resultat->fetch()){
			$tabResult[] = $aListe;
		}
		return $tabResult;
	}
	
	public function deconnexion(){
		//if(isset($this->sResult) && is_resource($this->sResult)){
		//	pg_free_result($this->sResult);
		//}	
	} 
	
	public function backup($host, $db, $loginDB, $passDB){
		$date 	= date("Ymd");
		$backup = BACKUP_BD . "backup_".$date.".backup";
		//$command = "pg_dump $db >  $backup";
		system($command);
	}
	
}
Liste de mes points bloquants :
- Connexion : j'ai vu que selon le SGBD, la connexion n'etait pas identique, donc je pensais ecrire le contenu de new PDO() dans le constructeur, selon le SGBD
- prepareInsertionDonnees : qu'est-ce que je emt la dedans pour proteger mes données :/ ? Un addslashes() ?
- requete : D apres ce que j ai compris, on utilise query() pour une requete de type SELECT et un exec() pour un UPDATE ou INSERT
- Deconnexion : y'a quelque chose à mettre ?
- Backup : là...c est le flou total :s
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

21 janv. 2011, 11:27

PDO devrait plutôt remplacer, les autres classes de connexion
- prepareInsertionDonnees : qu'est-ce que je emt la dedans pour proteger mes données :/ ? Un addslashes() ?
normalement c'est PDO::quote, mais PDO a les requête préparer, qui existe dans pgsql et mysqli, et que j'ai fait pour mysql
- requete : D apres ce que j ai compris, on utilise query() pour une requete de type SELECT et un exec() pour un UPDATE ou INSERT
non tu peux utiliser les 2 dans tout les cas, query renvoie les données, exec renvoie le nombre de ligne affecter.
- Deconnexion : y'a quelque chose à mettre ?
sauf en connexion persistante, la déconnexion est automatique pour chaque extension sql
- Backup : là...c est le flou total :s
ca dépend de ton pilote


enfaite c'est pas PDO qui faut faire comme classe, mais PDO_Mysql, PDO_SQLite, PDO_Pgsql ....

Eléphant du PHP | 388 Messages

24 janv. 2011, 14:54

Et moi qui souhaitait ne faire qu'une classe PDO...topi.
Mais là ou ça me gêne, c'est que j'ai l'impression que ce n'est pas possible de choisir les deux systèmes pour l'interaction avec la BD...Soit je passe en tout PDO, soit par mysql_*, pg_*...impossible de faire les 2.

A moins de remodifier toutes mes requêtes SQL présentes dans les classes en faisant des requêtes préparées comme dans ton lien...
Je suis un peu pomé là...
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

24 janv. 2011, 16:46

Et moi qui souhaitait ne faire qu'une classe PDO...topi.
Mais là ou ça me gêne, c'est que j'ai l'impression que ce n'est pas possible de choisir les deux systèmes pour l'interaction avec la BD...Soit je passe en tout PDO, soit par mysql_*, pg_*...impossible de faire les 2.

A moins de remodifier toutes mes requêtes SQL présentes dans les classes en faisant des requêtes préparées comme dans ton lien...
Je suis un peu pomé là...
je problème c'est qu'une requête est différente suivant le serveur SQL, il faut créer des classe ou peu importe le serveur la fonction est la même, et c'est la classe qui créée la bonne requête derrière, finalement dans ton code tu ne devrais avoir aucune requête SQL direct, faire des chose un peu a la Doctrine, ou autre : http://www.weirdog.com/blog/wdcore/api- ... ecord.html

Eléphant du PHP | 388 Messages

24 janv. 2011, 20:01

Et moi qui souhaitait ne faire qu'une classe PDO...topi.
Mais là ou ça me gêne, c'est que j'ai l'impression que ce n'est pas possible de choisir les deux systèmes pour l'interaction avec la BD...Soit je passe en tout PDO, soit par mysql_*, pg_*...impossible de faire les 2.

A moins de remodifier toutes mes requêtes SQL présentes dans les classes en faisant des requêtes préparées comme dans ton lien...
Je suis un peu pomé là...
je problème c'est qu'une requête est différente suivant le serveur SQL, il faut créer des classe ou peu importe le serveur la fonction est la même, et c'est la classe qui créée la bonne requête derrière, finalement dans ton code tu ne devrais avoir aucune requête SQL direct, faire des chose un peu a la Doctrine, ou autre : http://www.weirdog.com/blog/wdcore/api- ... ecord.html
En gros, faire une espece de classe, appModel() par exemple, qui préconstruit mes requetes SQL ? Un peu comme un framework quoi.
Mais je ne vois pas comment ça resout mon soucis avec la couche Model tournant avec ou sans PDO :/
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

25 janv. 2011, 11:22

Et moi qui souhaitait ne faire qu'une classe PDO...topi.
Mais là ou ça me gêne, c'est que j'ai l'impression que ce n'est pas possible de choisir les deux systèmes pour l'interaction avec la BD...Soit je passe en tout PDO, soit par mysql_*, pg_*...impossible de faire les 2.

A moins de remodifier toutes mes requêtes SQL présentes dans les classes en faisant des requêtes préparées comme dans ton lien...
Je suis un peu pomé là...
je problème c'est qu'une requête est différente suivant le serveur SQL, il faut créer des classe ou peu importe le serveur la fonction est la même, et c'est la classe qui créée la bonne requête derrière, finalement dans ton code tu ne devrais avoir aucune requête SQL direct, faire des chose un peu a la Doctrine, ou autre : http://www.weirdog.com/blog/wdcore/api- ... ecord.html
En gros, faire une espece de classe, appModel() par exemple, qui préconstruit mes requetes SQL ? Un peu comme un framework quoi.
Mais je ne vois pas comment ça resout mon soucis avec la couche Model tournant avec ou sans PDO :/
parce que derrière peu importe l'extension, tu pourras faire la même requête

Eléphant du PHP | 388 Messages

25 janv. 2011, 11:41

Voila un peu comment je vois la chose :

- Ma classe appControl, devient une classe static, avec uniquement des methodes dont j ai besoin un peu partout
- Toutes mes classes n'hériteront plus de appControl mais d'une classe de construction SQL (constructSQl() tiens par exemple)
- Le constructeur de constructSQl() instanciera la classe connexionBD(), chose qui était dans appcontrol() précédemment
- dans chaque classe, je ferai un tableau contenant les tables lié par clé etrangeres, l equivalent du $belongsTo() de CakePHP (je ne connais que ce framework)
- Chaque methode de mes classes ne feront appel qu'a des methodes de constructSQl() pour constuire els requetes, comme find() pour faire un select, save() pour un INSERT ou UPDATE, ou del() pour effacer
- Dans constructSQl(), on retrouvera les méthodes citées au dessus, mais en plus d'autres classes pour construire les requetes SQL, nottament pour les jointures, les conditions etc...

Un exemple : affichage d un article
function affichArticle(){
$article = $this->find($this->_getIdArticle())->join($tabForeignKey);
}
La methode find(), prend en parametre l identifiant de l'article pour le WHERE, et le tableau de jointures pour joindre les tables liées à la table articles.
Une fois la requete construite, il faut l executer avec la methode requete() dans ConnexionBD(), qui fait appel à la fonctionr equete() dans db_monSGBD()

c est encore brouillon mais je commence à voir le truc. Putain c est beaucoup de taffe...
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

25 janv. 2011, 11:45

ça viendra progressivement :wink:, normalement si c'est bien fait ca pose pas beaucoup de problème :wink:

Eléphant du PHP | 388 Messages

25 janv. 2011, 13:03

j'ai trouvé cette classe : http://www.phpcs.com/codes/PHP5-CLASSE-PDO_51370.aspx

Elle a l'air pas mal pour faire la classe constructSQL() dont je parlais.

EDIT : par contre, elle ne liste pas les jointures de tables pour les SELECT...
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre