Undefined index: POST - ?!

Par simon.mlp, il y a 9 ans


Bonjour,

Voila je rencontre un petit problème avec mon router ([https://www.grafikart.fr/tutoriels/php/router-628]())

L'erreur en question est :

Notice: Undefined index: POST in /[...]/inc/class/router/router.php on line 38

Warning: Invalid argument supplied for foreach() in /var/www/webengine/inc/class/router/router.php on line 38

Code (l.38) :

public function run(){ if(!isset($this->routes[$_SERVER['REQUEST_METHOD']])){ header('HTTP/1.0 404 Not Found'); } foreach($this->routes[$_SERVER['REQUEST_METHOD']] as $route){ if($route->match($this->url)){ return $route->call(); } } header('HTTP/1.0 404 Not Found'); }

c'est un simple formulaire en POST/GET qui fait bugger ...

Je voudrai faire une formulaire d'inscription mais je ne comprend pas très bien cette erreur ... merci de votre aide !

19 réponses

betaWeb, il y a 9 ans

Si tu soumets ton formulaire en POST, il te faut récupérer les data en POST côté backend.
Montre-nous le code de ton formulaire stp.

simon.mlp, il y a 9 ans

Je comprend mon erreur ...
Il faut fair :

$router->get('/', function(){ require('pages/home.php'); });

++++++++++++

$router->post('/', function(){ require('pages/home.php'); });

Merci de ton aide ! ;)

Lartak, il y a 9 ans

Bonjour.

c'est un simple formulaire en POST/GET qui fait bugger ...

Le formulaire à une méthode post ou get ?
Il faudrait savoir, car il ne peut pas être les deux en même temps.
Le système du router nécessite que tu définisses les routes, autorisées, que tu utilises un système de router c'est bien, mais si tu ne l'utilises pas correctement, tu n'iras pas bien loin avec.
Est-ce que tu as bien initialisé la classe Router quelque part dans ton code ?
Si oui, montres nous la partie initialisation de la classe.

simon.mlp, il y a 9 ans

Mon formulaire est en POST mais même en GET cela ne fonctionne pas (le code ...) :

$router->get('/sms/:tel/:number', function($tel, $number){ $_SESSION['nexmo_tel'] = $tel; require('pages/sms.php'); });
simon.mlp, il y a 9 ans

Petite erreur ...

$router->get('/sms/:tel', function($tel){ $_SESSION['nexmo_tel'] = $tel; require('pages/sms.php'); });
Lartak, il y a 9 ans

Il me semble pourtant t'avoir demandé de montrer la partie ou tu initialises la classe Router, un code qui devrait ressembler à :

$router = new App\Router\Router($_GET['url']); // les routes .. $router->run();

Et est-ce que tu as bien définies ton .htaccess avec :

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
simon.mlp, il y a 9 ans

Mes routes sont définis définis dans index.php

<?php if (SESSION_ID() == false) { SESSION_START(); } ?> <?php require('inc/class/router/router.php'); ?> <?php $router = new Router($_GET['url']); ?> <?php $router->get('/', function(){ require('pages/home.php'); }); $router->get('/sms/:tel', function($tel){ $_SESSION['nexmo_tel'] = $tel; require('pages/sms.php'); }); $router->get('/mon-compte', function(){ require('pages/compte.php'); }); $router->get('service/compte/:username/:email', function($username, $email){ $_SESSION['prov_username'] = $username; $_SESSION['prov_email'] = $email; require('pages/inscription.php'); }); $router->run(); ?>

Contenue du fichier inc/class/router/router.php :

<?php require('inc/class/router/route.php'); ?> <?php class Router { private $url; private $routes = []; private $namedRoutes = []; public function __construct($url){ $this->url = $url; } public function get($path, $callable, $name = null){ return $this->add($path, $callable, $name, 'GET'); } public function post($path, $callable, $name = null){ return $this->add($path, $callable, $name, 'POST'); } private function add($path, $callable, $name, $method){ $route = new Route($path, $callable); $this->routes[$method][] = $route; if(is_string($callable) && $name === null){ $name = $callable; } if($name){ $this->namedRoutes[$name] = $route; } return $route; } public function run(){ if(!isset($this->routes[$_SERVER['REQUEST_METHOD']])){ header('HTTP/1.0 404 Not Found'); } foreach($this->routes[$_SERVER['REQUEST_METHOD']] as $route){ if($route->match($this->url)){ return $route->call(); } } header('HTTP/1.0 404 Not Found'); } public function url($name, $params = []){ if(!isset($this->namedRoutes[$name])){ header('HTTP/1.0 404 Not Found'); } return $this->namedRoutes[$name]->getUrl($params); } } ?>

[EDIT] - htaccess ...

RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
betaWeb, il y a 9 ans

Salut,

Tu n'as aucune route en POST, bien évidemment qu'il ne trouvera pas c'est normal.
Ton formulaire est envoyé en POST je suppose ?

simon.mlp, il y a 9 ans

Oui il est en POST mais comment je peux arriver à mon but final ??

betaWeb, il y a 9 ans

Tu n'as déclaré AUCUNE ROUTE EN POST, je pense que ça devrait suffire à t'aiguiller non ?

simon.mlp, il y a 9 ans

Excuse mois mais comment faire pour déclaré une route en post (j'avais mal formuler ...) ?

Thomas Chicheportiche, il y a 9 ans

Salut, pour ne pas te donner directement la solution. Si tu déclares ta route en GET par:

$router->get('/', function(){ require('pages/home.php'); });

Comment penses-tu déclarer ta route en POST,

simon.mlp, il y a 9 ans
$router->post('/', function(){ require('pages/home.php'); });

Ne marche pas ...

simon.mlp, il y a 9 ans

Cela me retourne une erreur 404 ...

betaWeb, il y a 9 ans

Je pense que tu as de serieuses lacunes en programmation web, tu devrais commencer à apprendre les bases, notamment en ce qui concerne le protocole HTTP. Le site est rempli de ressources, tu n'as qu'à te servir ;)

Ton formulaire, que tu envoies en POST, pointe sur quelle route ?

simon.mlp, il y a 9 ans

Le formulaire en question pointe sur la page actuel mais je ne comprend pas le rapport car toutes mes pages qui on un formulaire me sortent la même erreur et passant de

$router->get('/', function(){ require('pages/home.php'); });

à

$router->post('/', function(){ require('pages/home.php'); });

Cela ne change rien ?!

betaWeb, il y a 9 ans

Je pense que tu n'as vraiment pas compris à quoi sert le routing et surtout comment il fonctionne ...

simon.mlp, il y a 9 ans

Oui c'est vrai, mais il est très utile dans mon cas pour faire des url propre ... pouvez vous me dire ce qu'il ne vas pas ?

Lartak, il y a 9 ans

Montres nous le code de ton formulaire.