代码之家  ›  专栏  ›  技术社区  ›  Steve

PHP插入数据库不工作

  •  3
  • Steve  · 技术社区  · 16 年前

    有什么想法吗?

    if (isset($_SESSION["logged"]) && $_SESSION["logged"]==1){  
        if ($_POST['action']=="edit"){
            $query=mysql_query("select * from page where active=1 AND heading='".$_POST['selectedpage']."'");
            $row = mysql_fetch_array($query, MYSQL_ASSOC);
    
            echo "<h1>HTML Editor </h1><br>";
            echo "<form name='saveform' action='./action.php'  method='post'>";
            echo "<textarea rows='100' cols='100' name='updateBox'>".$row['content']."</textarea>";
            echo "<br><input name='action' type='submit' value='save edit'>";
            echo "<input name='heading' type='hidden' value='".$row['heading']."'>";
            echo "</form>";
        } else if($_POST['action']=="save edit"){
            $query=mysql_query("UPDATE page SET active='0' where heading='".$_POST['heading']."'");
            $query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."','1')");
            echo "<p>Changes saved succesfully!</p>";
            echo "$_POST['updateBox']";
        }
    }
    
    4 回复  |  直到 8 年前
        1
  •  6
  •   zombat    16 年前

    如果你打电话 echo mysql_error($query) 在运行每个查询之后,您将能够看到该查询是否存在错误。您的查询内容可能有问题。

    您没有对SQL注入执行任何清理,因此如果您的内容中有引号,它将中断您的查询。这是相当危险的(您的查询很容易受到用户输入的SQL注入),您应该考虑使用 mysql_real_escape_string 在所有查询变量上,或切换到 PDO 或 MySQLi

    编辑用于编辑:)

    另一方面,通常很容易找到一个快速的数据库包装器或函数处理程序来自动处理此类错误。我使用基于类的包装器,但如果您刚才不想走那么远,可以这样做:

    //very quick-and-dirty
    function queryOrDie($query)
    {
        $query = mysql_query($query);
        if (! $query) exit(mysql_error());
        return $query;
    }
    

    您只需将所有查询传递给它,就可以更轻松地调试它。也有很多数据库包装器类,我强烈建议您四处看看。他们让生活变得更轻松。:)

        2
  •  3
  •   AlfaTeK    16 年前

    怎么了?

    在脚本的开头添加以下PHP:

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    

    还可以尝试以下方法:

    $query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."',1)");
    

    http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

        3
  •  0
  •   alemjerus    16 年前

    确保 heading 未定义为键或唯一。这可能会在您的上下文中造成问题。

        4
  •  0
  •   david    8 年前

    mysql_query("INSERT INTO `videousers` (`user_id`,`user_name`,`user_password`,`contact_person`,`organisation`,`contact_tel`,`email`) VALUES ('','{$user}','{$pass}','{$cperson}','{$organ}','{$cphone}','{$email}'");
    

    它不起作用,因此我已更改为以下查询:

    mysql_query("INSERT videousers SET user_name='$user',user_password='$pass', contact_person='$cperson', organisation='$organ', contact_tel='cphone', email='$email'");
    

    它成功了。我不知道为什么,但既然它有效,我就用它来完成我的工作。