Clé de tableau non définie "POST"

Par tsaromino, il y a 3 ans


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, il y a 3 ans

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

quenti77, il y a 3 ans

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 ?

tsaromino, il y a 3 ans

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