对 PHP 函数的 AJAX 调用不会使其在我的数据库中输入值
Posted
技术标签:
【中文标题】对 PHP 函数的 AJAX 调用不会使其在我的数据库中输入值【英文标题】:AJAX call on PHP function won't make it enter a value to my Database 【发布时间】:2018-01-30 05:02:08 【问题描述】:我这几天一直在编写一段代码,但不知怎的,我无法将值 1 传递给我的数据库。 基本上我想要实现的是,一旦用户单击“收集硬币”按钮,它会将值 1 传递给我的数据库。每天下午 12 点,“dailyfree”列被 mysql 事件重置为 0,因此第二天用户可以再次单击该按钮,因为数据库中“dailyfree”的值再次为 0。我仍然不希望用户能够在数据库中的值被重置之前单击“收集硬币”。 问题是,一旦用户单击按钮,它就会给他免费硬币,但值 1 并没有传递到数据库。单击按钮后,“dailyfree”列仍为 0。有人知道这是为什么吗?
仅供参考:我对编码非常陌生!
这是我现在正在使用的。
function free()
var str = "username";
var term = "searched_word";
var index = str.indexOf(term);
if (index != -1)
var daily = 1;
$.ajax(
url:"/free?daily="+daily,
success:function(data)
try
data = JSON.parse(data);
console.log(data);
if(data.success)
bootbox.alert("Success! You've claimed 100 free credits!");
else
bootbox.alert(data.error);
catch(err)
bootbox.alert("Javascript error: "+err);
,
error:function(err)
bootbox.alert("AJAX error: "+err);
);
else
bootbox.alert("Your username does not contain the searched_word!");
function disDelay(obj)
obj.setAttribute('disabled','disabled');
setTimeout(function()obj.removeAttribute('disabled'),86400)
按钮本身
<div class="text-right">
<button class="btn btn-success btn-block" id="free" onclick="free(); disDelay(this)">Collect free coins</button>
</div>
$freecoins = 100;
case 'free':
if(!$user)
exit(json_encode(array('success'=>false, 'error'=>'You must login to access the redeem.')));
$daily = 1;
if(!preg_match('/^[a-zA-Z0-9]+$/', $daily))
exit(json_encode(array('success'=>false, 'error'=>'Code is not valid')));
else
$sql = $db->query('SELECT * FROM `users` WHERE `dailyfree` = '.$db->quote($dailyfree));
if($sql->rowCount() != 0)
$row = $sql->fetch();
if($row['user'] == $user['userid'])
exit(json_encode(array('success'=>false, 'error'=>'You have already redeemed your daily reward!')));
$db->exec('INSERT INTO `users` SET `dailyfree` = '.$dailyfree.' , `balance` = `balance` + '.$freecoins.' WHERE `userid` = '.$db->quote($user['userid']));
exit(json_encode(array('success'=>true, 'credits'=>$freecoins)));
else
exit(json_encode(array('success'=>false, 'error'=>'Code not found')));
break;
我真的希望你能帮我找出为什么它不会将值输入到我的数据库中!不管怎样,祝你有美好的一天:) 感谢你的帮助和时间!
【问题讨论】:
警告:使用 PDO 时,您应该使用带有占位符值的 prepared statements,并将任何用户数据作为单独的参数提供。在此代码中,您可能有严重的SQL injection bugs。切勿使用字符串插值或连接,而是使用 prepared statements 和占位符值。有时,犯错并忽略其中一个$db->quote()
调用就足以让某人破坏您的网站。
【参考方案1】:
查询错误。
应该是更新查询。
$db->exec('UPDATE
usersSET
dailyfree= '.$dailyfree.' ,
balance=
balance+ '.$freecoins.' WHERE
userid= '.$db->quote($user['userid']));
或者,如果您想在用户记录出现时进行更新,否则插入数据,请查看ON DUPLICATE KEY
【讨论】:
以上是关于对 PHP 函数的 AJAX 调用不会使其在我的数据库中输入值的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 如何更改我的视图,使其在插入表时不会产生重复?
如何使 DRF ( Django-REST-Framework) 令牌保持不变,使其在每次页面刷新后不会丢失?
如何使用 jquery ajax 调用来调用 php 函数? [复制]