【问题标题】:Update not working PHP MYSQL CRUD更新不起作用 PHP MYSQL CRUD
【发布时间】:2016-05-11 08:56:53
【问题描述】:

我有这个 PHP 代码,当我尝试单击是按钮并检查数据库时。值保持不变。有什么我做错了吗?我还检查了我的 SQL 查询,它似乎工作正常,但是当我将它合并到 php 代码中时。它不再工作了?

<?php
    require 'database.php';
    $id = 0;

    if ( !empty($_GET['gpx_field_id'])) {
        $id = $_REQUEST['gpx_field_id'];
    }

    if ( !empty($_POST)) {
        // keep track post values
        $id = $_POST['gpx_field_id'];

        // delete data
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "UPDATE field_info SET verify = '1' WHERE gpx_field_id = ? ";
        $q = $pdo->prepare($sql);
        $q->execute(array($id));
        Database::disconnect();
        header("Location: index.php");

    }
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <script src="assets/bootsrap/js/bootstrap.min.js"></script>
</head>

<body>
    <div class="container">

                <div class="span10 offset1">
                    <div class="row">
                        <h3>Verify a Field</h3>
                    </div>

                    <form class="form-horizontal" action="verify.php" method="post">
                      <input type="hidden" name="gpx_field_id" value="<?php echo $id;?>"/>
                      <p class="alert alert-error">Are you sure to verify this field ?</p>
                      <div class="form-actions">
                          <button type="submit" class="btn btn-danger">Yes</button>
                          <a class="btn btn-danger" href="index.php">No</a>
                        </div>
                    </form>
                </div>

    </div> <!-- /container -->
  </body>
</html>

【问题讨论】:

  • 你能不能也过去数据库类的代码。
  • stackoverflow.com/questions/18323065/… 的可能重复项??
  • 您在没有 $_GET 参数的情况下重定向到 index.php。
  • 仅用于连接数据库的数据库类。

标签: php mysql crud


【解决方案1】:

在这里,我假设您的查询工作正常,所以 请更改您的 php 代码如下...

<?php
    require 'database.php';
    $id = 0;

    if ( !empty($_GET['gpx_field_id'])) {
        $id = $_REQUEST['gpx_field_id'];
    }

    if ( !empty($_POST)) {
        try {
                $pdo = Database::connect();
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = "UPDATE field_info SET verify = '1' WHERE gpx_field_id IN :id ";
                $q = $pdo->prepare($sql);
                $q->execute(array($id));
                Database::disconnect();
                header("Location: index.php");
        }
        catch(PDOException $e) {
            echo $e->getMessage();
        }
    }
?>

希望对你有所帮助。

【讨论】:

  • 永远不要使用$_REQUEST!这需要GETPOSTCOOKIE 输入,有人可以设置一个名为gpx_field_id 的cookie 并让该查询运行任何他们想要的。
  • @SanjayChaudhari 这让我很困扰,因为我没有收到任何错误。它刚刚运行,但更新不起作用。
  • @SanjayChaudhari 仍然一无所有。我会重试修复它。我会让你知道。谢谢桑杰。
  • @Sandy Pabilonia,您可能必须在 where 条件下使用 IN 子句。我已再次更新答案,请立即查看。
  • @SanjayChaudhari 使用更新的代码我遇到了这个错误 SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
【解决方案2】:

您在顶部指定$id = 0,但它永远不会更新为某个“真实”值。因此,表单填充了

<input type="hidden" name="gpx_field_id" value="0"/>

因此gpx_field_id 始终保持为0。然后,您的查询将使用WHERE gpx_field_id = 0 更新所有行。很可能,这些行将不存在...

在将 $id 插入表单之前,您确实需要获得正确的值。

附带说明,由于您使用的是 html5 (&lt;!DOCTYPE html&gt;),因此应省略输入的结束标记。改写:&lt;input type="hidden" ... &gt;,省略正斜杠,就像在 head 部分中使用 metalink 标记一样。

【讨论】:

  • 关于$id = 0。难道不是这段代码的工作是将$id的值更改为输入gpx_field_id中的值 if (isset($_REQUEST['gpx_field_id '])) { // 跟踪帖子值 $id = $_REQUEST['gpx_field_id'];
  • 我如何获得 $id 的正确值?
  • $id 获取正确的值是您需要考虑的:您选择该字段的依据是什么?我的意思是:你怎么知道你想显示哪个gpx_field
猜你喜欢
  • 1970-01-01
  • 2017-09-17
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多