【问题标题】:Update query is not updating data in PHP mysqli (procedural)更新查询未更新 PHP mysqli 中的数据(程序)
【发布时间】:2018-12-18 14:45:04
【问题描述】:

我遇到了id='$id' 的问题 SELECT 查询工作正常,但更新查询不工作 如果我输入任何 ID 号而不是 $id,它会更新数据,但是当我使用 $id 时,它什么也不做。

<?php 

    $db = mysqli_connect("localhost", "root", "", "aashir");
    $id = $_GET['id'];
    $query = "SELECT * FROM students WHERE id='$id' ";
    $result = mysqli_query($db, $query);
    while ($row = mysqli_fetch_array($result)) {
        $key = $row['id'];
        $name = $row['student_name'];
        $fname = $row['father_name'];
        $program = $row['student_program'];
    }
    if (isset($_POST['submit'])) {
    $s_name = $_POST['s_name'];
    $s_fname = $_POST['s_fname'];
    $s_program = $_POST['s_program'];
    $query2 = "UPDATE students SET student_name = '$s_name', father_name = '$s_fname', student_program = '$s_program' WHERE id='$id' ";
    mysqli_query($db, $query2);

    header("Location:show.php");
}
 ?>

 <!DOCTYPE html>
<html>

<head>
  <title>Edit Student</title>
  <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
</head>

<body>
  <div class="container mt-5">

    <form method="POST" action="edit.php" class="col-lg-6 offset-lg-3">
      <h2 class="text-center">Edit a Student</h2>
      <div class="form-group">
        <input type="text" name="s_name" class="form-control" value="<?php echo $name; ?>">
      </div>
      <div class="form-group">
        <input type="text" name="s_fname" class="form-control" value="<?php echo $fname; ?>">
      </div>
      <div class="form-group">
        <input type="text" name="s_program" class="form-control" value="<?php echo $program; ?>">
      </div>
      <div class="form-group">
        <input type="submit" name="submit" class="btn btn-success" value="Update">
      </div>
    </form>
  </div>
</body>

</html>

【问题讨论】:

  • 您对 SQL 注入持开放态度。由于您使用的是 mysqli,因此请利用 prepared statementsbind_param这将解决可能发生的任何令人讨厌的引用问题。 (O'Leary)
  • Mysql 的失败与普通 PHP 不同。如果您的查询没有像您认为的那样工作,请检查 mysqli errors
  • 也启用错误报告。您正在尝试为尚不存在的查询分配一些内容。

标签: php mysql database mysqli


【解决方案1】:

您有两个选项来解决您的问题(不谈 SQL 注入,已在 cmets 中引用并需要解决,因为这对您的应用程序来说是一个巨大的安全风险)

在处理表单时更改表单操作以将 id 传递给页面:

action="edit.php?id=<?php echo $id; ?>"

或者更好地添加一个带有 id 的隐藏输入:

<input type="hidden" name="id" value="<?php echo $id; ?>">

然后:

if (isset($_POST['submit'])) {
    $s_name = $_POST['s_name'];
    $s_fname = $_POST['s_fname'];
    $s_program = $_POST['s_program'];
    $id = $_POST['id'];

在这种情况下,动作可以保持不变。 发布您正在重新加载页面的表单,并且在第一次加载时不再通过 url 传递 id

【讨论】:

    【解决方案2】:

    您正在使用 POST 请求执行 UPDATE,但您正在寻找 $id 作为 GET 参数。这样,$id 将始终未定义,因此查询失败。

    您可以尝试重载表单操作 URL,如下所示:

    <form method="POST" action="edit.php?id=<?php echo $_GET['id']; ?>" class="col-lg-6 offset-lg-3">
    

    【讨论】:

    • 最好将其添加为隐藏字段,以免混淆POST和GET变量。
    • @aynber,不,将在 POST 正文数据中发布一个隐藏字段,然后问题将持续存在。但是,id 是持久的,取决于发布者。我认为重要的是要了解问题出现的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2018-09-04
    • 2022-10-05
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多