Codeigniterインストールで、組み込みの$this->input->post('some_data')
関数を使用しようとしていますが、$this->input->post()
は空の配列です。
print_r($_POST)
は、すべての変数を完全かつ正しく与えますか?
Codeigniterのドキュメントによると、入力クラスは「システムによって自動的に初期化されるので、手動で行う必要はありません」と私は他に何をするつもりなのか疑問に思っています。
これを機能させるにはどうすればよいですか?
ありがとう!
ビューが次のようなものであるかどうかを確認できます(正しい):
<form method="post" action="/controller/submit/">
vs(機能しません):
<form method="post" action="/controller/submit">
2番目の例は、post変数を引き継がずにリダイレクトするため、正しくありません。
説明:
Urlの最後にスラッシュがない場合、これはファイルを指していることを意味します。
これで、Webサーバーがファイルを検索すると、これは実際にはディレクトリであり、最後にスラッシュを付けてブラウザーにリダイレクトを送信することがわかります。
ブラウザはスラッシュを使用して新しいURLに新しいクエリを作成しますが、フォームのコンテンツは投稿しません。ここでフォームの内容が失われます。
$this->input->post()
を使用するには、フォームヘルパーを初期化します。あなたはconfigでデフォルトでそれを行うことができます。
これを試して、変更
$config['base_url'] = 'http://mywebsite.cl/';
に
$config['base_url'] = 'http://www.mywebsite.cl/';
一部のプロバイダーは、ほとんどの場合、URLにwww、httpsなどをURLに自動的に追加します。これにより、この問題が発生します。
これを解決するためにあなたが探すことができるいくつかの事柄があります。
コアCodeIgniterファイルで何か変更または拡張されています。 _system/core/Input.php
_が元のコピーであり、追加ファイルの_application/library
_および_application/core
_の内容であることを確認します
他の入力方法は機能しますか? _print_r
_呼び出しの横で実行すると、この結果はどうなりますか?
echo $this->input->user_agent();
_print_r
_からどのデータが出力されますか? _application/config/config.php
_行で_$config['global_xss_filtering']
_を探します。これはTRUE
またはFALSE
に設定されていますか? TRUE
の場合、クロスサイトスクリプティングフィルターが、投稿しているデータに問題がある可能性があります(これは考えにくいです)
私の問題は、ajax呼び出しにありました。私はこれを使用していました:
type: 'posts',
の代わりに
type: 'post',
構文、D'oh!
2.2.xから3.0.xへのアップグレード-reason postメソッドが失敗します。 CI 3.xをアップグレードする場合、index_pageを構成ファイルに保持する必要があります。また、mod_rewriteの.htaccessファイルを確認します。 CI_3.x
$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x
私の.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>
フォームアクションを変更し、
これから:
<form method="post" action="<?=base_url()?>yourprocess">
これに:
<form method="post" action="<?=base_url()?>index.php/yourprocess">
基本的に、base_url()の後に「index.php」を追加するだけです。
action = "http://www.yourdomain.com/-index.php/yourprocess"
_/applicaiton/config/config.php
_でcsrf保護を有効にしましたか?
その場合、$this->input->post()
は空になります。空ではない$this->input->post('submit')
を試してみてください。
本日、ようやく問題が解決しました。問題は.htaccess
ファイル。
自分自身への学習: CODEIGNITER DOCUMENTATIONを読む必要があります より徹底的に。