Bonjour à tous

Je suis en train de creer un site de depot d'annonces immobiliere en php objet mvc .
J'ai un soucis au niveau du form login quand je le submit.

Voici l'erreur afficher sur mon navigateur :

Attention : Clé de tableau non définie "POST" dans C:\xampp\htdocs\immo\routes\Router.php à la ligne 24

Attention : l'argument foreach() doit être de type array|object, null donné dans C:\xampp\htdocs\ immo\routes\Router.php à la ligne 24

La function ou le probléme viens ( fichier Router.php )

public function run(){
foreach ($this->routes[$_SERVER['REQUEST_METHOD']] as $route){   /// Ligne 24 
if ($route->matches($this->url)){
$route->execute();
}
}
return header('HTTP/1.0 404 Not Found');
 }

Mon form login dans le fichier views/Auth/login.php

<h1>Login</h1>
    <?php if(isset($errorMessage)) { ?>
        <div><?php echo $errorMessage; ?></div>
    <?php } ?>
    <form method="post" action="">
        <label>Username:</label>
        <input type="text" name="username" required><br><br>
        <label>Password:</label>
        <input type="password" name="password" required><br><br>
        <input type="submit" value="Login">
    </form>

J'ai essaye de modifier la function run comme ceci mais toujours le soucis..

public function run(){
    if (isset($this->routes['POST'])) {
        foreach ($this->routes['POST'] as $route) {
            if ($route->matches($this->url)){
                $route->execute();
                return;
            }
        }
    }

    foreach ($this->routes[$_SERVER['REQUEST_METHOD']] as $route) {
        if ($route->matches($this->url)){
            $route->execute();
            return;
        }
    }

    return header('HTTP/1.0 404 Not Found');
}

3 réponses


quenti77
Réponse acceptée

Hello,

Est-ce que tu as affiché le contenu de ta propriété routes avec un var_dump avant la ligne de l'erreur ?

var_dump($this->routes);

Que vaut $_SERVER['REQUEST_METHOD'] ?

Déjà regarde ça et ensuite la solution serait de tester en effet que ça existe ou non et en fonction faire l'action voulu. Exemple :

public function run(): void
{
    $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; // je te laisse regarder la doc de "??"
    $routes = $this->routes[$method] ?? [];

    foreach($routes as $route) {
        if ($route->matches($this->url)) {
            $route->execute();
            return;
        }
    }

    header('HTTP/1.0 404 Not Found', true, 404);
    return;
}

Mais cela m'étonne qu'une erreur simple de type case X dans le tableau Y inconnue ne te sois pas familier et donc que tu n'arrive pas à comprendre. Es-tu sûre que tu as les bases requises pour faire ce code ? Ou est-ce que tu suis une vidéo comme ça sans comprendre ?

Salut, c'est bon j'ai trouvé !

En fait, j'ai regardé des vidéos, mais maintenant je pratique sans les vidéos. Je comprends beaucoup mieux quand je fais comme ça. Je fait un projet sans regarder de video

Qu'as tu fais du coup ? Car quand je vois le code que tu as mis en haut j'ai peur :D