PHP:MySQL 查询无故重复更新

2023-12-02

下面的代码首先是客户端代码,然后是类文件。

由于某种原因,“deductTokens()”方法调用了两次,从而对帐户收取双倍费用。 我整夜都在编程,所以我可能只需要第二双眼睛:

    if ($action == 'place_order') {

    if ($_REQUEST['unlimited'] == 200) {

        $license = 'extended';

    } else {

        $license = 'standard';

    }

    if ($photograph->isValidPhotographSize($photograph_id, $_REQUEST['size_radio'])) {

        $token_cost = $photograph->getTokenCost($_REQUEST['size_radio'], $_REQUEST['unlimited']);
        $order = new ImageOrder($_SESSION['user']['id'], $_REQUEST['size_radio'], $license, $token_cost);
        $order->saveOrder();
        $order->deductTokens();
        header('location: account.php');

    } else {

        die("Please go back and select a valid photograph size");

    }

}


######CLASS CODE#######
<?php

include_once('database_classes.php');

class Order {

    protected $account_id;
    protected $cost;
    protected $license;

    public function __construct($account_id, $license, $cost) {

        $this->account_id = $account_id;
        $this->cost = $cost;
        $this->license = $license;

    }

}

class ImageOrder extends Order {

    protected $size;

    public function __construct($account_id, $size, $license, $cost) {

        $this->size = $size;

        parent::__construct($account_id, $license, $cost);

    }

    public function saveOrder() {

        //$db = Connect::connect();
        //$account_id = $db->real_escape_string($this->account_id);
        //$size = $db->real_escape_string($this->size);
        //$license = $db->real_escape_string($this->license);
        //$cost = $db->real_escape_string($this->cost);

    }

    public function deductTokens() {

        $db = Connect::connect();
        $account_id = $db->real_escape_string($this->account_id);
        $cost = $db->real_escape_string($this->cost);
        $query = "UPDATE accounts set tokens=tokens-$cost WHERE id=$account_id";
        $result = $db->query($query);

    }

}

?>

当我死时(“$query”);在查询之后,它直接打印正确的语句,当我在 MySQL 中运行该查询时,它工作得很好。

$action = $_REQUEST['action'];

account.php 只是一个订单列表,它永远不会调用 downloads.php。刚刚尝试注释掉重定向,但我遇到了同样的问题。我不明白它是如何被调用两次的,die 语句显示了正确的查询,并且脚本不会重新加载自身。

这是我的 apache 访问日志:

71.*** - - [22/May/2010:13:14:35 +0000] "POST /download.php?action=confirm_download&photograph_id=122 HTTP/1.1" 200 1951 "http://***.com/viewphotograph.php?photograph_id=122" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"
71.***  - - [22/May/2010:13:14:36 +0000] "GET /download.php?action=place_order&photograph_id=122&size_radio=xsmall&unlimited=0 HTTP/1.1" 302 453 "http://*** .com/download.php?action=confirm_download&photograph_id=122" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"
71.***  - - [22/May/2010:13:14:36 +0000] "GET /download.php?action=place_order&photograph_id=122&size_radio=xsmall&unlimited=0 HTTP/1.1" 302 453 "http://*** .com/download.php?action=confirm_download&photograph_id=122" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"
71.***  - - [22/May/2010:13:14:36 +0000] "GET /account.php HTTP/1.1" 200 2626 "http://***.com/download.php?action=confirm_download&photograph_id=122" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"

我知道这里显然有问题。但我不知道第二个请求来自哪里。


该行:

header('location: account.php');

转发浏览器,但是没有结束 php 脚本.
这可能没问题,您提供的代码片段在此行之后不会“执行”任何操作。

另一种选择可能是双击
如果双击提交按钮,表单将被发送两次。
我们使用一些 JavaScript 在第一次单击后禁用提交按钮。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:MySQL 查询无故重复更新 的相关文章

随机推荐

  • div 内的图像水平居中

    我正在尝试使用向上 向下箭头将图像设置为 div 的水平中心 我在这里阅读了一些教程和问题 但以下方法不起作用 img display block margin auto 它是用 Bootstrap 制作的 因此将部分集成在下面的代码片段中
  • 如何在Spring Security中编写自定义过滤器?

    我希望每个请求接收一些信息 所以我认为不要为每个请求提供一个函数并分别从请求中获取这些信息 最好有一个过滤器 所以每个请求都会通过这个过滤器 我就会得到我想要的 问题是 如何编写自定义过滤器 假设它不像任何预定义的 spring secur
  • Oracle10g中如何按顺序连接多行

    如果我有这样的数据 GROUP SEQUENCE COMMAND ONE 3
  • Jenkins groovy pipeline - 需要执行 jar 文件的命令标准输出

    我正在使用 Jenkins v 1 647 和 Pipeline 插件 v 1 14 我的管道作业提取了一个运行我的编排的常规脚本 我的问题是我有一个可执行的 jar 它将执行一些 Scalr API 操作并返回一个新的服务器主机名 传入标
  • 如何在组合框中添加换行符/制表符[重复]

    这个问题在这里已经有答案了 我有一个CSV包含各种项目的文件 我将其中一些项目放入组合框中 如何在中添加换行符和 或制表符CSV文件 以便它将在组合框中显示为换行符 选项卡 我努力了 t and n但它只显示组合框中的内容 基地ComboB
  • 查找 pandas 数据框中特定部分字符串第一次出现的索引位置

    我正在处理 AFRINIC whois 数据 我正在尝试查找子字符串第一次出现的位置 在示例中 pandas 数据框 左侧有一列 数据 是索引 我试图找到子字符串 inetnum 所以我正在寻找的结果是 2750383 data 20 mn
  • jQuery - 使用 .mouseout 或更合适的方法关闭下拉菜单,提示?

    我有以下代码 option box option name click function this siblings collapsible toggle this toggleClass hided option box attribut
  • Android,如何通过广播接收器接收主页按钮点击?

    在我的应用程序中 当用户通过单击注销按钮或按主页按钮关闭应用程序退出应用程序时 我需要向服务器发送注销请求 按钮没有问题 结果符合我的预期 问题是如何获得主页按钮 根据我的研究 不可能使用onKeyDown int keyCode KeyE
  • C# EWS - 已发送电子邮件的标识 - InternetMessageId

    我正在开发一个门票系统 我需要将票证 邮件 发送到电子邮件地址列表 并通过电子邮件接收有关此电子邮件 票证的答复 是否可以从我发送的新票证 电子邮件中获取 InternetMessageId 谢谢你 确保在发送消息时使用SendAndSav
  • 使用python的urllib2和Beautifulsoup爬取维基百科时删除html标签

    我正在尝试抓取维基百科以获取一些用于文本挖掘的数据 我正在使用 python 的 urllib2 和 Beautifulsoup 我的问题是 有没有一种简单的方法可以从我阅读的文本中删除不必要的标签 例如链接 a 或 span 对于这种情况
  • bash -c 变量未分配

    我正在尝试执行以下命令 bash c var test echo var 并且只打印一个空行 如果我执行相同的命令而不bash c var test echo var test 分配给的值 var正在打印 有人可以解释为什么我不能在第一个示
  • 什么是 ScalaSignature?

    将 Scala 文件反编译为 Java 代码时 经常会遇到带有以下注释的类ScalaSignatures 这些似乎只有一个注释值 一个经过某种编码的字符串 为什么 Scala 编译器创建如此奇怪的构造 而不是使用自定义的Attribute是
  • Blackberry 中的“尝试访问安全 API”错误

    当我在 Blackberry 9530 上安装 alx 文件时 收到错误 尝试访问安全 API 但是 我已经成功签署了该应用程序 可能需要 3 种类型的签名 RBB RCR RRT 我不确定它们各自的含义 但您需要使用它们 我认为您可能只安
  • Android:原始资源是否存储在本地文件系统上?

    我正在分析 APK 并在应用程序的 res raw 目录中看到一组 txt 资源 在模拟器上安装应用程序后 我希望在 data data app files 目录中看到相同的文件 但它们似乎不存在 原始资源存储在哪里 原始资源是在应用程序运
  • 在 Spring-boot 中运行 JSF 时出现 NoClassDefFoundError

    我正在尝试使用 primefaces 进行 Spring boot 工作 我按照这个例子https github com Zergleb Spring Boot JSF Example 我尝试将其从 gradle 移至 Maven 因为项目
  • Excel 中用户定义的 IFS 函数的 VBA 代码

    我们公司使用的是Excel 2016的打包版本 而不是Office 365版本 我最近了解到新版本中存在的 IFS 函数 它似乎非常有用 我在网站上以 VBA 形式找到了 CONCATENATEIF 函数 我想知道是否有办法以相同的方式在我
  • 如何将现有项目转换为 angular-cli?

    我刚刚尝试过ng2 admin而且看起来很棒 所有的功能都非常好 我怎样才能将这个项目转换为angular cli 我尝试过ng init 但它覆盖了现有的代码app文件夹 我怎样才能将这个项目转换为angular cli没有任何影响 只需
  • 如何使标准模式和怪异模式一样有效?

    以下 Html 在 FireFox 或 IE7 8 中非常适合我 带或不带样式标签 Should work in Quirks Mode br
  • Java中有计算阶乘的方法吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我还没找到 我错过了什么 我知道阶乘方法是初学者的常见示例程序 但是 拥有一个可供重用的标准实现不是很有用吗 我也可以将这种方法与标准类型 例如 int long 以及 BigIntege
  • PHP:MySQL 查询无故重复更新

    下面的代码首先是客户端代码 然后是类文件 由于某种原因 deductTokens 方法调用了两次 从而对帐户收取双倍费用 我整夜都在编程 所以我可能只需要第二双眼睛 if action place order if REQUEST unli