将全局变量传递给 ajax 函数,将 post 传递给 php,保存到数据库

pass global variable into ajax function, post to php, save to database

我有一个全局变量要传递给 Ajax。 Ajax 对我来说很陌生,我做了一些研究和测试,但我被卡住了。对于我的第一个问题,我不知道变量是否被传递到 Ajax 函数中。

我对 Json 不是很感兴趣,不过我也尝试过,但也不正确。

我不希望从 php 返回页面,页面正在使用现有的 js 和 html.

进行更新

我的第二个困境是我的 php 文件在应该激活的时候被激活,但是它在数据库字段中发布了 0。这里的另一个问题也是它正在将所有用户的钱更新到同一个 0 条目,所以它的某些设置方式还没有正确设置。我相信我的 bindValue 编码正确,我真的不确定是否需要将 POST 分解为 php 页面,如果是这样,如果我必须使用该值,我该怎么做?此外,当我将 WHERE userid = userid 添加到 UPDATE 时,游戏完全停止。

我们将不胜感激任何帮助,即使是一个小的修复。

这是文件。预先感谢您帮助我解决问题 Ajax。

game.js

money = 2000;

function updateMoney() {
   if ( pot <= 0 ){ 
   if ( money <= 0 ){ 
   document.getElementById("aaa").innerHTML = "Lost? Here's A Loan !!!";
      money = 1000 ;}
  }
   document.getElementById("money").innerHTML = money;
  }
  




function enterWager(){  // doMath function inside here
var x=parseInt(document.getElementById('textbox').value,10);  // Displays the textbox for placing a 
wager
   if (money <= 0) {
      x = 0 ; }
document.getElementById("bet").innerHTML = parseInt(x,10);
if(isNaN(x)||x < 1 || x > 250)
{
document.getElementById("aaa").innerHTML = "You're Out Of Money!!!";
}
    document.getElementById("textbox").style.display = 'none';
    document.getElementById("button").style.display = 'none';
    
    


function doMath() {  //   PVPCoinTransaction()   and   
transferCoins()  are off right now. Plus 4 tests failed 
and 
are also off at end of function.

   if (pot == 0){
       countWagers = 0;
   }
   
   if (money <= 0) {
      money = 0 ; }
   if (x > money) {
      x = money ; }
  money = money - x;
  pot = pot + x;
                 }


doMath()


function updateDatabase() {   

// POST test not working
//    $.ajax({
//     url: 'php/credits/credit.php', // 
//     type: "POST",
//     dataType:'json', // add json datatype to get json
//     data: ({money: 145}),  Do I put div here and how?
//     success: function(data){
//   I dont need to return anything, just update db field!
//     }
//}); 


// this section reaches php but posts 0 into database field
//data = money // I don't think this is working.
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
  xml = new XMLHttpRequest(); 
  } else if (window.ActiveXObject) { // IE 8 and older  
  xml = new ActiveXObject("Microsoft.XMLHTTP");  
  }
xml.open("POST", "../php/credits/credit.php", true);
xml.setRequestHeader("Content-type", "application/x- 
www-form-urlencoded");
xml.send(money);
}



updateMoney()
updateDatabase()

credit.php

<?php 
session_start();
if(empty($_SESSION['userid']))    // check user login
{
    header("Location: ../login/index.php");
}
include('../../login/database.php');

if (isset($_SESSION['userid'])) {
//  $money = null;
//  $money = $_POST['money'];

try {
$db = DB();
header("Content-Type: application/json"); 

$stmt = $db->prepare("UPDATE usersystem SET money=:money");
$stmt->bindValue(':money', $_POST['money'], PDO::PARAM_STR);
$stmt->execute(); 

}
catch(PDOException $e)
{
    $db = null;  
    echo $e->getMessage();  
}
}
?>

您的服务器需要在您的 $_POST 数组中有一个名为 money 的键。这意味着为了正确接收数据,您还需要使用密钥发送数据。在 PHP 中,此数据看起来像一个关联数组,在 JavaScript 中,它看起来像一个对象,都有键和值。

实现 key-value 结构的最简单方法是创建具有 key=value 结构的字符串。这类似于表单将数据发送到服务器的方式,并且不需要修改后端来接收数据。

var package = `money=${money}`;

XMLHttpRequest没有错(ActiveXObject有错;)),我建议学习Fetch API。它是一种更新和简化的向服务器发出 HTTP 请求和从服务器发出 HTTP 请求的规范。您已表示不需要接收响应,这意味着发送数据的基本 POST 请求如下例所示。

fetch('../php/credits/credit.php', {
  method: 'POST',
  body: package
});

第一个参数是 URL,第二个是选项对象。 method 属性 不言自明。 body 属性 是您发送的数据(相当于 xml.send(package);)。

现在,如果您的 URL 是正确的,那么应该将包含正确数据的 HTTP 请求发送到您的服务器。

// $_POST should have received data, and because you've send it as a
// key-value it will be represented as an associative array with, 
// you guessed it, keys and values.
$money = $_POST[ 'money' ];

// $money will always be a string in this form, so you'll 
// need to convert it if you need it to be a number.
$money_as_number = intval( $money );

要测试这是否有效,请打开浏览器开发人员工具中的 network 选项卡。您可以检查是否发生 HTTP 请求,并检查是否已发送正确的 payload

好的,这就是控制台中的工作方式...

function updateDatabase() { 

var package = money;
console.log(package);
fetch('../php/credits/credit.php', {
  method: 'POST',
     headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
  body: JSON.stringify(package)

});
}

控制台日志 = 1975 game.js:1608:9

我现在只需要通过 php 将 1975 年的值 post 发送到数据库。它仍在 posting 0 到我的数据库中。

我解决了。谢谢你让我走上了正确的道路!

<?php 
session_start();
if (isset($_SESSION['userid'])) {
 $money = json_decode(file_get_contents('php://input'), true);
 $money_as_number = intval( $money );
 $userid = $_SESSION['userid'];
try {
$db = DB();

$stmt = $db->prepare("UPDATE usersystem SET money=:money WHERE userid=:userid");
$stmt->bindValue(':money', $money_as_number, PDO::PARAM_INT);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->execute();

}
    catch(PDOException $e)
    {
        $db = null;  
        echo $e->getMessage();  
    }
    }
    ?>