2014-02-28 25 views
0

這使我瘋狂。我知道還有其他問題可以解決這個問題,我想我已經嘗試了我讀過的所有內容。 要麼我誤解了一些非常基本的東西,要麼需要另一雙眼睛。如何通過POST通過php將所有選中的選項從選擇表單中取出?

所以有一個會話已經開始,當這個代碼與登錄憑據和whatnot會見。我試圖從選擇的表單中取出選中的選項並使用它們。

if(isset($_POST['select'])) 
{  
    if (is_array($_POST['select'])) { 
     foreach ($_POST['select'] as $x) 
      echo "<p>$x</p>"; 
     } 
    else { 
     echo "<p> There is no selection </p>"; 
    } 
} 

echo <<<_END 
<form method='post' action='profile.php' enctype='multipart/form-data'> 
<h3>Enter or edit your details </h3> 
<textarea name='text' cols='50' rows='3'>$text</textarea><br /> 
<br /> 
<span class='fieldname'>YY:</span> 
<select name="select[]" multiple="multiple" > 
<option value="Opt1"> Choice1</option> 
<option value="Opt2"> Choice2</option> 
<option value="Opt3"> Choice3</option> 
<option value="Opt4"> Choice4</option> 
</select> 
</span><br /><br /> 

_END; 
?> 

<input type='submit' value='Save Profile' /> 
</form></div><br /></body></html> 

我只貼中的相關位。

當我做我的選擇,然後單擊保存我只得到其他分支。

編輯:似乎用窗體上的默認編碼嘗試沒有解決此問題。

+2

你不是指$ _POST []不是$ _POST {}? –

+0

這是在實際的代碼。從這裏複製錯字。 – user3046061

+0

請大家記住,我有這個確切的代碼位,在另一個頁面上有相同的表單,它確實有效。我試過用空,is_array,沒有多個值。仍然無法得到任何形式的東西。某些POST數據會丟失嗎? – user3046061

回答

1

此代碼應該清楚發生了什麼。

如果沒有選擇選項被點擊,那麼在$ _POST數組中沒有創建條目。

'select []'的名稱告訴PHP將輸入轉換爲一個數組,如果有任何輸入被選擇爲這個小部件。

<?php 

if(isset($_POST['select'])) 
{ 
    if (is_array($_POST['select'])) { 
     foreach ($_POST['select'] as $x) 
      echo "<p>$x</p>"; 
     } 
    else { // this cannot happen as nothing comes in when not selected 
     echo "<p> There is no selection -- cannot happen</p>"; 
    } 
} 
else { 
    echo "<p> There is no selection </p>"; 
} 

if (isset($_POST['select'])) { 
    var_dump($_POST['select'], 'select'); // you can see what comes in! 
} 
else { 
    echo '<strong>no selected options...</strong>'; 
} 


/* 
* do appropriate 'select' action(s)... 
*/ 
if (isset($_POST['select'])) { 

    if (in_array('Opt1', $_POST['select'])) { 
    echo '<br/>do Opt1 action...<br/>'; 
    } 

    if (in_array('Opt2', $_POST['select'])) { 
    echo '<br/>do Opt2 action...<br/>'; 
    } 

    if (in_array('Opt3', $_POST['select'])) { 
    echo '<br/>do Opt3 action...<br/>'; 
    } 

    if (in_array('Opt4', $_POST['select'])) { 
    echo '<br/>do Opt4 action...<br/>'; 
    } 
    echo '<br/>'; 
} 


?> 
<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Show Select</title> 
    </head> 

    <body> 
    <div class="main" id="main"> 

     <!-- heading --> 
     <strong><?php echo 'Select setting...'?></strong><br/> 

      <form method='post' action='' enctype='multipart/form-data'> 
      <h3>Enter or edit your details </h3> 
      <textarea name='text' cols='50' rows='3'>$text</textarea><br /> 
      <br /> 
      <span class='fieldname'>YY:</span> 
      <select name="select[]" multiple="multiple" > 
      <option value="Opt1"> Choice1</option> 
      <option value="Opt2"> Choice2</option> 
      <option value="Opt3"> Choice3</option> 
      <option value="Opt4"> Choice4</option> 
      </select> 
      </span><br /><br /> 

      <input type='submit' value='Save Profile' /> 
      </form> 
    </div><br /> 
    </body> 
</html> 
+0

所以唯一的修改是刪除操作值? – user3046061

+0

不,你可以把你自己的行動,我只是想它回到這個腳本。另一個變化是$ _POST測試中的else子句。代碼已經過測試,應該可以在您的系統上運行。 –

+0

有沒有選擇 - 無法發生字符串(0)「」字符串(6)「選擇」...你用什麼瀏覽器測試? – user3046061

0

你可以使用foreach

if(isset($_POST['select'])) 
{  
foreach ($_POST['select'] as $x) 
     echo "<p>$x</p>"; 
    } 
else { 
    echo "<p> There is no selection </p>"; 
} 
} 



<form method='post' action='profile.php' enctype='multipart/form-data'> 
<h3>Enter or edit your details </h3> 
<textarea name='text' cols='50' rows='3'>$text</textarea><br /> 
<br /> 
<span class='fieldname'>YY:</span> 
<select name="select" multiple="multiple" > // remove [] from here // 
<option value="Opt1[]"> Choice1</option>  //change your options to have [] // 
<option value="Opt2[]"> Choice2</option> 
<option value="Opt3[]"> Choice3</option> 
<option value="Opt4[]"> Choice4</option> 
</select> 
</span><br /><br /> 

bassicaly您需要在您選擇組中添加[]以你的選擇並帶走[]從您選擇的名字。並使用上面的代碼

+0

出於好奇,我試了這個與我的PHP。它只保留最後的選擇。但是,爲什麼他們真的允許這種語法? – user3046061

相關問題