0

現在、ci.. が提供する検証ライブラリを調査していますが、現在問題が発生しています。いくつかの回避策を試みましたが、残念なことに、コードがさらに台無しになりました。だから、私が何をすべきかプロに聞いてみてください。

私の見解:

<?php echo validation_errors(); ?>
                            <?php echo form_open('bookstore/validateinsert');?>
                                <table cellpadding='4' align='center'>
                                <th>Title</th>
                                    <tr>
                                        <td><input type="text" name="bkname" value="<?php echo set_value('bkname');?>"/></td>
                                    </tr>
                                    <th>Author</th>
                                    <tr>
                                        <td><input type="text" name="bkauthor" value="<?php echo set_value('bkauthor'); ?>"/></td>
                                    </tr>
                                    <th>Released Year</th>
                                    <tr>
                                        <td><input type="text" name="bkyear" value="<?php echo set_value('bkyear'); ?>"/></td>
                                    </tr>
                                    <th>ISBN</th>
                                    <tr>
                                        <td><input type="text" name="bkisbn" value="<?php echo set_value('bkisbn'); ?>"/></td>
                                    </tr>

                                    <tr>
                                        <td><input type='submit' value='insert'/></td>
                                    </tr>
                                    <?php echo form_close();?>
                                </table>

私のコントローラー:

public function validateinsert()
    {
    $this->load->library('form_validation');

    $this->form_validation->set_rules('bkname', 'Book Name', 'required|is_unique[books.book_name]');
    $this->form_validation->set_rules('bkauthor', 'Book Author', 'required');
    $this->form_validation->set_rules('bkyear', 'Year Published', 'required|max_length[4]');
    $this->form_validation->set_rules('bkisbn', 'Book ISBN', 'required');

    if ($this->form_validation->run() == FALSE)
        {
            $this->insertbook();
        }
        else
        {
            $this->load->view('showbooks');
        }

    }


    public function insertbook()
    {
        if($_POST)
        {
            $data = array(
                'book_id' => null,
                'book_name' => $_POST['bkname'],
                'book_author' => $_POST['bkauthor'],
                'book_year' => $_POST['bkyear'],
                'book_isbn' => $_POST['bkisbn']
            );


            $duplicate = $this->_searchbook('book_name',$data['book_name']);

            if(!$duplicate)
            {
                $insertid = $this->books_model->insert_books($data);

                if($insertid)
                {
                    $data['success'] = TRUE;
                    $data['message'] = "The book title was successfully added.";
                }

                else
                {
                    $data['success'] = FALSE;
                    $data['message'] = "An error was encountered.";
                }
            }

            else
            {
                $data['success'] = FALSE;
                $data['message'] = "The book title is already in the system";
            }
        }

        $this->load->view('book_entry');
    }

知る必要があるのはそれだけだと思います..

検証は完璧に機能しますが、質問がありますが、isbn および bkyear ルールに含めたいすべての数値の構文は何ですか?(PS 私はまだ onblur 機能を備えた JavaScript を好みます)

問題:

上記のように検証は機能しますが、挿入は機能しません。違反しているルールがない場合、insertbook 関数を呼び出しましたが、フォームの受信者として最初に検証関数を作成したときに想定したように、何も挿入されませんでした。insertbook はおそらくフォーム内のデータを受信して​​いません。私は何をすべきか?PS私は、これらの2つの関数を一緒にマージする必要があるという考えを持っていますが、それは混乱を招くでしょう(またはそれは問題ですか?)。これについてあなたの意見を聞いてみましょう。

4

3 に答える 3

0

多くの間違いが指摘されているため、他の回答を確認する必要があります。データベース操作を行っている場合は、常にエラーチェックを行う必要があります。データベースは揮発性です。また、間違いを犯しやすいため、データベース メソッドを分離する必要があります。

IF をラップするだけです。可能な限り、最初に負の状態を確認してください。

if ( $this->insertbook() == false ) 
{ echo 'omg there is an error something is wrong with my insert code' ;
 $this->showError() ;
}
else
{ // no problem
 $this->showSuccess() ;  }

これを行う別の方法は、新しく作成されたレコードの ID を返すことです。

 if ( ! $id = $this->insertbook() ) { echo 'insert failure' ; } 
 else { echo 'my new id is:' . $id ; }
于 2013-08-18T20:27:39.497 に答える