Pracuję nad kawałkiem kodu od kilku dni, ale nie mogę w jakiś sposób przekazać tej wartości do mojej bazy danych . Zasadniczo próbuję osiągnąć to, że gdy użytkownik kliknie przycisk "zbieraj monety", przekazuje wartość 1 do mojej bazy danych. Codziennie o północy kolumna "dailyfree" jest resetowana do 0 przez zdarzenie MySQL, więc następnego dnia użytkownik może kliknąć przycisk ponownie, ponieważ wartość "dailyfree" w bazie danych wynosi ponownie 0. Nadal nie chcę, aby użytkownik mógł kliknąć "zbieraj monety", zanim wartość w bazie danych zostanie zresetowana. Problem polega na tym, że po kliknięciu przycisku użytkownik otrzymuje darmowe monety, ale wartość 1 nie zostaje przekazana do bazy danych. Kolumna "dailyfree" nadal wynosi 0 po kliknięciu przycisku. Czy ktoś wie, dlaczego tak jest?Wywołanie funkcji AJAX w PHP nie spowoduje wprowadzenia wartości do mojej bazy danych
Dla twojej informacji: Jestem bardzo nowy w kodowaniu!
Oto, nad czym teraz pracuję.
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)
}
Przycisk sama
<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;
Mam nadzieję, że może mi pomóc dowiedzieć się, dlaczego nie wprowadzić wartość w moim Baza danych! Tak czy inaczej, życzę miłego dnia :) Dziękuję za pomoc i czas!
** UWAGA **: Kiedy używając PDO powinieneś używać [przygotowanych instrukcji] (http://php.net/manual/en/pdo.prepared-statements.php) z wartościami zastępczymi i podawać dane użytkownika jako oddzielne argumenty. W tym kodzie masz potencjalnie poważne [błędy iniekcji SQL] (http://bobby-tables.com/). Nigdy nie używaj interpolacji lub konkatenacji ciągów znaków i zamiast tego używaj [przygotowanych instrukcji] (http://php.net/manual/en/pdo.prepared-statements.php) z wartościami zastępczymi. Błąd i pomijanie jednego z tych wywołań '$ db-> quote()' to czasami wszystko, czego potrzeba, aby ktoś złamał twoją witrynę. – tadman