2017-08-22 6 views
5

पर एक मान दर्ज नहीं करेगा, मैं कुछ दिनों के लिए कोड के टुकड़े पर काम कर रहा हूं लेकिन मैं किसी भी तरह से अपने डेटाबेस में मान 1 को पास नहीं कर सकता । असल में जो मैं प्राप्त करने का प्रयास कर रहा हूं वह यह है कि जब उपयोगकर्ता "सिक्के एकत्रित करें" बटन पर क्लिक करता है तो यह मेरे डेटाबेस में मान 1 को पास करता है। हर दिन 12 बजे कॉलम "डेलीफ्री" को एक MySQL ईवेंट द्वारा 0 पर रीसेट किया जाता है, इसलिए अगले दिन उपयोगकर्ता फिर से बटन पर क्लिक कर सकता है क्योंकि डेटाबेस में "दैनिक फ्री" के मान 0 से फिर से होते हैं। फिर भी मैं नहीं चाहता कि उपयोगकर्ता डेटाबेस में मान को रीसेट करने से पहले "सिक्के एकत्र करें" पर क्लिक करने में सक्षम हो। समस्या यह है कि उपयोगकर्ता बटन पर क्लिक करने के बाद, यह उसे मुफ्त सिक्के देता है लेकिन मान 1 डेटाबेस में नहीं मिलता है। बटन क्लिक करने के बाद कॉलम "डेलीफ्री" अभी भी 0 है। क्या कोई जानता है कि वह क्यों है?PHP फ़ंक्शन पर AJAX कॉल इसे मेरे डेटाबेस

बस अपनी जानकारी के लिए: मैं कोडिंग के लिए बहुत नया हूं!

यहां मैं अभी के साथ काम कर रहा हूं।

जावास्क्रिप्ट:

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; 

मैं सच में आशा है कि आप मुझे यह पता लगाने क्यों इसे में मान दर्ज नहीं होगा मदद कर सकते हैं मेरे डेटाबेस! वैसे भी, मैं आपको एक बहुत अच्छा दिन की कामना करता हूं :) आपकी मदद और समय के लिए धन्यवाद!

+0

** चेतावनी पर एक नज़र डालें चाहते हैं **: जब पीडीओ का उपयोग करके आपको प्लेसहोल्डर मूल्यों के साथ [तैयार कथन] (http://php.net/manual/en/pdo.prepared-statements.php) का उपयोग करना चाहिए और किसी भी उपयोगकर्ता डेटा को अलग तर्क के रूप में आपूर्ति करना चाहिए। इस कोड में आपके पास संभावित रूप से गंभीर [एसक्यूएल इंजेक्शन बग] है (http://bobby-tables.com/)। स्ट्रिंग इंटरपोलेशन या कॉन्सटेनेशन का कभी भी उपयोग न करें और प्लेसहोल्डर मानों के साथ [तैयार कथन] (http://php.net/manual/en/pdo.prepared-statements.php) का उपयोग करें। गलती करना और उन '$ db-> उद्धरण()' कॉलों में से किसी एक को छोड़ना कभी-कभी किसी को आपकी साइट से समझौता करने के लिए लिया जाता है। – tadman

उत्तर

0

क्वेरी गलत है।

एक अद्यतन क्वेरी होना चाहिए।

$db->exec('UPDATE उपयोगकर्ताओं SET dailyfree = '.$dailyfree.' , संतुलन = संतुलन + '.$freecoins.' WHERE userid = '.$db->quote($user['userid']));

या आप अद्यतन करने के लिए जब वर्तमान बाकी डेटा सम्मिलित उपयोगकर्ता रिकॉर्ड तो ON DUPLICATE KEY

संबंधित मुद्दे