正在将提交表单中的数据更新到MySQL数据库中


Updating data from submission form into MySQL database

我正在尝试使用PHP将提交表单中的数据更新到MySQL数据库中。当我单击按钮更新数据库中的值时,它变为空。

此外,我还收到以下两条错误消息:

注意:第64行上C:''examplep''htdocs''test1''edit.php中的未定义变量:id

警告:第66行C:''examplep''htdocs''test1''edit.php中为foreach()提供的参数无效

以下是我的PHP代码:

<?php
  $name = '';
  if (isset($_GET['editQ'])) {
    $ok = true;
    $id = $_GET['editQ'];
    if ($ok) {
      // add database code here
      $db = mysqli_connect('localhost', 'root', '', 'test2015');
      $sql = sprintf("UPDATE question SET question_body='%s'
              WHERE question_id=%s",
      mysqli_real_escape_string($db, $name),$id);
      mysqli_query($db, $sql);
      echo '<p>User updated.</p>';
      mysqli_close($db);
    }
    } else {
      $db = mysqli_connect('localhost', 'root', '', 'test2015');
      $sql = sprintf('SELECT * FROM question WHERE question_id=%s', $id);
      $result = mysqli_query($db, $sql);
      foreach ($result as $row) {
        $name = $row['question_body'];
      }
      mysqli_close($db);
    }
  ?>
  <form name="editQ" method="POST" action="edit.php" > 
    <td>Please Edit the Question</td> 
    <input type="text" name="<?php echo ($q)?>" value="<?php
            echo htmlspecialchars($name);?>" /> 
    <input type="submit" name="submit" value="Edit">
  </form>

如有任何帮助/建议,我们将不胜感激。提前谢谢。

您的表单正在发送POST,并且您正在尝试使用get获取值。

如果$id未在$_GET['editQ']中设置,则不会初始化它。然而,如果在这种情况下您仍然需要它,我想您知道该实例的一些默认id。然后在脚本顶部定义它,以防以后它不会被$_GET值覆盖。

尝试将$id赋值拉到if语句之外:

<?php
  $name = '';

  if (isset($_GET['editQ'])) {
    $ok = true;
    $id = $_GET['editQ'];
    if ($ok) {
        // add database code here
        $db = mysqli_connect('localhost', 'root', '', 'test2015');
        $sql = sprintf("UPDATE question SET question_body='%s'
          WHERE question_id=%s",
          mysqli_real_escape_string($db, $name),
          $id);
        mysqli_query($db, $sql);
        echo '<p>User updated.</p>';
        mysqli_close($db);
    }
    else {
      $db = mysqli_connect('localhost', 'root', '', 'test2015');
      $sql = sprintf('SELECT * FROM question WHERE question_id=%s', $id);
      $result = mysqli_query($db, $sql);
      foreach ($result as $row) {
        $name = $row['question_body'];
      }
      mysqli_close($db);
    }
  }
?>


编辑:上面的代码清除了未设置的变量错误,但用户仍在区分$id$editQ

在调用SQL语句之前,没有设置$id。它在定义$idif语句isset($_GET['editQ'])else部分中;

另外,使用以下内容代替foreach,并使用mysqli结果

while($row = $result->fetch_assoc())
{
    // STUFF
}