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;
}
}
}