如何通过POST通过POST从选择表单中获取所有选中的选项?

时间:2014-02-28 12:47:34

标签: php html

这让我疯了。我知道还有其他问题可以解决这个问题,我想我已经尝试了所有我在其中阅读过的内容。 要么我误解了一些非常基本的东西,要么需要另外一双眼睛。

因此,当使用登录凭据和诸如此类的代码满足此代码时,已经启动了会话。我正在尝试从选择的表单中获取选中的选项并使用它们。

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 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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你需要在你的选择组中添加[]到你的选项,并从你的选择名称中删除[]。并使用上面的代码