【发布时间】:2016-05-30 11:36:33
【问题描述】:
我需要一些关于不回显 $bonusjson 数组的函数的帮助。函数是CheckBonus()。除此功能外,所有其他功能都可以正常工作。当它运行时,它没有任何回应,我不知道为什么。这真的是我第一次使用类和函数。 CheckBonus() 假设查询数据库并检查表以查看 $hash 变量数据是否存在,然后运行查询并打印出数据。 p>
我认为问题在于 if($stmt->num_rows != 0)。我也尝试过使用 if(!empty($stmt->store_result())) 来打印数据,但是如果我将 $hash 更改为不在数据库中,它不运行 AddUser()。
<?
//Mysql connect info
$servername = "removed";
$username = "removed";
$password = "removed";
$database = "removed";
$link = new mysqli($servername, $username, $password, $database);
if ($link->connect_error)
{
die("Connection failed: " . $link->connect_error);
}
//Get or send the information from/to the game
$func = $_GET['func'];
$hash = $link->real_escape_string($_GET['user']);
$bonus = $link->real_escape_string($_GET['bonus']);
class CheckUser
{
function CheckBonus($hash)
{
global $link;
global $hash;
$query = "SELECT bonustier, resettime, userid FROM members WHERE userid = ?";
if ($stmt = $link->prepare($query))
{
$stmt->bind_param('s', $hash);
$stmt->execute();
if($stmt->num_rows != 0) {
$stmt->store_result();
$stmt->bind_result($bonustier, $resettime, $hash);
while($stmt->fetch())
{
//Check if enough time has passed since last login bonus
$time = time();
$time2 = ((($time - $resettime) / 60) / 60);
$time3 = substr($time2, 0, strpos($time2, "."));
if($time3 >= 24)
{
$connection = 1;
$usergood = 1;
$loginbonus = 1;
$hoursince = $time3;
$bonusarray = array(
'BonusCheck' => array(
'connection' => $connection,
'usergood' => $usergood,
'loginbonus' => $loginbonus,
'bonustier' => $bonustier,
'hoursince' => $time3
),
);
$bonusjson = json_encode($bonusarray, 128);
echo $bonusjson;
}
else //If enough time has not passed, tell the game.
{
$connection = 1;
$usergood = 1;
$loginbonus = 0;
$hoursince = $time3;
$bonusarray = array(
'BonusCheck' => array(
'connection' => $connection,
'usergood' => $usergood,
'loginbonus' => $loginbonus,
'bonustier' => $bonustier,
'hoursince' => $time3
),
);
$bonusjson = json_encode($bonusarray, 128);
echo $bonusjson;
}
}
}
else
{
$this->AddUser($hash);
}
}
$stmt->close();
}
function UpdateBonus($hash, $bonus)
{
global $link;
global $hash;
global $bonus;
if($stmt = $link->prepare("UPDATE members SET loginbonus = ?, bonustier = ?, resettime = ? WHERE userid=?"))
{
$stmt->bind_param('ssss', $loginbonus, $bonustier, $resettime, $hash);
switch($bonus)
{
case 0:
$bonustier = 1;
break;
case 1:
$bonustier = 2;
break;
case 2:
$bonustier = 3;
break;
case 3:
$bonustier = 4;
break;
case 4:
$bonustier = 5;
break;
case 5:
$bonustier = 0;
break;
}
$loginbonus = 0;
$resettime = time();
$success = '1';
$updatearray = array(
'UpdateBonus' => array(
'login' => $loginbonus,
'result' => $success
),
);
$updatejson = json_encode($updatearray, 128);
echo $updatejson;
$stmt->execute();
$stmt->close();
}
}
function AddUser($hash)
{
global $link;
global $hash;
if($stmt = $link->prepare("INSERT INTO members (userid, loginbonus, bonustier, resettime) VALUES (?, ?, ?, ?)"))
{
$stmt->bind_param('ssss', $userid, $loginbonus, $bonustier, $resettime);
$userid = $hash;
$loginbonus = 1;
$bonustier = 1;
$resettime = time();
$stmt->execute();
$stmt->close();
$this->CheckBonus($hash);
}
}
function CheckFunc($func)
{
switch($func)
{
case cb:
$this->CheckBonus($hash);
break;
case ub:
$this->UpdateBonus($hash, $bonus);
break;
case au:
$this->AddUser($hash);
break;
default:
echo 'Function not found.';
break;
}
}
}
$newObject = new CheckUser();
$newObject->CheckFunc($func);
?>
如果你碰巧对我的问题投了反对票,你能告诉我为什么吗?我在这里做错了什么,我可以在哪些方面做得更好,在提出问题时我可以在哪些方面做得更多?
【问题讨论】: