Page 1 sur 1

Probleme d'execution très bizare

Posté : 10 sept. 2010, 09:49
par Trinou
Bonjour tout le monde !

J'ai un problème qui m'échappe totalement : j'ai fait un site en local qui fonctionne très bien et quand j'essaye de le mettre sur serveur plus rien ne va.
Plus rien ne s'affiche pourtant il semblerait que mes fichiers include soient bien chargés...

Je vous met le code pour que ce soit plus clair :
index.php
<?php

//--------------------------
//Include files
//--------------------------

//configuration file
include_once './config.php';

echo $init_file;

//framework classes and interfaces
include_once $root_app.'Ecom/views/View.php';
include_once $root_app.'Ecom/views/ActionView.php';
include_once $root_app.'Ecom/views/TaskView.php';
include_once $root_app.'Framework/ControllerImpl.php';
include_once ($root_app.'Framework/Data.php');
include_once ($root_app.'Framework/StringData.php');
include_once ($root_app.'Framework/Request.php');
include_once ($root_app.'Framework/Response.php');
include_once ($root_app.'Database/MySQLConnection.php');

//Connection with database
echo "1";
$connect = MySQLConnection::getInstance();
echo "2";
try{
	$connect->connect();
	echo "connecté";
}catch (ConnectionException $e){
	echo $e;
}
echo "youpi";
//---etc etc etc
Si je met des echo dans mes classes que je charge (juste après les includes avant le " Class trucmuche {") il me les affiche, donc je suppose que ces pages sont chargées...

mais ensuite, il ne m'affiche que le 1 (voir les echo 1, 2 dans mon index.php). et je ne vois pas pourquoi le MySQLConection n'est pas executé....

MySQLConnection.php
<?php

include_once($root_app."Database/ConnectionException.php");
echo "je suis le fichier MySQLCOnnection";
class MySQLConnection {
	private $connectionId;
	private $dbconnection;
	private $isconnected;
	
	private function _construct(){
		echo "construct";
		$this->isconnected=false;
	}
	
	public static final function getInstance(){
		$instance = null;
		echo "je passe ici";
		if(!isset($isconnected)){
			$instance = new MySQLConnection();
		}else{
			$instance = $this;
		}
		return $instance;
	}
	
	public function connect(){
		$this->connectionId = mysql_connect('toto.fr', 'root', '');
		echo "je passe dans la boucle de connexion";
		if (!$this->connectionId) {
    		die('Connexion impossible : ' . mysql_error());
		}
		$this->dbconnection = mysql_select_db('toto',$this->connectionId) or die('Database error');
		
		if(isset($this->connectionId) && $this->dbconnection){
			$this->isconnected = true;
		}else{
			$this->isconnected=false;
			throw new ConnectionException('Connection failed');
		}
	}
	
Help !! Je suis au bout du roulot et tout ça m'échappe completement !
Le plus bizare c'est que cette version a déjà fonctionné avant mais on n'arrive pas à savoir pourquoi. Est ce que ce serait lié au serveur ??????

Merci d'avance :priere:

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 13:10
par Cyrano
Où donc est définie ta variable $root_app ?

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 13:55
par Trinou
Dans le fichier ./config.php

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 14:23
par Cyrano
Je suis pas certain que ce soit ça, mais il existe une différence entre « _ » et « __ »
Or dans ta classe, tu as écrit :
<?php
//...
    private function _construct(){
        echo "construct";
        $this->isconnected=false;
    }
Au lieu de
<?php
//...
    private function __construct(){
        echo "construct";
        $this->isconnected=false;
    }

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 14:32
par Trinou
Et non ça n'a rien changé (mais ça m'explique d'autres problèmes que j'avais eu :lol: merci)

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 14:39
par Cyrano
Ta question est un peu incomplète.

Dans ton code, tu as mis des echo("qqch") un peu partout : donc tu dois facilement voir jusqu'à quel moment ça fonctionne et donc tu auras un point de départ à donner. Il faut cerner le bug, définir le point qui n'est pas bon et trouver l'origine de l'erreur. Là, on a pas assez d'éléments pour te répondre.

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 14:51
par Trinou
Bah j'ai dit au début, que le code du index.php ne s'éxécutait que jusqu'au echo "1";
Mais je ne comprends pas du tout pourquoi....

Re: Probleme d'execution très bizare

Posté : 10 sept. 2010, 15:05
par Cyrano
Bon effectivement j'avais pas regardé ta classe en détail :
Je me demande si tu as bien assimilé certains principes de la POO et de la construction d'un singleton.
Là j'ai pas le temps d'entrer dans les détails, mais voici la base fondamentale de ce que tu devrais avoir :
<?php
class MySQLConnection
{
    private static $_instance;

    private function __construct()
    {
        echo "Construction de l'instance";
    }

    public static final function getInstance()
    {
        echo "je passe ici";
        if(!isset(self::$_instance))
        {
            self::$_instance = new MySQLConnection();
        }
        return self::$_instance;
    }
}
Teste déjà avec ça et reviens pour une suite éventuelle, mais surtout iobserve bien les différences avec ton code actuel et demande-toi pourquoi ça marche dans un cas et pas dans l'autre. Demande-toi aussi ce qui ne va pas dans ton code, en particulier si tu as bien initialisé toutes tes variables dans la méthode statique getInstance() au moment où tu y fais appel.

Re: Probleme d'execution très bizare

Posté : 11 sept. 2010, 02:56
par devlop78
Je confirme, le code est bizarre ...

Code : Tout sélectionner

private function _construct(){ echo "construct"; $this->isconnected=false; } public static final function getInstance(){ $instance = null; echo "je passe ici"; if(!isset($isconnected)){ $instance = new MySQLConnection(); }else{ $instance = $this; } return $instance; }
$isconnected != $this->isconnected
De plus, __construct() est appelé après getInstance(), donc initialiser une connexion pour l'éteindre juste après ...
Et le principe de getInstance() est d'être appelé plusieurs fois (mais ce n'est pas une obligation !!). Donc, faire un $instance = null et recréer à chaque fois une nouvelle connexion ....

Re: Probleme d'execution très bizare

Posté : 11 sept. 2010, 09:04
par Cyrano
Je confirme, le code est bizarre ...
Tout ça pour dire quoi en fin de compte ? Si ta réponse pouvait apporter un élément aidant à l'apprentissage pour Trinou, ce serait intéressant, mais là ça n'apporte rien du tout et ressemble bien davantage à un ricanement... :non:

Pas sûr que tu aurais beaucoup aimé ça à l'époque où tu apprenais les mêmes chose :-k

Re: Probleme d'execution très bizare

Posté : 13 sept. 2010, 15:20
par Trinou
Je sais bien que mon code est bizarre :lol: Si j'ai des erreurs d'exécutions aussi peu claires c'est bien qu'il y a un problème.
J'ai réussi à défaire quelques problèmes. Maintenant je bute autre part, et bien sûr je trouve ça toujours aussi bizarre....

Fichier index.php
Blabla plus haut avec ma chaine de connexion SQL qui fonctionne désormais
//creation of the application controller
$_SESSION['controller']= new ControllerImpl();

$ctrl = $_SESSION['controller'];
//----------------------
//Action management
//----------------------

if(!isset($_REQUEST['action'])){
    echo " pas isset";
    $request = new Request($_REQUEST);
    $response = new Response();
    echo " 1 ";
    $listener = $ctrl->getListener("default");
    echo "classe : ".get_class($listener);
    $data = $listener->handle($request);
    echo $data;
    $view = $ctrl->getView("default");
    echo "pourp2";
    $view->display($data,$response);
Fichier init.php
<?php
echo " ok 1 ";
//-----------------------------------------------------------------------------
// includes des views
//-----------------------------------------------------------------------------
include_once 'Ecom/views/DefaultView.php';
include_once 'Ecom/views/ErrorView.php';
include_once 'Ecom/views/ActionView.php';
include_once 'Ecom/views/TaskView.php';
include_once 'Ecom/listeners/DefaultListener.php';
include_once 'Ecom/listeners/ActionListener.php';
include_once 'Ecom/listeners/TaskListener.php';

echo " ok 8 ";

$controller =$_SESSION['controller'];
echo " ok 9 ";
/**
*Pour chaque action que l'on passera dans l'URL, on associe une view et un listener
*/

//-----------------------------------------------------------------------------
// registration of the views and default error page
//-----------------------------------------------------------------------------

$controller->registerView ('default', new DefaultView());
echo " ok 10 ";
$controller->registerView ('error', new ErrorView());
echo " ok 11 ";
$controller->registerView ('action', new ActionView());
echo " ok 12 ";
$controller->registerView ('newAction', new ActionView());
echo " ok 13 ";
$controller->registerView ('task', new TaskView());
echo " ok 14 ";
//-----------------------------------------------------------------------------
// registration of the listeners
//-----------------------------------------------------------------------------
$controller->registerActionListener ('default', new DefaultListener());
$controller->registerActionListener ('action', new DefaultListener());
$controller->registerActionListener ('newAction', new ActionListener());
$controller->registerActionListener ('task', new TaskListener());
 ?>
Fichier DefaultView.php
<?php
echo "dv 1";

echo "dv 2";
include_once "Ecom/views/View.php";
include_once "Ecom/model/ActionPlanDAO.php";
include_once "Ecom/model/TaskDAO.php";
echo "dv 3";

/**
* Cette view est celle par défaut, elle appelé lorsqu'aucune action n'est spécifiée dans l'url
*/

class DefaultView implements View{
    /**
    * La fonction display permet d'affiche du contenu html dans la page
    * elle est appelé dans index.php
    * @param Data $data la donnée renvoyée par le handle des listeners
    * @param Response $response l'objet créé dans index.php
    */
    public function display(Data $data, Response $response){
        //----------------Action Part--------------------//
        $actionPlanDAO = new ActionPlanDAO();

        $result = $actionPlanDAO->_findAll();
        
        $xml_output  = '<?xml version="1.0" encoding="UTF-8"?>'.'<carnet>';
        while ($row = mysql_fetch_array($result)) {
            $xml_output .= '<truc>';
        }
        $xml_output .= '</carnet>';
        
        $fp = fopen("actionExport.xml", 'w+');
        fputs($fp, $xml_output);
        fclose($fp);
        $response->write("<br/>");
        $response->write('<div id="grid-example2"></div><a href="actionExport.xml">Voir le fichier XML</a><br/>');
    
        $link1 = "'index.php?action=action'";
        $response->write('<input type="button" value="View actions" name="action_link" onclick="self.location.href='.$link1.'" /><br/>');
        
        //---------------------Task Part---------------------//
        $taskDAO = new TaskDAO();
        $result = $taskDAO->_findAll();
        
        $xml_output  = '<?xml version="1.0" encoding="UTF-8"?>'.'<carnet>';
        while ($row = mysql_fetch_array($result)) {
            $xml_output .= '<truc>';
        }
        $xml_output .= '</carnet>';
        
        $fp = fopen("taskExport.xml", 'w+');
        fputs($fp, $xml_output);
        fclose($fp);
        $response->write("<br/>");
        $response->write('<div id="grid-example"></div><a href="taskExport.xml">Voir le fichier XML</a><br/>');
        
        
        $link2 = "'index.php?action=task'";
        $response->write('<input type="button" value="View tasks" name="task_link" onclick="self.location.href='.$link2.'" />');
        $response->write("<br/><br/>");
        
        
    }
}
Dans mon fichier index.php, j'inclue le fichier init.php. Donc lorsque je lance index.php sans paramètre il est sensé m'afficher la default view, mais ça coince au moment du echo "ok 10"; à l'écran ça ne va que jusqu'au echo ok 9, donc je suppose que le problème est ici :

$controller->registerView ('default', new DefaultView());

Mais qu'est ce qui cloche ???
(En tout cas merci de votre aide, ça m'aide à tenir !)

Re: Probleme d'execution très bizare

Posté : 14 sept. 2010, 14:21
par Trinou
OK c'est bon j'ai trouvé !

Il fallait que je fasse mon include init.php entre ces lignes là :
$_SESSION['controller']= new ControllerImpl();

$ctrl = $_SESSION['controller'];

Et que je fasse un session_start() au tout début !

Merci pour les autres erreurs !