星球大战时间再次出现。
因此,我有固定的代码无法正常工作,但现在它的行为“奇怪”,IMO。
代码应该执行的操作是从MySQL表中选择不使用光剑的字符,然后将其布尔标志从true更改为false。我知道选择代码正在运行,我已经在SQL中进行了测试。
选择字符的代码(在MySQL中有效)
$lightsaber = new lightsaber($Conn);
$gameView = new gameView($Conn);
if ($_POST) {
if ($_POST['lightsaber'] = 1) {
$lightsabers = $lightsaber->noLightsaberUsed();
$smarty->assign('lightsabers_used', $lightsabers);
for ($i = 0; $i <= count($lightsabers); $i++) {
$gameView->iterateGameView($lightsabers[$i]);
}
} elseif ($_POST['lightsaber'] = 2) {
$lightsabers = $lightsaber->lightsaberUsed();
$smarty->assign('lightsabers_used', $lightsabers);
for ($i = 0; $i <= count($lightsabers); $i++) {
$gameView->iterateGameView($lightsabers[$i]);
}
}
$count = $gameView->countGameView();
if ($count > 1) {
header("Location: index.php?p=rebel");
} elseif ($count < 1) {
header("Location: index.php?p=fail");
} else {
header("Location: index.php?p=gameview");
}
}
?>
更改标志的代码(在gameview类中)
Public function iterateGameView($id)
{
$changeFlag = "UPDATE gameview SET flag = false WHERE flag = :flag";
$stmt = $this->Conn->prepare($changeFlag);
$stmt->execute(array(':flag' => $id));
}
选择代码(为清楚起见)
public function noLightsaberUsed()
{
$query = "select * from person, weapon, person_weapon
WHERE flag = 1 AND person.id = person_weapon.person_id AND person_weapon.weapon_id = weapon.id and weapon.name != 'Lightsaber'
AND person.name NOT IN (select person.name from person, weapon, person_weapon WHERE person.id = person_weapon.person_id
AND person_weapon.weapon_id = weapon.id and weapon.name = 'Lightsaber')";
$stmt = $this->Conn->prepare($query);
$stmt->execute(array());
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
我的智慧到此为止,我一生都无法明白为什么这行不通。
我已经在此工作了2天的大部分时间,但我看不出为什么