Problème DAOFactory et consors

Résolu
vlec Messages postés 3 Date d'inscription lundi 16 novembre 2009 Statut Membre Dernière intervention 17 novembre 2009 - 16 nov. 2009 à 23:19
vlec Messages postés 3 Date d'inscription lundi 16 novembre 2009 Statut Membre Dernière intervention 17 novembre 2009 - 17 nov. 2009 à 15:28
Bonjour,

Alors voilà, j'ai un petit problème, non en fait un gros problème. :)
Je fais actuellement un site pour une association. Site dans l'ensemble assez simple, en php, avec une base Mysql qui contient 3 tables.
J'ai essayé de faire de la programmation de type MVC et pour la gestion d'accès aux tables mysql j'ai fait des DAO.

J'ai un controleur qui dispatch donc en fonction des actions choisies.
Je fais donc swich et case.
J'ai différentes classes Entities, de même que plusieurs classes actions, des classes formulaires, des classes vues et des classes DAO donc.

Le problème qui se pose c'est que si dans mon controleur je ne mets qu'une seule action qui fait une màj d'une table ça fonctionne correctement, mais quand je mets une autre action qui fait une maj d'une autre table (appartenant à la mm base) là y'a problème.

Je ne peux mettre en effet qu'un seul include d'action.

Voici les include en début de mon controleur :
include('entities/Client.php');
include('entities/Commentaire.php');
include('actions/ActionInscrire.php');
include('actions/ActionCommentaire.php');
include('vues/VueClient.php');
include('vues/VueCommentaire.php');
include('others/FormInscription.php');
include('others/FormCommentaire.php');

le fait d'avoir :
include('actions/ActionInscrire.php');
include('actions/ActionCommentaire.php');

en mm temps fait planter lorsque je veux faire une ou l'autre action.
Si je ne mets qu'un seul include, l'action en question se passe correctement.

Vous allez me dire qu'y a t'il dans ces classes Action.
L'Action commentaire est la suivante :

<?php
include('daos/DAOFactory.php');

class ActionCommentaire {

function execute($form){
$commentaire = new Commentaire();
$commentaire->setProjet($form->getProjet());
$commentaire->setCommentaire($form->getCommentaire());

$daoCommentaire = DAOFactory::createDAOCommentaire();
$n = $daoCommentaire->insert($commentaire);
return $commentaire;
}
}
?>

L'Action Inscrire est la suivante :
<?php

include('daos/DAOFactory.php');

class ActionInscrire {

function execute($form){
$client = new Client();
$client->setNom($form->getNom());
$client->setPrenom($form->getPrenom());
$client->setAdresse($form->getAdresse());
$client->setMdp($form->getMdp());

$daoClient = DAOFactory::createDAOClient();
$n = $daoClient->insert($client);
return $client;
}
}
?>

Voilà pour les Classes Action.
Pour ce qui est des DAO

Mon DAOFactory
<?php

include('daos/DAOMysqlClient.php');

class DAOFactory {
static function createDAOClient(){
$dao = new DAOMysqlClient();
return $dao;
}
static function createDAOCommentaire(){
$dao = new DAOMysqlCommentaire();
return $dao;
}
}
?>

Le DAOClient :
<?php

abstract class DAOClient {
abstract function insert($client);
abstract function select($c) ;
abstract function selectAll();


}
?>

Le DAOCommentaire :
<?php

abstract class DAOCommentaire {
abstract function insert($commentaire);
abstract function select($c) ;
abstract function selectAll();
}
?>

Au tour des DAOMysql
DAOMysqlClient

<?php

include("daos/DAOClient.php");
include("daos/DAOMysqlManager.php");
class DAOMysqlClient extends DAOClient{

function insert($c){
$cx = DAOMysqlManager::getConnection();
$sql = "insert into Agora.membre (nom,prenom,adresse,mdp) ";
$sql = $sql."values ('".$c->getNom()."'";
$sql = $sql.", '".$c->getPrenom()."'";
$sql = $sql.", '".$c->getAdresse()."'";
$sql = $sql.", '".$c->getMdp()."')";

$count = mysql_query($sql, $cx);
if(!$count){
die('Requête '.$sql. 'Impossible: ' . mysql_error());
}
$count = mysql_insert_id();
DAOMysqlManager::closeConnection();
return $count;
}

Je ne mets que la première fonction. Les 2 autres existent

DAOMysqlCommentaire
<?php

include("daos/DAOCommentaire.php");
include("daos/DAOMysqlManager.php");
class DAOMysqlCommentaire extends DAOCommentaire{

function insert($c){
$cx = DAOMysqlManager::getConnection();
$sql = "insert into Agora.comments (projet,commentaire) ";
$sql = $sql."values ('".$c->getProjet()."'";
$sql = $sql.", '".$c->getCommentaire()."')";
$count = mysql_query($sql, $cx);
if(!$count){
die('Requête '.$sql. 'Impossible: ' . mysql_error());
}
$count = mysql_insert_id();
DAOMysqlManager::closeConnection();
return $count;
}

Et pour finir mon DAOMysqlManager
<?php

class DAOMysqlManager {

var $nom_base_donnees = "Agora";

static function getConnection(){
// Connexion permanente au serveur MySQL : mysql_Pconnect
$conn = mysql_connect('localhost:8889', 'root', 'root');
if (!$conn) {
die('Impossible de se connecter : ' . mysql_error());
}

// Choix de la base sur laquelle travailler
mysql_select_db($nom_base_donnees, $conn);
return $conn;
}

static function closeConnection(){
mysql_close();
}
}
?>

Bon je pense que j'ai fait le tour.
Le problème viendrait d'un conflit de connexion Mysql ? J'avoue être totalement perdu, ça fait 11h que je passe sur ce satané problème aujourd'hui et là je sature, je ne vois pas la solution au problème.

Si quelqu'un de courageux a analysé mon code et voit quel est le problème, je lui en serait extrêmement reconnaissant.

Merci à ceux qui auront lu jusqu'au bout ce pavé je vous dis bravo. Dernière précision j'utilise MAMP (étant un utilisateur Mac)

4 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
17 nov. 2009 à 01:01
Si je me fie seulement à "Si je ne mets qu'un seul include, l'action en question se passe correctement. "

Je serais porter à dire que le problème vient peut-être du fait que tu include 2 fois le fichier "daos/DAOFactory.php". Essaie de changer "include('daos/DAOFactory.php')" par "include_once('daos/DAOFactory.php')".
3
vlec Messages postés 3 Date d'inscription lundi 16 novembre 2009 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 10:21
Et bien je te remercie tu as vu juste.
Vraiment super, parce que là je ne savais vraiment pas quoi faire.

C'est la première fois que je fais du php, j'étais surtout habitué à faire du Java sur Netbeans, me retrouver là à faire du php sur un éditeur de texte basique ça change quelque peu. :-)
L'avantage c'est que ça oblige d'avoir une plus grande rigueur je trouve.

Enfin c'est super, vraiment merci beaucoup. Je ne connassais pas le include_once, je ne risque pas de l'oublier maintenant.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 nov. 2009 à 11:00
Salut,

Si la réponse convient n'oublies pas de la valider


un éditeur de texte basique ça change quelque peu. :-)

Pourquoi ne pas faire du PHP sur Netbeans ??


Cordialement,


Kohntark -
0
vlec Messages postés 3 Date d'inscription lundi 16 novembre 2009 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 15:28
Pour Netbeans en fait j'ai un problème car mon ordi a rendu l'âme donc je suis revenu sur un vieux macbook qui a pas mal vécu et c'est horrible Netbeans dessus, ça rame vraiment trop.

Et désolé de ne pas avoir validé. Dans l'euphorie...
0
Rejoignez-nous