Sur une installation de codeigniter, j'essaie d'utiliser la fonction intégrée $this->input->post('some_data')
, cependant $this->input->post()
est un tableau vide.
Une print_r($_POST)
donne toutes les variables complètement et correctement?
Selon la documentation de codeigniter, la classe d'entrée "est initialisée automatiquement par le système, il n'est donc pas nécessaire de le faire manuellement", ce qui me laisse penser à ce que je suis censé faire d'autre.
Des idées sur la façon dont je devrais essayer de faire fonctionner cela?
Merci!
Vous pouvez vérifier si votre vue ressemble à ceci (correct):
<form method="post" action="/controller/submit/">
vs (ne fonctionne pas):
<form method="post" action="/controller/submit">
La seconde est incorrecte car elle redirige sans reporter les variables post.
Explication:
Lorsque l'url ne comporte pas de barre oblique à la fin, cela signifie que cela pointe vers un fichier.
Désormais, lorsque le serveur Web consulte le fichier, il voit qu’il s’agit bien d’un répertoire et envoie une redirection au navigateur avec une barre oblique à la fin.
Le navigateur crée une nouvelle requête sur la nouvelle URL avec une barre oblique, mais n'envoie pas le contenu du formulaire. C'est là que le contenu du formulaire est perdu.
Pour utiliser $this->input->post()
, initialisez l’assistant de formulaire. Vous pouvez le faire par défaut dans config.
Essayez ceci, changez
$config['base_url'] = 'http://mywebsite.cl/';
à
$config['base_url'] = 'http://www.mywebsite.cl/';
Certains fournisseurs ajoutent automatiquement www, https, etc. à votre URL, la plupart du temps, cela cause ce problème
Vous pouvez chercher de l’aide pour résoudre ce problème.
Quelque chose a changé ou a été étendu dans les fichiers de base CodeIgniter. Vérifiez que system/core/Input.php
est une copie originale et que le contenu de application/library
et application/core
pour des fichiers supplémentaires.
Les autres méthodes de saisie fonctionnent-elles? Quel est le résultat de cette opération lorsqu'elle est exécutée à côté de votre appel print_r
?
echo $this->input->user_agent();
Quelles données sont sorties de print_r
? Cherchez dans application/config/config.php
la ligne $config['global_xss_filtering']
. Est-ce réglé sur TRUE
ou FALSE
? Si TRUE
le filtre de script intersite a peut-être un problème avec les données que vous publiez (c'est peu probable, je pense)
Mon problème était avec un appel ajax. J'utilisais ceci:
type: 'posts',
au lieu de
type: 'post',
Syntaxe, D'oh!
Mise à niveau de la version 2.2.x vers la version 3.0.x - la méthode de publication de la raison échoue . Si vous mettez à niveau CI 3.x, vous devez conserver la page index_page dans le fichier de configuration. Vérifiez également le fichier .htaccess pour mod_rewrite. CI_3.x
$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x
Mon .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
Changer l'action de votre formulaire,
À partir de ceci:
<form method="post" action="<?=base_url()?>yourprocess">
Dans ceci:
<form method="post" action="<?=base_url()?>index.php/yourprocess">
En gros, il vous suffit d’ajouter "index.php" après votre base_url ():
action = "http://www.votredomaine.com/ index.php / votre processus"
Avez-vous activé la protection csrf dans /applicaiton/config/config.php
?
Si tel est le cas, $this->input->post()
apparaîtra vide. Vous pouvez essayer de faire $this->input->post('submit')
qui ne devrait pas être vide.
Utilisation
var_dump($this->input->post());
S'il vous plaît voir la capture d'écran . Ici, je priniting toutes les valeur de tableau après
Finalement, le problème a été résolu aujourd'hui. Le problème était avec le fichier .htaccess
.
Apprendre à moi-même: DOIT LIRE ATTENTIVEMENT LA DOCUMENTATION DU CODEIGNITATEUR .