FonfonBlog, CMS Blog - version 1.0 Alpha

Eléphant du PHP | 397 Messages

16 août 2010, 15:43

J ai trouvé ce moyen pour executer le script sous MySQL :
http://lucasforge.2bopen.org/2008/06/ex ... using-php/

Est-ce que ça peut faire l'affaire à la place du shell_exec ?
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

18 août 2010, 22:26

faut te définir a partir de quelle version de php et quelles extensions ton code marche, entre php 5.1 et 5.3 y'a eu beaucoup de temps, niveau extension aussi, par exemple mysqli accepte les requêtes multiples

EDIT : petit rappelle pour l'extension mysql (http://www.php.net/manual/fr/mysqli.overview.php) le tableau de fin

Eléphant du PHP | 397 Messages

19 août 2010, 09:28

MySQLi serait interessent c'est vrai, je viens de jeter un oeil à la doc et à ton tableau. Apparement, ça ne devrait pas trop modifier ma couche Model. Est ce que je choisie la methode POO ou procédurale....je n ai jamais utilisé MySQLi mais je ne penses pas avoir trop de difficulté.

Je vais tenter de l'utiliser. Apres vu que le choix du SGBD se fait entre MySQL ou PostgreSQL, peut-être est-il possible de proposer MySQL, MySQLi et postgreSQL ?

Derniers debug de fait :
- Suppression des backup
- Upload de CSS (mais soucis avec la librairie Pear::MIME_Type sur le serveur alors que OK en local)
- Réorganisation des fichiers CSS et Javascript
- Legère modification du cloudTag pour que ça ne déborde plus du cadre
- Suppression de try/catch ne servant à rien
- Finition du RSS (mais encore soucis avec caracteres HTLM)
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Eléphant du PHP | 397 Messages

19 août 2010, 15:55

Je viens d'ajouter MySQli à ma couche model et premier test : pas de bug :).
Mais je ne sais pas comment faire appliquer $mysqli->real_escape_string à ma methode prepareInsertionDonnees($donnes) qui est comme ça :
/**
* 1 : MySQL
* 2 : PostGreSQL
* 3 : MySQLi
**/
switch($this->psConnect){
	 			case 1 :	 				
	 				$donnesOK = array_map('mysql_real_escape_string', $donnees);
	 			break;
	 			case 2 :	 				
	 				$donnesOK = array_map('pg_escape_string', $donnees);
	 			break;	
	 			case 3 :
	 				$donnesOK = array_map('', $donnees);
	 			break;	
Je ne penses pas passer par le array_map.

Par contre, si je suis amené à modifier pour utiliser plusieurs SGBD, il serait ptete mieux de faire plusieurs classes genre : dbo_mysql.php, dbo_postgresql.php, dbo_mysqli.php etc...selon le type de SGBD, ma classe connexionBD ferait appel à la classe fille qu'il faut...à creuser ^^
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

19 août 2010, 17:43

avec la fonction mysqli_real_escape_string, mais tout ca que tu fais la c'est quasiment PDO :wink:
Modifié en dernier par stealth35 le 19 août 2010, 20:37, modifié 1 fois.

Eléphant du PHP | 397 Messages

19 août 2010, 19:06

avec la fonction http://www.php.net/manual/fr/mysqli.rea ... string.php, mais tout ca que tu fais la c'est quasiment PDO :wink:
J avais vu qu'il fallait utiliser cette methode, mais c etait juste de quelle façon l'utiliser dans le switch case. Je pense qu'un foreach sur mon tableau et application de la methode sur les valeurs du tab et emballé c est pesé \0/
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

19 août 2010, 19:26

avec la fonction http://www.php.net/manual/fr/mysqli.rea ... string.php, mais tout ca que tu fais la c'est quasiment PDO :wink:
J avais vu qu'il fallait utiliser cette methode, mais c etait juste de quelle façon l'utiliser dans le switch case. Je pense qu'un foreach sur mon tableau et application de la methode sur les valeurs du tab et emballé c est pesé \0/
y'a pas de switch pour PDO il fais déjà tout ca en interne, seul quelque requête seront différentes (et encore...)

ViPHP
AB
ViPHP | 5818 Messages

19 août 2010, 20:33

A ta place pour faciliter le dev je ferais mysqli en procédural (puisque c'est quasiment la même syntaxe que mysql excepté qu'il faut passer l'identifiant de connexion) et le mode objet serait réservé à pdo...

Eléphant du PHP | 397 Messages

19 août 2010, 20:58

A ta place pour faciliter le dev je ferais mysqli en procédural (puisque c'est quasiment la même syntaxe que mysql excepté qu'il faut passer l'identifiant de connexion) et le mode objet serait réservé à pdo...
Daccord, je prend note.
Je voudrai revenir sur une de mes idées cité plus haut : séparer en plusieurs fichiers
- La class connexionBD, qui lit le fichier database.ini et qui appele la classe db_*.php qu'il faut, qui est la class mère (methode connexion, deconnexion, requete...)
- les classes db_mysql.php, db_postgresql.php, db_mysqli.php (puis pourquoi pas une evolution avec db_oracle, db_msql etc...) qui sont les classes filles contenant leur propre methode connexion, deconnexion, requete.

Je n'arrive pas à bien discerner, comment ds mes methodes de connexionBD, je fais appel à celles de la classe fille qui m'interesse. Je dois pas prendre le problème du bon côté je pense mais je ne vois pas comment faire.

EDIT : j ai appliquer la méthode procedurale comme AB l'a dit mais j ai un soucis (c etait trop beau ^^).

Ma methode connexion contient donc ceci :
$this->m_nConnect = mysqli_connect($this->psHost, $this->psUserName, $this->psMdp, $this->psDB);
Mais pour proteger mes données, j applique donc un mysqli_real_escape_string comme ceci (j envoie un tableau 'champ' => 'valeur' et fais ceci :
foreach($donnees as $champ=>$value){
	$valueProtege = mysqli_real_escape_string($this->m_nConnect, $value);
	 $donnesOK[$champ] = $valueProtege;
}
mais ça me retourne une erreur de ce genre : Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, boolean given
Tandis que de cette façon ça fonctionne :
foreach($donnees as $champ=>$value){
	$valueProtege = mysqli_real_escape_string(mysqli_connect($this->psHost, $this->psUserName, $this->psMdp, $this->psDB), $value);
	 $donnesOK[$champ] = $valueProtege;
}
Je ne comprend pas trop le soucis, vu que d'apres la doc, c est bien la valeur $link, contenant le mysqli_connect, qu'il faut passer comme premier paramètre
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

19 août 2010, 23:17

c'est que c'est pas connecté :wink:

Eléphant du PHP | 397 Messages

20 août 2010, 00:04

Si ce n'était pas connecté aucune autre requête SQL ne devrait fonctionner alors. Et ce n'est pas le cas.
Sur mon appli en ligne, je testais la connexion utilisateur. J'envoyais donc login + mdp et ça me ressortait rien. Tandis que les autres requêtes SQL pour afficher articles sur la page d'accueil, ainsi que les blocs etc...s'affichent bien.
Troublant je trouves :D
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5462 Messages

20 août 2010, 00:06

Si ce n'était pas connecté aucune autre requête SQL ne devrait fonctionner alors. Et ce n'est pas le cas.
Sur mon appli en ligne, je testais la connexion utilisateur. J'envoyais donc login + mdp et ça me ressortait rien. Tandis que les autres requêtes SQL pour afficher articles sur la page d'accueil, ainsi que les blocs etc...s'affichent bien.
Troublant je trouves :D
dans ton appli tu fais plusieurs connexion déconnexion par page, suffis que celle la n'est pas marché


EDIT : tu te sert pas du SVN ?
Modifié en dernier par stealth35 le 20 août 2010, 17:57, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

20 août 2010, 06:05

dans ton appli tu fais plusieurs connexion déconnexion par page, suffis que celle la n'est pas marché
J'ai pas regardé ton appli mais si comme le dit stealth35 tu fais plusieurs connexion/déconnexion par page, c'est peut-être (probablement) ça la cause du souci. Ne fait pas de déconnexions... php est assez grand et le fera bien tout seul. En tous cas dans de nombreux cas de figures une déconnexion suivi d'une connexion peut ne pas fonctionner... donc évites les déconnexions car dans un script à peine complexe ça peut déjà poser des soucis.
Avec mysql comme avec mysqli je me contente juste de vider la mémoire après la connexion avec mysql_free_result mais jamais je n'utilise mysql_close car c'est une usine à problème. D'autant plus que son non utilisation ne pose pas de souci comme le dit la doc :
L'utilisation de mysql_close() n'est pas habituellement nécessaire, puisque les connexions non persistantes ouverts sont automatiquement fermées à la fin l'exécution du script.

Eléphant du PHP | 397 Messages

20 août 2010, 09:42

Même en commentant le mysqli_close(), ça fait pareil...En attendant de trouver une solution, y appliquer mysql_real_escape_string peut-il fonctionner ?

Concernant la séparation en plusieurs classes, apparement il faudrait que je passe par une Interface, et chacune de mes classes filles implementeront l'interface (class db_postgresql Implements connexionBD{ }). Mais vu que je n'ai jamais fait d'interface en PHP (un peu en Java à la fac :D souvenir, souvenir...), je ne vois pas trop encore comment l'interface est appelé à partir de mes classes Articles, User etc...
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 3609 Messages

20 août 2010, 09:55

Mais pourquoi ne pas utiliser PDO ou d'autres classes d'abstraction de bases de données?