首页 > 解决方案 > 使用订单金额更新用户表

问题描述

我正在尝试使用订单表中的金额更新数据库用户表,即退款给用户,但我似乎无法正确获取代码。

谁能帮忙

if (isset($_GET['act']) && $_GET['act'] == "done" && isset($_GET['order_id']) && is_numeric($_GET['order_id']) && isset($_GET['offer_id']) && is_numeric($_GET['offer_id']))
{
    $order_id = (int)$_GET['order_id'];
    $offer_id = (int)$_GET['offer_id'];
    $seller_id = (int)$_GET['seller'];

            smart_mysql_query("UPDATE users SET balance=balance+".$order_row['amount']." WHERE user_id='$seller_id' LIMIT 1");

            header("Location: index.php?msg=done");
            exit();
        }   

单击退款按钮时,我似乎无法正常工作

<a class="btn btn-danger" style="margin-top: 2px" href="<?php echo SITE_URL; ?>item_orders.php?id=<?php echo $order_row['offer_id']; ?>&order_id=<?php echo $order_row['order_id']; ?>&act=done"> Refund</a>

$order_row 来自下面的查询,这适用于提取所有订单详细信息,包括我想要退回的金额。

<?php 

if (isset($_GET['offer_id']) && $_GET['offer_id'] > 0 && isset($_GET['id']) && $_GET['id'] > 0)
{ 
    $order_id       = (int)$_REQUEST['id'];
    $offer_id       = (int)$_REQUEST['offer_id'];

    $order_result = smart_mysql_query("SELECT *, DATE_FORMAT(created, '%d %b %Y %h:%i %p') AS order_date, DATE_FORMAT(expiry, '%d %b %Y %h:%i %p') AS expire_date FROM orders WHERE offer_id='$offer_id' AND order_id='$order_id' AND user_id='$userid' LIMIT 1");
    if (mysqli_num_rows($order_result) == 0)
    {
        header ("Location: index.php");
        exit();
    }
    else
    {
        $order_row = mysqli_fetch_array($order_result);

    }

?> 希望有人能解释为什么它不起作用

标签: mysqlphp

解决方案


您的 html 链接中没有 offer_id

?id=<?php echo $order_row['offer_id']; ?>?

所以你的 PHP 代码必须是

$offer_id = (int)$_GET['id'];

或将您的链接更改为

 ?offer_id=<?php echo $order_row['offer_id']; ?>?

另外,您很容易受到 sql 注入的影响,请阅读如何防止 PHP 中的 SQL 注入?并为您的查询使用带有参数的准备好的语句


推荐阅读