做php选择使用Json解码字符串的数学问题中的字符串,然后更新我的数据库



我将javascript文件中的数字1作为$played=json解码传递。我不确定我的Select查询是否正常工作,或者我的数学计算完全错误。PHP对我来说还是个新手,我不确定是否可以重命名字符串,并且仍然可以进行查询。我知道所有的东西都必须传递到PHP中才能工作,我不能只制作一个变量并绑定它就可以进行更新。我想我可以重命名我传递的JSON字符串,这样它就可以暂时使用,但后来我想我只需要将SELECT字符串命名为$results,然后将两者相加。

我遇到的问题是,它似乎对数据库进行了两次更新。无论我下注多少次,我的数据库都只显示数字2。就好像它停止了计数和更新。

欢迎任何建议,如果可以的话,提前感谢您的寻求和帮助。

好吧,这没用。也许我不明白答案。它没有向数据库中发布任何内容。我还需要绑定这些值吗?还是不需要?

<?php 
session_start();
if(empty($_SESSION['userid']))
{
header("Location: ../login/index.php");
}
include('../../login/database.php');
if (isset($_SESSION['userid']))
$played = json_decode(file_get_contents('php://input'), true);
$userid = $_SESSION['userid'];
try {
$db = DB();
$stmt = $db->prepare("UPDATE usersystem SET played = played + :played WHERE userid = :userid");
$stmt->bindValue(':played', $played, PDO::PARAM_STR);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e)
{
$db = null;  
echo $e->getMessage();  
}
}
echo $_POST['package']; 
?>

这是javascript POST

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

这越来越令人恼火。我有这个版本信息:4.6.4,最新稳定版本:4.9.7 phpmyadmin。

由于我的played.php不会将数据发布到数据库中,我决定使用credit.php文件来测试我试图制作的播放条目。以下是我的测试方法,这也不会将信息发布到我的数据库中,但我的学分确实会发布到数据库中。

credits.php

<?php 
session_start();
if(empty($_SESSION['userid']))
{
header("Location: ../login/index.php");
}
include('../../login/database.php');
if (isset($_SESSION['userid'])) {
$money = json_decode(file_get_contents('php://input'), true);
$money_as_number = intval( $money );
$userid = $_SESSION['userid'];
try {
$db = DB();
//$a = 1;
//$db->query("update usersystem set played=played+". intval($a) ."WHERE userid=:userid");
$db->query("UPDATE usersystem set played = played + 1 WHERE userid=:userid");
$stmt = $db->prepare("UPDATE usersystem SET money=:money WHERE userid=:userid");
$stmt->bindValue(':money', $money_as_number, PDO::PARAM_STR);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e)
{
$db = null;  
echo $e->getMessage();  
}
}
echo $_POST['package']; 
?>

这是我的钱Ajax,它与播放的Ajax 相同

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)
});

也许我不能用我的版本玩=玩+?有什么想法吗?


我终于解决了!!!非常感谢您的回答和教育。你的回答让我找到了我需要的研究,这样我就可以更好地理解事情,让我告诉你,我不再有任何疑问,对fetch和它的使用有更好的理解!

<?php 
session_start();
if(empty($_SESSION['userid']))
{
header("Location: ../login/index.php");
}
include('../../login/database.php');
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("SELECT played FROM usersystem WHERE userid=?");
$stmt->execute([$userid]);
$played = $stmt->fetchColumn();
$results = 1;
$played = $results + $played;

$stmt = $db->prepare("UPDATE usersystem SET money=:money, played=:played WHERE userid=:userid");
$stmt->bindValue(':money', $money_as_number, PDO::PARAM_INT);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->bindValue(':played', $played, PDO::PARAM_INT);
$stmt->execute();
}
catch(PDOException $e)
{
$db = null;  
echo $e->getMessage();  
}
}
//echo $_POST['package']; 
?>

您完全可以在单个UPDATE语句中完成此操作,而无需使用SELECT语句。

您可以将存储的值增加$played的值,只需:

UPDATE usersystem SET played = played + :played WHERE userid = :userid

并删除foreach语句。不确定你的意图是什么,但它正在获取用户ID按降序排序的最后一行用户数据。

另外,$played = json_decode(file_get_contents('php://input'), true);对我来说非常可疑。你确定$played在这一点上是整数吗?json_decode(..., true)会给你一个数组。我认为你需要在前进之前解决这个问题。

最新更新