我有一个数据库表“ 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。