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)