0

私のフォームでは、ユーザーは以下の 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);

                    }


?>
4

5 に答える 5

2

parseIntメソッドに aと setter メソッドがありませんonclick。現在、テキスト ボックスの値を取得して乗算するだけです。次のように、テキスト ボックスに戻す必要があります。

 $('#bet').val(multipliedValue);

onclick次のように表示されます。

 <button id="changeBet" onclick="$('#bet').val(parseInt($('#bet').val())*2);">X2 Bet</button>

しかし、onclick多くの点で悪いです:

  1. DOMで見るのはとても醜いです。
  2. HTML と JS の間に関心の分離はありません
  3. すべての HTML タグに追加する必要があります
  4. その中に複数のステートメントがあると、DOMが(一部の人にとって)読めないように見えます。

この代わりに、jQuery を使用してみませんか?

$("#changeBet").click(function() {       
   $('#bet').val(parseInt($('#bet').val())*2);
});

普通の JS を使用することもできます。

var button = document.getElementById("changeBet");
button.onclick = function () {
    var input = document.getElementById("bet")
    input.value *= 2;
}
于 2013-07-29T19:34:18.550 に答える
1

このように 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 );
    });
});
于 2013-07-29T19:32:03.007 に答える
1

あなたがそこで何かを試したことがわかります

<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);
});
于 2013-07-29T19:32:24.127 に答える