【问题标题】:Can't insert and update at the same time不能同时插入和更新
【发布时间】:2015-06-19 11:34:58
【问题描述】:

我有下面的代码,但我不知道为什么它不起作用。问题是我可以用它插入帖子,但是当我尝试更新帖子时,它会创建一个新页面而不是更新。

我试图从if(isset($_POST['id']) != 'null') 中删除isset 并且更新工作正常,但是插入不再工作。

知道我的代码有什么问题吗?谢谢。

    <?php 

        if(isset($_POST['submitted']) == 1) 
        {

            $title = mysqli_real_escape_string($dbc, $_POST['title']);
            $header = mysqli_real_escape_string($dbc, $_POST['header']);
            $body = mysqli_real_escape_string($dbc, $_POST['body']);

            if(isset($_POST['id']) != 'null')
            {
                $q = "UPDATE pages SET user = $_POST[user], title = '$title', header = '$header', body = '$body' WHERE id = $_GET[id]";
            }
            else
            {
                $q = "INSERT INTO pages (user, title, header, body) VALUES ($_POST[user], '$title', '$header', '$body')";
            }


            $r = mysqli_query($dbc, $q);

            if($r)
            {
                $message = '<p>Page was added!</p>';
            } 
            else 
            {

                $message = '<p>Page could not be added because:</p>'.mysqli_error($dbc);
                $message .= '<p>'.$q.'</p>';
            }

        }
    ?>

【问题讨论】:

  • 请为这两种情况创建一个 var_dump($_POST) 并将其添加到问题中。
  • isset 返回一个布尔值(因此为 TRUE 或 FALSE),因此 isset(..) != 'null' 绝对没有意义。为什么不直接使用if (isset(..))
  • isset($_POST['id']) != 'null' 这没什么意义,试试去掉!= 'null'

标签: php mysql mysqli content-management-system sql-insert


【解决方案1】:

您同时使用 post 和 get。首先检查它是发布还是获取。然后只需简单地做 isset() 检查

<?php 

    if(isset($_POST['submitted']) == 1) 
    {

        $title = mysqli_real_escape_string($dbc, $_POST['title']);
        $header = mysqli_real_escape_string($dbc, $_POST['header']);
        $body = mysqli_real_escape_string($dbc, $_POST['body']);

        if(isset($_GET['id']) && $_GET['id']!="")

        {
            $q = "UPDATE pages SET user = $_POST[user], title = '$title', header = '$header', body = '$body' WHERE id = $_GET[id]";
        }

        else

        {
            $q = "INSERT INTO pages (user, title, header, body) VALUES ($_POST[user], '$title', '$header', '$body')";
        }


        $r = mysqli_query($dbc, $q);

        if($r)
        {
            $message = '<p>Page was added!</p>';
        } 

        else 
        {

            $message = '<p>Page could not be added because:</p>'.mysqli_error($dbc);
            $message .= '<p>'.$q.'</p>';
        }

    }
?>

【讨论】:

    【解决方案2】:

    试试这个:

    if(isset($_POST['id']) AND $_POST['id'] != 'null')
    

    【讨论】:

    • 无法添加页面,因为:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行更新页面的 '' 附近使用正确的语法 SET user = 1, title = 'random test', header = 'random test', body = 'random test' WHERE id =
    • 表示 POST 不发送“null”字符串,而是发送空字符串。 Bibisha 的答案应该可以。
    【解决方案3】:
    use this code:  if(isset($_POST['id'] && $_POST['id']!= '')
    

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2014-02-27
      相关资源
      最近更新 更多