2015-01-10 18 views
-1

如果值在數據庫中不重複,則使用以下代碼運行更新查詢。爲什麼PHP if..esleif..else在MySQL查詢後再次從頭開始

if($lastvote==false){ // There isn't duplicate entry, just run INSERT query. 
    $this->save(); 
    return "Vote recorded!"; 
}elseif($lastvote=="down" && $this->vote_value=="down"){ 
    return "Already voted down!"; 
}elseif($lastvote=="up" && $this->vote_value=="up"){ 
    return "Already voted up!"; 
}elseif($lastvote=="up" && $this->vote_value=="down"){ 
    $this->update_last($this->topic_id, $this->updated_by, $this->vote_value); 
    return "Vote changed to down!"; 
}elseif($lastvote=="down" && $this->vote_value=="up"){ 
    $this->update_last($this->topic_id, $this->updated_by, $this->vote_value); 
    return "Vote changed to up!"; 
} 

查詢效果很好。但功能後

$這個 - > update_last()

private function update_last($topic, $by, $value){ 
    global $database; 
    $sql = "UPDATE ".static::$table_name." SET vote_value='".$value."' WHERE topic_id = ".$topic." AND updated_by = ".$by; 
    $database->query($sql); 
    return ($database->affected_rows() == 1) ? true : false; 
} 

它沒有返回 「投票改爲向上/向下」 按過去的兩個條件。而是在成功執行來自最後兩個條件的UPDATE查詢之後,從前兩個查詢返回「已投票上/下」。

請指導我在哪裏出錯?

+0

這很可能是您的腳本連續調用_twice_時出現的問題。這將解釋1.缺少輸出和2.意外輸出。檢查你的http服務器訪問日誌文件,你會在那裏看到處理過的請求。 – arkascha

+0

@arkascha我檢查了apache訪問日誌文件。但沒有發現任何錯誤。但是在update_last()函數中更新查詢後才返回true。我從上面的函數中獲得正確的返回值。請幫忙! –

回答

0

你可以得到相同的結果寫:如果錯誤仍然存​​在

if($lastvote==false){ // There isn't duplicate entry, just run INSERT query. 
    $this->save(); 
    return "Vote recorded!"; 
} 

if ($lastvote == $this->vote_value) return "Already voted $lastvote!"; 

$this->update_last($this->topic_id, $this->updated_by, $this->vote_value); 
return "Vote changed to $this->vote_value!"; 

你需要檢查的$lastvote$this->vote_value實際值,看看你是什麼樣的比較值。

+0

感謝您的簡化。但是在成功執行''this-> update_last()''函數後,仍然得到''Already voted $ lastvote!''返回值。不是**投票改爲$ this-> vote_value!**。 如果我禁用更新查詢並試圖從''update_last()''函數返回''true'',我會得到正確的返回消息。 –

+0

你的代碼有其他錯誤。 '$ this-> update()'的結果現在甚至沒有被檢查。因此,無論返回「true」還是「false」,都會發送「返回」消息。你有調試啓用? – RST

0

調試後,我做了工作。

當我提取如果從class.php文件前端條件它的工作。現在我只使用class.php文件來存儲函數。

我將lastvote()update_last()函數改爲靜態函數並在前端獲得truefalse。根據條件從哪裏調用所需的函數並返回結果。