Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新查询未更新PHP mysqli中的数据(过程)_Php_Mysql_Database_Mysqli - Fatal编程技术网

更新查询未更新PHP mysqli中的数据(过程)

更新查询未更新PHP mysqli中的数据(过程),php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,我面临着id='$id' 选择查询工作正常,但更新查询不工作 如果我输入任何id号而不是$id,它会更新数据,但当我使用$id时,它什么也不做 <?php $db = mysqli_connect("localhost", "root", "", "aashir"); $id = $_GET['id']; $query = "SELECT * FROM students WHERE id='$id' "; $result = mysqli_query($

我面临着
id='$id'
选择查询工作正常,但更新查询不工作 如果我输入任何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>

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

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

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

您有两种选择来解决您的问题(不必谈论SQL注入,它已经在评论中引用,并且需要解决,因为它对您的应用程序来说是一个巨大的安全风险)

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

action="edit.php?id=<?php echo $id; ?>"
在这种情况下,操作可以保持不变。
发布表单时,您正在重新加载页面,并且不再通过url传递id,因为在第一次加载时,您完全可以进行SQL注入。由于您使用的是mysqli,请利用和。这将解决可能出现的任何令人讨厌的引用问题。(O'Leary)Mysql的失败与普通PHP不同。检查您的查询是否不能正常工作。同时启用错误报告。您正试图为尚不存在的查询分配某些内容。最好将其添加为隐藏字段,以免混淆POST和GET变量。@aynber,不,将在POST正文数据中发布隐藏字段,然后问题将继续存在。然而,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'];