对 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。有人知道这是为什么吗?

仅供参考:我对编码非常陌生!

这是我现在正在使用的。

javascript

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>

php

$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-&gt;quote() 调用就足以让某人破坏您的网站。 【参考方案1】:

查询错误。

应该是更新查询。

$db-&gt;exec('UPDATEusersSETdailyfree= '.$dailyfree.' ,balance=balance+ '.$freecoins.' WHEREuserid= '.$db-&gt;quote($user['userid']));

或者,如果您想在用户记录出现时进行更新,否则插入数据,请查看ON DUPLICATE KEY

【讨论】:

以上是关于对 PHP 函数的 AJAX 调用不会使其在我的数据库中输入值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 如何更改我的视图,使其在插入表时不会产生重复?

如何使 DRF ( Django-REST-Framework) 令牌保持不变,使其在每次页面刷新后不会丢失?

对 PHP 的 Ajax 调用没有返回任何内容

如何使用 jquery ajax 调用来调用 php 函数? [复制]

如何从 python 脚本调用 pip 并使其在本地安装到该脚本? [复制]

如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)