これはn00bのトピックかもしれませんが、とにかく、私はこのバグでかなり困難で奇妙な時間を過ごしてきました。基本的には、フォームを表示するページのコントローラーメソッドに取り組んでいました。$this->input->post
基本的に、私は次のようにcodeigniterの関数を使用してフォーム入力をvarダンプすることにより、フォームの送信データをデバッグしていました。
var_dump($this->input->post('first_name'));
これは1日おきに機能しましたが、今日、投稿変数をブラウザーにダンプすると、フォームを送信したときに値があったとしても、値がないかのようにfalseが返されることがわかりました。次に、次のように、PHPのPOSTスーパーグローバル配列を介して変数に直接アクセスしてみました。
var_dump($_POST['first_name']);
そしてそれも空に戻ったので、私は次のようにpost配列全体をダンプしようとしました:
var_dump($_POST);
フォーム全体に記入したにもかかわらず、空でした。それにもかかわらず、MySQLデータベースのレコードは更新されていました(つまり、$ _ POST変数が空のように見えてもフォームは送信されていました)。
また、通常、リダイレクト関数呼び出しの前にコントローラー関数に変数をvarダンプすると、「ヘッダーは既に送信されました」というエラーが発生するはずですが、発生しなかったと考えました。変数をダンプする代わりに、想定される成功ページにリダイレクトされました。
そのため、約2時間、POSTデータが送信されていないと思い、コードのエラーを再確認し、スクリプトで原因のステートメントが見つかるまで、ステートメントを1つずつコメントアウトし始めました。
最後に、次のように、成功メッセージをリダイレクトするコードのチャンクをコメントアウトしました。
/*
if($record_updated_successfully)
{
$this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
}
redirect('admin/success_page');
*/
その後、スクリプトは、codeigniterの$this->input->post
関数と$_POST
スーパーグローバル配列を使用して、以前のすべての変数ダンプのダンプを開始しました。
さて、ヘッダーが送信される前に変数ダンプが出力を送信しているにもかかわらず、スクリプトが実際にリダイレクトする場合は、$_POST変数が空に見える理由がわかります。
では、本当の問題は、ヘッダーが送信される前に出力を送信したにもかかわらず、スクリプトがリダイレクトされるのはなぜですか?誰かがこれを経験したことがありますか?
これに関する助けをいただければ幸いです。
編集:ビューのロードに関して、ここに私のスクリプトの簡略化されたバージョンがデバッグvardumpステートメントのように見えます:
function some_controller_method() {
var_dump($this->input->post());
var_dump($_POST);
// some code
if($this->input->post('form_action') == 'update record') {
// code that runs when the form is submitted
/*
* ...
*/
if($record_updated_successfully)
{
$this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
}
redirect('admin/success_page');
}
$this->load->view('my-view-file.php');
}