在CodeIgniter中调用方法时,也会触发另一种方法

时间:2016-12-04 16:18:18

标签: php sql codeigniter

调用方法时,也会调用另一个尚未调用的方法。

查看

<form method="post" action="<?php echo 'http://localhost/LinkLab/index.php/Comments/insertcomment/'.$postarray[0]->postID; ?>">
                        <div class="form-group">
                            <input type="text" class="form-control" rows="1" required placeholder="Username" name="username">
                            <br>
                            <textarea class="form-control" rows="3" required placeholder="Comment" name="comment"></textarea>
                        </div>
                        <input type="submit" class="btn btn-info submitbtn" name="submit" value="Submit"/>
</form>

控制器

public function insertcomment($postID){
        $this->load->helper('url');
        $this->load->model('comments_model');
        date_default_timezone_set('Asia/Colombo');

        if ($this->input->post('submit') == true){
            $commentarray = array(
                'postID' => $postID,
                'commentID' => round(microtime(true)*1000),
                'username' => $this->input->post('username'),
                'comment' => $this->input->post('comment'),
                'timestamp' => date("Y-m-d h:i:s"),
            );
            $result = $this->comments_model->inserCommentToDB($commentarray);
        }
        header('Location:http://localhost/LinkLab/index.php/Comments/'.$postID);
}

模型

class Comments_model extends CI_Model {

    function retrievePostFromDB($postID) {
        $sql = "SELECT * FROM post WHERE postID = ".$postID;
        $query = $this->db->query($sql);
        $postarray = $query->result();
        return $postarray;
    }
    function inserCommentToDB($commentarray) {
        print_r($commentarray);
        $this->db->insert('comments', $commentarray);
        if ($this->db->affected_rows() > 0) {
            return true;
        } else {
            return false;
        }
    }
}

在控制器中,当它调用“inserCommentToDB”方法时,似乎“retrievePostFromDB”方法也会被调用。它给出了以下错误。

  

发生数据库错误

     

错误号码:1054

     

'where子句'中的未知列'insertcomment'

     

SELECT * FROM post WHERE postID = insertcomment

     

文件名:C:/wamp/www/LinkLab/system/database/DB_driver.php

     

行号:691

造成这种情况的原因是什么?感谢。

1 个答案:

答案 0 :(得分:0)

要获得有关您的问题的帮助,您需要在评论控制器中提供更多信息,例如索引功能。如果你使用_remap方法或不使用你的route.php文件的内容

提供的代码;我有一些意见要改进它。

1-如果您的系统使用特定的时区;在index.php文件中设置时区(每次要插入或更新内容时都不需要设置时区。)

2-如果您希望手动编写表单,请使用form_helper构建表单或至少使用form_open方法,或者只使用site_url链接表单而不是手动将表单连接到localhost;目前您的脚本需要修改才能上传到虚拟主机。

3-使用form_validation库验证您是否未发布空评论;检查用户是否提交表单并不能帮助您做任何事情。

4- CodeIgniter有一个重定向功能,你可以使用它而不是手动使用头功能;这将允许您使用&#39;控制器/方法&#39;重定向。因此,您不必将自己锁定到localhost(再次节省您需要上传到虚拟主机的时间)

5-由于您使用的是评论模型,因此您不必使用“评论”这个词。在你的方法;这是多余的。

6-评论模型与检索帖子无关,你应该从posts_model中检索帖子。

7-使用查询构建器来避免SQL注入,它会自动转义您在&#39; where&#39;中使用的值。言。

8-虽然您生成评论ID的方式似乎没问题;通常你应该使用auto_increment id来避免自己计算id。

9-如果在太多位置使用帮助程序或库,则使用autoload.php加载这些程序,以便它们可以在应用程序的所有方法中使用;至于模型加载通常你在__construct中加载它们,例如,posts控制器中的每个方法都将使用posts_model,因此在__construct中加载它将节省你的时间和时间。努力

最后,我认为使用camel-case命名你的SQL列是一个坏习惯;我更喜欢使用带下划线的所有小写字母来分隔单词,但这只是一个偏好问题。