【问题标题】:Updating data from submission form into MySQL database将提交表单中的数据更新到 MySQL 数据库中
【发布时间】:2015-02-27 15:29:40
【问题描述】:

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

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

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

警告:第 66 行 C:\xampp\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>

任何帮助/建议将不胜感激。提前致谢。

【问题讨论】:

  • 您的查询字符串中有什么内容。?
  • 为什么不使用带有prepared statement的pdo库?
  • @nana.chorage 你是什么意思?
  • 警告:当使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。请不要使用sprintf,这是一个脆弱且容易出错的替代方案。
  • @Marco Mura 我正在使用 (mysqli)

标签: php mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试在if 语句之外提取$id 赋值:

      <?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

      【讨论】:

      • 感谢您的帮助,这消除了错误消息。但是,当我尝试更新值时,数据库中的值仍然为空。
      • 你觉得和$name = '';这行有关系吗?也许试试$name = 'test_name';
      • 试过 $name = 'test_name';这将使用 test_name 更新数据库中的值
      • 我想补充一点,我是 PHP 新手,我为愚蠢的问题/cmets 道歉
      • @james:没有愚蠢的问题!我们曾经都是新人 :-) 也许我不明白你在做什么。 UPDATE question SET question_body='%s' WHERE question_id=%s...$name, $id... 应该更新行 $id 所以字段 question_body 等于 $name。也许尝试将mysqli_real_escape_string($db, $name) 更改为mysqli_real_escape_string($name)
      【解决方案4】:

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

      还可以使用以下内容代替 foreach 和 mysqli 结果

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多