PHP/jQuery仅在文本输入中不在数据库中更新
PHP/jQuery not updating in DB only in text-input?
在我的表单中,用户可以使用下面的Javascript更改值。但当他们点击X2赌注时,它不会更新PHP中的赌注。。例如,如果我输入1,它就起作用。如果我单击X2,它显示2,但在数据库中插入1。
谢谢。
<form action="./php/bet_process.php" method="POST" class="form betForm">
<center>
Balance: <span class="balance"></span> | Total Bets: <span
class="total"></span> | Total Profit: <span class="profit"></span>
</center>
<hr />
<span id="betResult"></span>
<p class="field">
<input type="text" id="bet" class="large" placeholder="Amount"
name="bet" style="width: 250px;"> <span>
<button id="x2bet">X2 Bet</button>
</span>
</p>
<p class="field">
<input id="chance" name="chance" class="large" type="text"
placeholder="Chance" value="49.5">
</p>
<p class="field">
<input id="pay" name="payout" class="large" type="text"
placeholder="Payout">
</p>
<p class="field">
<input id="profit" name="profit" class="large" type="text"
placeholder="Profit">
</p>
<p class="field">
<input type="submit" value="Bet" class="large" style="width: 360px;"
id="betBtn">
</p>
</form>
JavaScript:
$('#x2bet').click(function () {
$('#bet').val(parseFloat($('#bet').val()) * 2);
});
$(document).ready(function(){
function updateValues() {
// Grab all the value just incase they're needed.
var chance = $('#chance').val();
var bet = $('#bet').val();
var pay = $('#pay').val();
var profit = $('#profit').val();
// Calculate the new payout.
pay = (100-1)/chance;
// Calculate the new profit.
profit = bet*pay-bet;
// Set the new input values.
$('#chance').val(chance);
$('#bet').val(bet);
$('#pay').val(pay);
$('#profit').val(profit);
}
$('#chance').keyup(updateValues);
$('#bet').keyup(updateValues);
$('#pay').keyup(updateValues);
$('#profit').keyup(updateValues);
});
PHP代码:
<?php
include_once('db.php');
session_start();
echo '
<link rel="stylesheet" href="./css/styles.css" type="text/css" />
<script src="./plugins/loader.js" type="text/javascript"></script>
';
$updated_amount_loss = $_POST['bet'];
$updated_amount_win = $_POST['profit'];
$selectBalance = $db->prepare("SELECT `balance` FROM `users` WHERE `uid` = :uid");
$selectBalance->execute(array(':uid' => $_SESSION['uid']));
$balanceRow = $selectBalance->fetch();
$userBalance = $balanceRow['balance'];
if(isset($_POST['bet'], $_POST['chance'], $_POST['payout'], $_POST['profit']) &&
$userBalance >= 0 &&
$_POST['bet'] >= 0 &&
$_POST['bet'] <= $userBalance &&
strlen($_SESSION['client']) == 6) {
if($_SESSION['roll'] < $_POST['chance']) {
echo '<p class="message valid">You won! You rolled a ' . $_SESSION['roll'] . ' out of 100.<span class="close">X</span></p>';
$result = 'Win';
if($_POST['bet'] > 0) {
$updateBalanceWin = $db->prepare("UPDATE `users` SET `balance` = `balance` + :balance WHERE `uid` = :uid");
$updateBalanceWin->execute(array(':uid' => $_SESSION['uid'], ':balance' => $updated_amount_win));
$insertBetWin = $db->prepare("INSERT INTO `bets`(`uid`, `result`, `amount`, `multiplier`, `time`, `roll`, `actual_amount`)
VALUES (:uid, :result, :amount, :multiplier, :time, :roll, :actual_amount)");
$insertBetWin->execute(array(
':uid' => $_SESSION['uid'],
':result' => $result,
':amount' => $_POST['bet'],
':multiplier' => $_POST['payout'],
':time' => date("F j, Y, g:i a"),
':roll' => $_SESSION['roll'],
':actual_amount' => $updated_amount_win
));
}
}
else {
echo '<p class="message invalid">You lost! You rolled a ' . $_SESSION['roll'] . ' out of 100.<span class="close">X</span></p>';
$result = 'Loss';
if($_POST['bet'] > 0) {
$updateBalanceLoss = $db->prepare("UPDATE `users` SET `balance` = `balance` - :balance WHERE `uid` = :uid");
$updateBalanceLoss->execute(array(':uid' => $_SESSION['uid'], ':balance' => $updated_amount_loss));
$insertBetLoss = $db->prepare("INSERT INTO `bets`(`uid`, `result`, `amount`, `multiplier`, `time`, `roll`, `actual_amount`)
VALUES (:uid, :result, :amount, :multiplier, :time, :roll, :actual_amount)");
$insertBetLoss->execute(array(
':uid' => $_SESSION['uid'],
':result' => $result,
':amount' => $_POST['bet'],
':multiplier' => $_POST['payout'],
':time' => date("F j, Y, g:i a"),
':roll' => $_SESSION['roll'],
':actual_amount' => $updated_amount_loss
));
}
}
$_SESSION['roll'] = rand(0, 10000)/100;
$_SESSION['client'] = rand(100000, 999999);
$secret = 123;
$_SESSION['server'] = hash('sha512', $_SESSION['roll'] . $_SESSION['client'] . $secret);
}
?>
您的onclick
方法中缺少一个parseInt
和一个setter方法。目前,你只得到文本框的值并将其相乘。你需要将其放回文本框中,如下所示:
$('#bet').val(multipliedValue);
您已满onclick
将如下所示:
<button id="changeBet" onclick="$('#bet').val(parseInt($('#bet').val())*2);">X2 Bet</button>
但是,onclick
在很多方面都不好:
- 在DOM中看到的太难看了
- HTML和JS之间没有分离的关注点
- 您需要将其添加到每个HTML标记中
- 其中的多个语句会使DOM看起来不可读(对某些人来说)等等
相反,为什么不使用jQuery呢?
$("#changeBet").click(function() {
$('#bet').val(parseInt($('#bet').val())*2);
});
你也可以使用普通的ol'JS:
var button = document.getElementById("changeBet");
button.onclick = function () {
var input = document.getElementById("bet")
input.value *= 2;
}
您真的不应该像这样把jQuery放在HTML中。它真的很难阅读,可能会绊倒一些需要维护这些代码的糟糕程序员。
你想做的是调用一个不同的函数来更新值:
<button onclick="someFunc()">X2 Bet</button>
然后在您的JavaScript代码中(这意味着在<script>
标记中,您将嵌入实际的函数
function someFunc(){
var theValue = $('#bet').val();
// convert the value into a number
var theNumber = parseInt( theValue );
$('#bet').val( theValue * 2 );
}
更好的是,根本不要使用onclick
方法!给你的按钮一个id
属性,并附加一个点击处理程序:
<button id="x2bet">X2 Bet</button>
// this is exactly the same as "$(document).ready(function(..."
$(function(){
$("#x2bet").on('click', function(){
var theValue = $('#bet').val();
// convert the value into a number
var theNumber = parseInt( theValue );
$('#bet').val( theValue * 2 );
});
});
我可以看到你在那里尝试了一些
<button onClick="$('#bet').val()*2;">X2 Bet</button>
但它并没有按您的意愿执行,因为在这一行中,您没有为id为bet
的输入分配任何新值。这应该会奏效:
<button onClick="$('#bet').val(parseInt($('#bet').val()) * 2);">X2 Bet</button>
当您使用.val()jQuery函数进行赋值时,您必须将新值作为参数传递。
我还建议将JavaScript与HTML、分离
<button id="x2bet">X2 Bet</button>
在JavaScript 中
$('#x2bet').click(function () {
$(this).val(parseInt($(this).val()) * 2);
});
请记住,您需要type="button"
,否则按钮将默认提交表单,并说明您可以使用<button type="button" onClick="$('#bet').val($('#bet').val()*2);">X2 Bet</button>
。不过,最好的做法是为它调用一个函数
此处演示
$('#bet').val($('#bet').val()*2);
还不够吗?您的代码不会发生任何事情,因为您没有将新值分配回#bet对象。。所以你应该把你的代码改成这个。。
- 如何在执行 Ajax 请求大量数据库更新时实现进度条
- 用sql数据库更新谷歌地图标记
- 数据库更新后刷新数据表
- 通知浏览器数据库更新的最佳方法
- AJAX 数据库更新
- 数据库更新的用户确认 - php + Ajax
- 如何使用 typicode/lowdb 文件数据库更新项目数组
- 如何在数据库更新时向客户端发送警报,如facebook聊天
- 在数据库更新时通过Jquery Ajax跟踪和操纵内容
- 付款处理成功,但数据库更新失败
- AJAX数据库更新与CSS按钮颜色改变使用Codeigniter
- 我怎么能得到一个文本字段的值从数据库更新的形式
- Angular JS从数据库更新视图
- 使用外部数据库更新多个站点上的html和css
- 如何在不重新加载页面的情况下使用数据库更新游戏的最高分?
- 当数据库更新时,web应用程序中的通知
- php/javascript在数据库更新后更改内联标签
- 从远程数据库更新Kendo UI Mobile中的列表视图
- 如何处理Angular控制器中的错误从MongoDB数据库更新/删除在Express
- onclick提交上的数据库更新字段不起作用