0

我对 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 参数也使用了一个变量。

谁能看到我在这里做错了什么?

4

4 回答 4

0

在执行之前转储/记录您的查询 - 之后问题应该很明显(我怀疑表名中有一些额外的字符)。

几件事:

  • 您永远不应该信任您的用户并接受他们将在 $_POST 中发送给您的所有内容,而是将白名单用于您要更新的字段
  • 您的代码容易受到 SQL 注入的影响,我建议至少使用一些框架/独立库PDO ,避免将来不推荐使用的mysql_query 。检查这个以获得一些解释http://www.phptherightway.com/#databases
于 2013-04-05T13:59:54.897 回答
0

尝试使用$sql_table,就'$sql_table'好像您确定这包含正确的表名一样。就像您正在使用其他列的值检查这是否有帮助!

于 2013-04-05T13:41:16.397 回答
0

MySQL 中的表名区分大小写。请检查案件是否有错误。

于 2013-04-05T14:37:12.973 回答
0

你必须在这个 ``qoutes. 当您动态创建mysql表时,在创建之前修剪(mysql名称表的$variable)非常重要,因为如果“mysql名称表的$variable”在edns或启动mysql中有空间,则不会创建表。最后,当您在查询中调用 mysql 名称表的 $variable 时,您必须再次修剪(mysql 名称表的 $variable)。

于 2014-12-11T15:58:13.487 回答