2016-03-01 61 views
0

我還是PHP的新手,我很害怕。根據特定的HTML運行PHP IF語句選擇表單的值

我到處搜索,找不到匹配。

我想要做的是根據HTML選擇表格的值運行IF。任何人都可以將我指向正確的方向嗎?

(我想設置一個投票系統,我可以用不同的提交按鈕更新MySQL數據庫,但我希望用一個選擇框代替。)

HTML:

<form action='vote_action.php' method='post'> 
<select name="selectbox"> 
<option value=「optone」>optone</option> 
<option value=「opttwo」>opttwo</option> 
</select> 
<input type='submit' name="submit" value=’submit’/> 
</form> 

PHP :

if(isset($_POST['selectbox'])) 
{ 
    if(isset($_POST[‘optone’])) 
     { 
     $vote_optone = "UPDATE mytable SET votes=votes+1 WHERE id=1"; 

     $run_optone = mysqli_query($con, $vote_optone); 

     if($run_optone){ 

     echo 「First updated「; 
         } 
     } 


    if(isset($_POST[‘opttwo’])) 
     { 
     $vote_opttwo = "UPDATE mytable SET votes=votes+1 WHERE id=2」; 

     $run_opttwo = mysqli_query($con, $vote_opttwo); 

     if($run_opttwo){ 

     echo 「Second updated「; 
         } 
     } 


} 
+1

這裏有什麼問題嗎?除了一些看起來不錯的智能引語格式化問題。檢查查詢中的錯誤可能有助於揭露問題,因爲您沒有這樣做。 – tadman

+0

檢查'selectbox'不是'opttwo'; 'opttwo'是價值,而不是名稱。 – chris85

+0

當我運行它或顯示回聲時,它不會更新數據庫。假設我從下拉列表中選擇'optone';我只是得到一個空白頁面。當我在底部添加一個回顯時,它會顯示,如果我將SQL放入'selectbox'中,它就會運行。我知道表單正在發送該值,因爲它在我回應時顯示。難倒! –

回答

1

變化

if (isset($_POST[‘optone’])) { 
    // ... 
} 

if ($_POST['selectbox'] == 'optone')) { 
    // ... 
} 

opttwo這樣做。

請注意,PHP中的字符串用'"引用,而不是用引用。

+0

非常感謝奧斯卡!我已經有了'optone'的功能,但是當選擇'opttwo'時,它仍然會運行optone。你能幫我嗎? –

+0

忽略我最後的評論!得到它的工作。非常感謝! –

0
if ($_POST['selectbox'] === 'optone') 

optone和opttwo是值

-1

Is'nt這是一個更好的解決方案?

<form action="vote_action.php" method="post"> 
    <select name="selectbox"> 
     <option value="1">optone</option> 
     <option value="2">opttwo</option> 
    </select> 
    <input type="submit" name="submit" value="submit" /> 
</form> 

PHP:

if(isset($_POST['selectbox'])) { 

$query = mysqli_query($con, "UPDATE mytable SET votes=votes+1 WHERE id=".$_POST['selectbox'].""); 

    if($query){ 
     echo "Updated"; 
    } 

} 

注:這是vunerable SQL注入!

編輯:更新對那些不這麼做,你想用戶所想;)

$allowed_ids = array(1, 2); 

if(isset($_POST['selectbox']) && in_array($_POST['selectbox'], $allowed_ids)) { 

$selected = bin2hex($_POST['selectbox']); 
$query = mysqli_query($con, "UPDATE mytable SET votes=votes+1 WHERE id=UNHEX('$selected')"); 

    if($query){ 
     echo "Updated"; 
    } 

} 
+0

這有兩個問題。首先,正如您已經提到的那樣,SQL注入漏洞。其次,惡意用戶可以輕鬆提交「0」或「1」以外的整數值,這可能會改變該表中的其他行。但是,您可以使用''UPDATE mytable ... WHERE id =「。((int)(bool)$ _POST ['selectbox'])''來有效地緩解這兩個問題。儘管如此,我仍然建議不要這個解決方案,因爲將來您可能會擁有其他'id'而不是'0'和'1'。 – OscarJ

+0

所以,如果我已經提到你不必再提及嗎?用簡單的解決方案就可以解決惡意的用戶輸入問題:將所有允許的ID設置爲數組。檢查它是否存在,並瞧。用戶輸入應始終經過驗證。不是我的任務,也不是提問者要求的地方。但是現在,我將在第二個 –

+0

更新我的代碼,爲什麼downvote?!它是一個正確的答案提問者要求什麼? –