【问题标题】:SQL UPDATE.. SET.. not working [duplicate]SQL UPDATE .. SET .. 不工作[重复]
【发布时间】:2018-01-03 16:04:57
【问题描述】:

我有一个问题。这是我编辑文章的代码。我不知道为什么,但我的更新不起作用。它只是重定向到../index.php。我已经尝试了一切( 引号和东西也是..)..你能帮我吗?我只想编辑/更新标题和内容。代码如下。非常感谢。

editarticle.php

<?php

session_start();

include_once('../connect.php');
include_once('../includes/article.php');
header('Content-type: text/html; charset=utf-8');

if(isset($_SESSION["user_id"])){
 $query=$pdo->prepare("SELECT * FROM users WHERE id = " 
 .$_SESSION["user_id"] );
  $query->execute();
  $row=$query->fetch(PDO::FETCH_ASSOC);

  if($row['privileges']==1){
   $query = $pdo->prepare("SELECT * FROM `articles` WHERE article_id='" . 
   $_POST['id'] . "'");
   $query->execute();
   $row=$query->fetch(PDO::FETCH_ASSOC);
    var_dump($row);

     if(isset($_POST['editarticle'])){
      if(isset($_POST['title'], $_POST['content'])){
        $title= $_POST['title'];
        $content= nl2br($_POST['content']);

          $query= $pdo->prepare("UPDATE `articles` SET article_title=" 
     .$_POST['title'] .",article_content=" .$_POST['content'] ." WHERE 
      article_id='" . $_POST['id'] . "'");
          $query->execute();
          $row=$query->fetch(PDO::FETCH_ASSOC);

          header('Location: ../index.php');
       }
   }
  ?>

  <html>
   <head>
    <title>CMS Tutorial</title>
    <link rel="stylesheet" href="assets/style.css" />
  </head>
  <body>
  <div class="container">
    <br/>
    <h4>Upravit prispevok</h4>

    <?php if(isset($error)){
    echo $error;
    }?>
    <? $query = $pdo->prepare("SELECT * FROM `articles` WHERE article_id='" 
    . $_POST['id'] . "'");
    $query->execute();
    $row=$query->fetch(PDO::FETCH_ASSOC);
    ?>

    <form action="editarticle.php" method="post" autocomplete="off" 
     class="addarticle">
      <input type="text" name="title" value="<?php echo 
      ucwords($row['article_title']);?>"/><br/><br/>
      <textarea rows="15" cols="50"  name="content"><?php echo 
       ucwords($row['article_content']);?></textarea><br/><br/>
      <input type="submit" name="editarticle" value="Upraviť prispevok"/>
     </form>
    </div>
   </body>
   </html>

  <?php
} } else{
 header('Location: index.php');
}

?>

【问题讨论】:

  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • 请。使用准备好的语句。它不仅可以防止 SQL 注入,还可以避免讨厌的引用问题
  • 当内容可能包含各种各样的东西并且可以解决您的问题(您需要在标题和内容的值周围加上引号)时,准备好的陈述尤其重要。

标签: php html sql


【解决方案1】:

由于引号,这不起作用,但更大的问题是查询准备本身,请查看this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多