質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

Codeigniter3の「form_validation」がうまいこと動作しない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 726

tartnac

score 17

 旧サイトから新サイトに引っ越した際に問題発生

旧サイトのデータを丸っと全部コピーして、新サイトに全てそのままアップロードしました。
その際に変更した箇所はルートに設置してある .htaccess の中身(www を無しに統一、http から https にする)と、
ルートに設置してある index.php の中身($system_path の部分を変更)、
application\config内にある config.php と database.php くらいだと思います。

……にも関わらず、今まで動いていた「お問い合わせフォーム」で異常が発生してしまい、頭を抱えております。

// application/controllers/Contact.php
class Contact extends CI_Controller {
    public function index()
    {
        $this->load->helper(array('form'));
        $this->load->library(array('session', 'form_validation'));

        $config = array( // ホントは他にもいっぱいあります
            array(
                'field' => 'username',
                'label' => 'お名前',
                'rules' => 'trim|required',
                'errors' => array(
                    'required' => '%s は必須です。',
                )
            )
        );
        $this->form_validation->set_rules($config);

        if ($this->form_validation->run() == FALSE) // バリデーションチェック失敗。入力画面に戻る
        {
            $this->ticket = md5(uniqid(mt_rand(), TRUE)); // トークン生成
            $this->session->set_userdata('ticket', $this->ticket); // トークンをクッキーにセット

            $this->load->view('contact_view', $data);
        }
        else // バリデーションチェックOK。メール送信処理へ移る
        {
            ~ メールの送信処理 ~
        }
    }
}
// application/views/contact_view.php
<div class="contact">
    <div class="title">
        お問い合わせ
    </div>
    <?php echo validation_errors(); ?>
    <?php echo form_open('contact'); ?>
        <?php echo form_hidden('ticket', $this->ticket); ?>
        <dl>
            <dt>お名前</dt>
            <dd><input type="text" name="username" value="<?php echo set_value('username'); ?>"></dd>
        </dl>
        <div class="submit">
            <input class="button" type="submit" value="送信する">
        </div>
    </form>
</div>

以前まで(サイトの引っ越し前まで)は何ら問題なく動作していたのに、
サイトを引っ越ししてから動作しなくなってしまいました。
もしや https にしたら何か特別なことをしなければならなかったりするのでしょうか?

 具体的にどうおかしいのか?

お名前欄を空欄にしたまま「送信する」ボタンを押すと、今までであればエラーメッセージが表示されていました。
ところが何も無かったかのようにただページが更新される(ような感じになる)だけなんです。
お名前欄に何か適当に入力したとしても、「送信する」ボタンを押すとそれもまた同じようにページが更新されるだけ。
それも今までは入力した文字がそのまま残っていたはずなのに、何故か空欄に戻ってしまう。

「送信する」ボタンを押してもif ($this->form_validation->run() == FALSE)のところを通過できない。
いや、それもあるけどそもそも何で<?php echo set_value('username'); ?>が効いていないのか……?
色々コードをいじったりしても、何やかんやしてもわからないんです。

 3日間考えてもわからないままなんです

「15分調べてもわからないことは、質問しよう! (teratail!)」
とはいえ、何でもかんでもすぐに聞いてばかりは考えもの。
……でももう無理、限界なんです。旧サイトのデータをほとんどそのまま持ってきているのに……ナンデ!!
どなたかヒントだけでもお教えいただけませんでしょうか。よろしくお願いいたします。

 【追記】変更した .htaccess の中身

suPHP_ConfigPath /home/myname/mydomain.net/xserver_php/
AddHandler fcgid-script .php .phps
FCGIWrapper "/home/myname/mydomain.net/xserver_php/php-cgi" .php
FCGIWrapper "/home/myname/mydomain.net/xserver_php/php-cgi" .phps

RewriteEngine on

# httpsに統一
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# wwwなしに統一
RewriteCond %{HTTP_HOST} ^www.mydomain\.net
RewriteRule ^(.*)$ https://mydomain.net/$1 [R=301,L]

# CodeIgniter用
RewriteCond $1 !^(index\.php|.+\.css$|.+\.js$|.+\.gif$|.+\.png$|.+\.jpg$)
RewriteRule ^(.*)$ /index.php?/$1 [L]
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

Codeigniter詳しくないので一般的な観点からの確認をしていただきたいのですが、

  1. viewからpostされたときのコントローラはきちんと連携できているのでしょうか?index()メソッドの冒頭で何か出力するとかしてみてください。
  2. 他の画面でおかしいと気づいたことはありますか?CSSが適用されていないとか画像が表示されていないとか
  3. ローカルPCで同じデータ同じコードで環境再現できますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/07 21:12

    あああああ!意味がわからないままではありますが、原因がわかりました!
    【追記】に示した .htaccess 内の
    # wwwありに統一
    RewriteCond %{HTTP_HOST} ^www.mydomain\.net
    RewriteRule ^(.*)$ https://mydomain.net/$1 [R=301,L]
    ↑これをコメントアウトしたら正常に動作しました!
    なぜなのかサッパリわからないのですが、う~ん……とりあえずこれを削除して様子をみてみようと思います!

    キャンセル

  • 2018/11/07 21:19

    解決しましたぁぁぁ!
    application\config内にある config.php の中に
    $config['base_url'] = 'https://www.mydomain.net/&#039;;
    って記載をしていたんですが、こいつのせいだったみたいです!
    これを
    $config['base_url'] = 'https://mydomain.net/&#039;;
    のように www を削ってやったら、ちゃんと正常に動くようになりました!
    .htaccess の www を無くす設定とバッティングしちゃってたんですね。
    mts10806さんのヒントがあったからこそ解決できました……(泣きそう)

    ホントにありがとうございました!!感謝です!!

    キャンセル

  • 2018/11/07 21:40

    解決につながったようで何よりです

    キャンセル

+1

application\config内にある config.php の中に
$config['base_url'] = 'https://www.mydomain.net/';
って記載をしていたんですが、これを
$config['base_url'] = 'https://mydomain.net/';
のように www を削ってやったら、ちゃんと正常に動くようになりました!

# wwwなしに統一
RewriteCond %{HTTP_HOST} ^www.mydomain\.net
RewriteRule ^(.*)$ https://mydomain.net/$1 [R=301,L]


.htaccess のこの www を無くす設定とバッティングしちゃってたようです(T-T)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る