我有一個簡單的函數,可以切換表中的ON/OFF 1位列,我知道它工作正常,但似乎是執行兩次。
在解析/解釋期間執行PHP函數?
// toggleFunction($variable) toggles the value and returns the new result
// and is placed BEFORE the EXIT to see what value it returns. It is ommitted in the
// second block below because I only want it to run once, and then EXIT through
// showPage();
// #1
// TOGGLES ONCE CORRECTLY BUT THE PAGE IS NOT DISPLAYED BECAUSE IT DOES NOT REACH
// showPage();
...
if(isset($variable))
{
var_dump($class->toggleFunction($variable));
EXIT;
$user_data = $class->toggleFunction($variable);
$class->showPage($user_data);
}
// #2
// APPEARS TO TOGGLE TWICE AND DISPLAYS INCORRECT VALUE ON PAGE
...
if(isset($variable))
{
$user_data = $class->toggleFunction($variable);
$class->showPage($user_data);
}
function showPage($user_data)
{
echo $user_data;
EXIT;
}
function toggleFunction($id)
{
try{
$array = array($id);
$query = "UPDATE table SET ONOFF = ONOFF XOR 1 WHERE id=?;";
$stmt = $pdo_conn->prepare($query);
$stmt->execute($array);
$query = "SELECT ONOFF FROM table WHERE id=?;";
$stmt = $connection->prepare($query);
$stmt->execute($array);
$result = $statement->fetchAll();
return $result;
}
catch{
... }
}
調試:配售的var_dump()的,退出的顯示,沒有任何HTML格式得到正確的值,但隨後的頁面出現刷新(即使有絕對沒有刷新調用)出現切換前的錯誤(原始)值。我認爲這是因爲它正在更新值兩次(來回更改),所以看起來沒有變化。其他調試技術顯示,在第一次切換嘗試失敗後,該頁面刷新期間該功能正常工作。
最後提到:我對解析和執行階段(分配內存,分配變量等)的知識很低到平庸。我在之前的其他Web腳本活動中已經注意到了這一點,但從未發現它爲什麼在第一次傳遞期間似乎實際執行代碼。最初,這導致我放置多個isset()塊以確保$ _GET和其他變量實際存在,但這似乎不是問題。我還在需要時使用include_once()的腳本開頭。
發佈您的代碼。如果你說'toggleFunction()'應該執行的動作執行兩次,任何想幫助你的人都需要知道'toggleFunction()'在做什麼。 – miken32
我覺得太多的代碼只會混淆。將編輯。 – SilverFox
此外,它會幫助發佈實際的代碼,而不是「測試」代碼(它甚至不會解析;你在那裏缺少一個=)並解釋輸入,實際輸出和預期輸出。 – miken32