我对web开发还很陌生,所以我很有可能在这里做一些非常愚蠢的事情。
我使用AJAX将数据发送到一个PHP文件,该文件将使用数据运行SQL命令来更新表。我正在处理编辑文章,所以我的PHP文件需要知道三件事:文章的原始名称(供参考(、新名称和新内容。我还告诉它用户在看什么页面,这样它就知道该编辑哪个表。
$('#save_articles').click(function () {
var current_page = $('#current_location').html();
var array_details = {};
array_details['__current_page__'] = current_page;
$('#article_items .article_title').each(function(){
var article_name = $(this).html(); //The text in this div is the element name
var new_article_name = $(this).next('.article_content');
new_article_name = $(new_article_name).children('.article_content_title').html();
var new_article_content = $(this).next('.article_content');
new_article_content = $(new_article_content).children('.article_content_content').html();
array_new_deets = {new_name:new_article_name, content:new_article_content};
array_details[article_name] = array_new_deets;
});
send_ajax("includes/admin/admin_save_articles.php", array_details);
});
在PHP文件中,我首先检索当前页面并将其存储在$sql_table中,然后从$_POST中删除当前页面变量。然后我运行这个。
foreach($_POST as $key => $value){
$original_name = $key;
$new_name = $value['new_name'];
$new_cont = $value['content'];
$query = "UPDATE
`$sql_table`
SET
`element_name`= '$new_name',
`element_content` = '$new_cont',
WHERE
`element_name` = '$original_name'";
$query = mysql_query($query);
if(!$query){
die(mysql_error());
}
}
我总是收到一个错误,说"sitep_Home"是一个不正确的表名。它不仅是我数据库中的一个真正的表,而且我实际上已经更改了它的名称,以确保它不会出现关键字或其他问题。
如果我在不使用变量$sql_table的情况下运行查询(指定表名为"sitep_Home"(,则查询将接受该表。然后它实际上并没有更新表,我怀疑这是因为WHERE参数也使用了一个变量。
有人看到我在这里做错了什么吗?
如果您确信$sql_table
包含正确的表名,请尝试将其用作'$sql_table'
。就像您在使用其他列的值一样检查这是否有帮助!!
在执行查询之前转储/记录查询-之后问题应该很明显(我怀疑表名中有一些额外的字符(。
几件事:
- 您永远不应该信任您的用户并接受他们将在$_POST中发送给您的所有内容,而是使用要更新的字段的白名单
- 您的代码容易受到SQL注入的攻击,我建议至少使用一些框架/独立库或PDO,避免将来不推荐使用的mysql_query。查看此项以获得一些解释http://www.phptherightway.com/#databases
MySQL中的表名区分大小写。请检查箱子里是否有错误。
您必须将查询中mysql表的名称括在``qoutes中。当您日常创建mysql表时,在创建之前修剪(mysql名称表的$variable(是非常重要的,因为如果"mysql名称表格的$variant"在edns或启动mysql时有空间,则不创建表。最后,当您在查询中调用mysql名称表的dinamically$variable时,您必须再次修剪(mysql名称表的$variable(。