我有一个数据库表“ mtoken”,如果在该表中添加任何新行,我的列“ sbonus”将意味着“ sbonus”的初始值设置为“ 0”。我将通过用户定义的输入Box为“ sbonus”分配值,无论如何,“ sbonus”的值不应超过5000。

我的要求是在“ Sbonus” +“输入框中的用户定义的值”中添加值,然后检查条件该值是否小于5000,如果较小则将添加的最终值更新为“ Sbonus”。如果没有返回“超出值”

最初,给定的值加上0,并将db设置为给定的值。现在,如果将新行添加到“ mtoken”,则“ sbonus”列的值将为“ 0”,因此现有行在“ sbonus”列中会有一些值(“ 100”)。

现在,我从用户定义的输入框中输入值“ 200”。应该是这样
现有行奖励价值
100 + 200 = 300

新行奖励价值,
0 + 200 = 200

当我使用下面的代码时,所有行的“ sbonus”值都设置为200。请查找下面的代码,请帮助我解决它。

用户定义的输入值为200平均值,

现有行奖励价值为100

新行奖励价值为0

检查条件,输出值应小于5000。

我需要输出为

现有的“ bonus”行应该像这样,

100 + 200 = 300

新行的“ Sbonus”值应该像这样,

0 + 200 = 200

 <div class="row">
                <div class="col-lg-4">
                    <form method="post" action="add_sbonus.php">
                        <div class="form-group">
                            <label>Surprise Bonus Per Token</label>
                            <input type="number" name="sbonus" class="form-control" required>
                        </div>
                        <div class="form-group">
                            <input type="submit" name="s_bonus" class="btn btn-primary" value="SurpriseBonus">
                        </div>
                    </form>
                </div>
            </div>

<?php
    if(isset($_POST['s_bonus'])){
        $sbonus = mysqli_real_escape_string($con,$_POST['sbonus']);
            if($sbonus!=''){
                $query = mysqli_query($con, "select sbonus from mtoken where status='Selled'");
                while($row=mysqli_fetch_array($query)){
                $dbonus = $row['sbonus'];
                $nbonus = $dbonus + $sbonus;
                    if($nbonus<=5000){
                        $sqlupdate = mysqli_query($con,"update mtoken set sbonus='$nbonus' where status='Selled'");
                            if(!$sqlupdate) {
                                echo mysqli_error($con);
                                echo '  <script>
                                            alert("Bonus NOT Updated");
                                        </script>';
                                }
                    }
                    if($nbonus>5000){
                     echo '<script>
                                alert("Value Exceeded");
                                window.location.assign("sbonus.php");
                            </script>';
                    }
                }
            }else{
                    echo '<script>
                                alert("Please fill all the fields");
                            </script>';
                }

        echo '<script>
                alert("Surprise Bonus Added To Tokens");
                window.location.assign("sbonus.php");
            </script>';
    }
    ?>


DB-with-Initial Value

DB-with-User-Defined + Initial Value

Existing Rows and New Added Rows

Error-Both existing row and new row showing same value

最佳答案

where status='Selled'将更新状态列中具有该值的所有行。因此,每次运行它将更新所有行。最终的结果取决于从SELECT语句返回的最后一行。

如果要更新特定的单行,则需要在where子句中添加一些内容来标识该确切的行。 id是显而易见的,因为它是唯一的。

为此,您需要更改两个查询行:

mysqli_query($con, "select id, sbonus from mtoken where status='Selled'");




mysqli_query($con,"update mtoken set sbonus='$nbonus' where id = $row['id']");




N.B.语言方面的注释:在英语中,“出售”不是一个词。 “出售”具有非标准的过去时版本,即“出售”。因此,如果您想用英语写您的身份,则应写“已售”而不是“已售”。请参见here

09-11 18:27