Bonjour,
Voila je rencontre un petit problème avec mon router ([https://www.grafikart.fr/tutoriels/php/router-628]())
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
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 !
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,
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.
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'); });
Petite erreur ...
$router->get('/sms/:tel', function($tel){ $_SESSION['nexmo_tel'] = $tel; require('pages/sms.php'); });
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]
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]
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 ?
Excuse mois mais comment faire pour déclaré une route en post (j'avais mal formuler ...) ?
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 ?
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 ?!
Je pense que tu n'as vraiment pas compris à quoi sert le routing et surtout comment il fonctionne ...
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 ?
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.
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 ! ;)