我正在开发一款游戏,玩家获得初始投资(由投资者随机提供).这成为他们在产品上花费的预算.我正在try 编写代码,以便当他们购买一种产品(他们可以购买多个相同的产品)时,通过扣除成本将其反映在预算中.我一直收到预算不足的错误,当有足够的钱时,我不确定为什么.

Index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Investment Game</title>
</head>
<body>
    <h1>Welcome to the Investment Game</h1>
    <p>Your budget is: $<span id="budget">...</span></p>

    <h2>Products:</h2>
    <ul id="products">
    </ul>

    <script>
        // Get the initial budget and product list when the page loads
        fetch('GetInitialData.php').then(response => response.json()).then(data => {
            document.getElementById('budget').innerText = data.budget;

            const productsElement = document.getElementById('products');
            data.products.forEach(product => {
                const listItem = document.createElement('li');
                listItem.innerHTML = `${product.name} ($${product.price}) 
                                      <button onclick="buyProduct('${product.name}', ${product.price})">Buy</button>`;
                productsElement.appendChild(listItem);
            });
        });

        // Function to buy a product
        function buyProduct(name, price) {
            fetch('BuyProduct.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({productName: name, price: price}),
            })
            .then(response => response.json())
            .then(data => {
                if(data.success) {
                    document.getElementById('budget').innerText = data.newBudget;
                } else {
                    alert(data.message);
                }
            })
            .catch(error => console.error('Error:', error));
        }
    </script>
</body>
</html>

BuyProduct.php

<?php

session_start();

$inputData = json_decode(file_get_contents('php://input'), true);
$productName = $inputData['productName'];
$price = $inputData['price'];

// Check if user has enough budget
if($_SESSION['budget'] >= $price) {
    $_SESSION['budget'] -= $price;
    echo json_encode(array("success" => true, "newBudget" => $_SESSION['budget']));
} else {
    echo json_encode(array("success" => false, "message" => "Insufficient budget"));
}
?>

GetInitialData.php

<?php
session_start();

$investors = array(
    "Fred" => 24000,
    "Barney" => 32000
);

// Assign a random investor's budget to session if not already set
if (!isset($_SESSION['budget'])) {
    $randomInvestor = array_rand($investors);
    $_SESSION['budget'] = $investors[$randomInvestor];
}

// Example product list
$products = array(
    array("name" => "Product 1", "price" => 100),
    array("name" => "Product 2", "price" => 150)
);

// Return initial data as JSON
echo json_encode(array("budget" => $_SESSION['budget'], "products" => $products));
?>

推荐答案

好的-看起来我在开始会话时遇到了许可问题.

通过在PHP文件的顶部添加ini_set('display_errors', '1');,我能够看到Permission denied的警告消息.

在调用session_start()之前,我调用了session_save_path(),并给它指定了一个服务器可写的目录名.

Javascript相关问答推荐

在nodejs中使用快速路由的API路径

文件阅读器未读取一个文件

vue3类型脚本中可能未定义对象''

如何在alpinejs中显示dev中x-for的元素

在JavaScript中打开和关闭弹出窗口

我的glb文件没有加载到我的three.js文件中

React:未调用useState变量在调试器的事件处理程序中不可用

使用TMS Web Core中的HTML模板中的参数调用过程

在React中获取数据后,如何避免不必要的组件闪现1秒?

没有输出到带有chrome.Devtools扩展的控制台

Mongoose post hook在使用await保存时不返回Postman响应

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

当id匹配时对属性值求和并使用JavaScript返回结果

有条件重定向到移动子域

让chart.js饼图中的一个切片变厚?

JS Animate()方法未按预期工作

在不扭曲纹理的情况下在顶点着色器中旋转UV

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

如何组合Multer上传?

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色