bonjour
j'ai téléchargé le code source du cours "développer un site de A a Z en php", en le passant sur le serveur il m’affiche l'erreur suivante (Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}')
merci pour votre aide

15 réponses


jihad80
Auteur

Rebonjour
j'ai ajouté "SetEnv PHP_VER 5" dans le .htaccess, mon site est hébergé chez OVH ,
deux autres erreurs me sont apparues

Warning: require(/home/test/www/controller/Controller.php) [function.require]: failed to open stream: No such file or directory in /home/test/www/core/Dispatcher.php on line 42

Fatal error: require() [function.require]: Failed opening required '/home/test/www/controller/Controller.php' (include_path='.:/usr/local/lib/php') in /home/test/www/core/Dispatcher.php on line 42

merci

Bonjour,

Pourrait-on avec le code des pages concernées ?

Merci

jihad80
Auteur

je n'est pas très bien compris votre question pourrait-on quoi
merci pour votre aide

Pardon,

Pourrait-on avoir le code des pages concernées ?

jihad80
Auteur

les pages du code source " développer un site de A a Z en php "

oui c'est ça. celle que vous avez téléchargé.
Enfin seulement la page Dispatcher.php et celle qui affiche le 1er message d'erreur que vous avez cités.

jihad80
Auteur

voici le code de la page Dispatcher.php

<?php
/**
* Dispatcher
* Permet de charger le controller en fonction de la requête utilisateur
**/
class Dispatcher{

    var $request;   // Object Reques
    /**
    * Fonction principale du dispatcher
    * Charge le controller en fonction du routing
    **/
    function __construct(){
        $this->request = new Request(); 
        Router::parse($this->request->url,$this->request); 
        $controller = $this->loadController();
        if(!in_array($this->request->action , get_class_methods($controller)) ){
            $this->error('Le controller '.$this->request->controller.' n\'a pas de méthode '.$this->request->action); 
        }
        call_user_func_array(array($controller,$this->request->action),$this->request->params); 
        $controller->render($this->request->action);
    }
    /**
    * Permet de générer une page d'erreur en cas de problème au niveau du routing (page inexistante)
    **/
    function error($message){
        header("HTTP/1.0 404 Not Found");
        $controller = new Controller($this->request); 
        $controller->set('message',$message); 
        $controller->render('/errors/404');
        die(); 
    }
    /**
    * Permet de charger le controller en fonction de la requête utilisateur
    **/
    function loadController(){
        $name = ucfirst($this->request->controller).'Controller'; 
        $file = ROOT.DS.'controller'.DS.$name.'.php'; 
        require $file; 
        return new $name($this->request);  
    }

}

Essayer ceci et dite moi si vous avez un message:

function loadController(){
        // Stocke le nom du controller
        $name = ucfirst($this->request->controller).'Controller';
        // Adresse du controller
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        // Test si le controller existe
        if (!file_exists($file)){
            echo 'Le controller "'.$this->request->controller. '" n\'existe pas';
            die();
        }
        // Include du controller
        require($file);

        return new $name($this->request);
    }

Quelle est la page ou vous avec eu cette erreur "(Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}')" ?

jihad80
Auteur

oui j'ai un message "Le controller "" n'existe pas"

pour l'autre eurreur c'etait sur la page Request.php,j'ai pus le régler en ajoutant SetEnv PHP_VER 5 a mon .htaccess

Puis-je voir cette page.

jihad80
Auteur
<?php
class Request {
    public $url; // URL appellé par l'utilisateur
    function __construct(){
        $this->url = $_SERVER'PATH_INFO']; 
    }

}

Ah oui, je sais d'où viens le problème.
Suivez-le cours complet et vous comprendrez.

Sans être méchant, votre problème viens de la logique.

Un conseil pour la suite: il ne suffit pas de télécharger des codes et penser qu'il vont fonctionner de suite.
Surtout que la, le code est incomplet.

Aller, je vais être gentil.
Voici le code de request.php

Si vous avez des soucis avec ce code par la suite, suivez le tutoriel.

<?php
/**
 * Class contenant tout ce qui a été demandé par l'utilisateur
 */
class Request {

    /**
     * @var string Url appelé par l'utilisateur
     */
    public $url;

    /**
     * @var int Numéro de la page
     */
    public $page = 1; 

    public $prefix = false;
    public $data = false;

    function __construct(){
        $this->url = isset($_SERVER"PATH_INFO"]) ? $_SERVER"PATH_INFO"] : '/';

        // Détection des pages
        if(isset($_GET'page']))
            if(is_numeric($_GET'page']))
                if ($_GET'page'] > 0)
                    $this->page = round($_GET'page']);

        // Si des données ont été envoyés
        if (!empty($_POST)){
            // Déclare un objet vide pour y insérer des variables
            $this->data = new stdClass();
            foreach ($_POST as $key => $value) {
                $this->data->$key = $value;
            }
        }
    }
}
?>
jihad80
Auteur

Déjà je vous remercie pour le temps que vous m avez accordé et pour votre aide
j'ai commencé le cour sans télécharger le code source mais j'ai rien compris , donc je me suis dis que peut être si je télécharge le code je vais comprendre mieux :)
le code que vous m avez donné affiche le même message (Le controller "" n'existe pas)
je vais suivre votre conseil et reprendre le code pas a pas en suivant le tuto :)
merci encore une fois pour votre aide c'est gentil

Je vous en prie.
Si vous n'arrivez pas à suivre ce tutoriel, c'est peut-être que vous n'avez pas le niveau.
Il serait surement intéressant pour vous de comprendre (je pense que c'est ce qu'il vous manque) la POO (Programmation orienté objet).

En tout cas, bon cours. (^_^)