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

Php 在CodeIgniter中调用方法时,也会触发另一个方法,php,sql,codeigniter,Php,Sql,Codeigniter,调用一个方法时,还将调用另一个尚未调用的方法 查看 <form method="post" action="<?php echo 'http://localhost/LinkLab/index.php/Comments/insertcomment/'.$postarray[0]->postID; ?>"> <div class="form-group">

调用一个方法时,还将调用另一个尚未调用的方法

查看

<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>
型号

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”

从post中选择*其中postID=INSERCOMMENT

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

电话号码:691


这是什么原因造成的?解决方法是什么?谢谢。

要获得有关您的问题的帮助,您需要在Comments controller中提供更多信息,如索引函数&如果您使用的是_remapmethod或not+route.php文件的内容

至于提供的代码;我有一些改进意见

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

2-使用form_helper构建表单,或者如果您希望手动编写表单,则至少使用form_open方法,或者您可以使用site_url链接表单,而不是手动将表单连接到localhost;当前,您的脚本需要修改才能上载到Web主机

3-使用form_验证库验证您没有发布空评论;检查用户是否提交表单对您没有任何好处

4-CodeIgniter具有重定向功能,您可以使用该功能代替手动使用标头功能;这将允许您使用“controller/method”重定向,这样您就不必将自己锁定到localhost(再次节省您需要上传到webhost时的时间)

5-因为您使用的是评论模型,所以您不必在方法中使用“评论”一词;这是多余的

6-评论模型与检索帖子无关,您应该从posts\u模型检索帖子

7-使用查询生成器避免SQL注入,它将自动转义您在“where”语句中使用的值

8-尽管生成注释ID的方式看起来不错;通常,您应该使用自动增量id,以避免自己计算id

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


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

要获得有关您的问题的帮助,您需要在Comments controller中提供更多信息,如索引函数&如果您使用的是_remapmethod或not+route.php文件的内容

至于提供的代码;我有一些改进意见

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

2-使用form_helper构建表单,或者如果您希望手动编写表单,则至少使用form_open方法,或者您可以使用site_url链接表单,而不是手动将表单连接到localhost;当前,您的脚本需要修改才能上载到Web主机

3-使用form_验证库验证您没有发布空评论;检查用户是否提交表单对您没有任何好处

4-CodeIgniter具有重定向功能,您可以使用该功能代替手动使用标头功能;这将允许您使用“controller/method”重定向,这样您就不必将自己锁定到localhost(再次节省您需要上传到webhost时的时间)

5-因为您使用的是评论模型,所以您不必在方法中使用“评论”一词;这是多余的

6-评论模型与检索帖子无关,您应该从posts\u模型检索帖子

7-使用查询生成器避免SQL注入,它将自动转义您在“where”语句中使用的值

8-尽管生成注释ID的方式看起来不错;通常,您应该使用自动增量id,以避免自己计算id

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


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

欢迎来到SQL注入的世界。您正在将值连接到select查询中,需要将其转义为字符串;然而,这很难做到,并且常常导致SQL注入漏洞。您可能希望查看提供准备好的语句或类似语句的库。只是一个提示,您可以在表单中使用
确保在config.phpWelcome.SQL中设置了base\u url。您正在将值连接到select查询中,需要将其转义为字符串;然而,这很难做到,并且常常导致SQL注入漏洞。你可能想看看
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;
        }
    }
}