问题是您正在创建多个<input>
,name='SID'
而接收页面可能只接受第一个。您需要将它们创建为数组而不是[]
echo " <input type ='hidden' name='SID[]' value='".$row['SID']."' ></option>";
//----------------------------------^^^^^^
在接收页面中,检查内容var_dump($_POST['SID'])
。它将是一个数组,您可以使用foreach()
.
我注意到你嵌套<input>
在 <option>
s 中。这可能不是一个好方法(我认为它不是有效的 HTML)。相反,将所有内容存储SID
在一个数组中并循环两次以创建您的输入。
$ids = array();
while( $row = mysql_fetch_array($result)) {
// First make an array of ids
$ids[] = $row;
}
然后循环两次,构建选择选项和隐藏输入:
// <select> opened above...
// Inside the <select> tag already opened...
foreach ($ids as $id) {
echo "<option value='$id[Sname]' >$id[Sname]</option> ";
}
// Close the <select>
// </select>
// Then later, loop to build the hidden inputs in the array format
foreach ($ids as $id) {
echo " <input type ='hidden' name='SID[]' value='".$id['SID']."' >";
}
关于有效 HTML 的主题......我还看到那里有一个流浪</font>
者。 <font>
已弃用,您应该使用 CSS 来定义字体属性。
评论后更新:
如果您想将 SID 与值 (Sname) 一起传递,<option>
那么最容易<input>
完全跳过隐藏。相反,在<option value>
属性中传递两个值,用|
. 在接收它的 PHP 代码中,explode()
它们返回两个值:
// In your original while loop:
// The value consists of both SID and Sname, separated by |
// Now, you have no need for the <input type='hidden' name='SID'> at all. Remove them.
echo "<option value='$row[SID]|$row[Sname]' >$row[Sname]</option> ";
// Then in the PHP script which receives the form values, explode() them:
// Both values come from the <select name='Sname'>
list($SID, $Sname) = explode("|", $_POST['Sname']);
// Now your variables $SID and $Sname hold the correct values
// If you need to reuse them, store into `$_SESSION
session_start();
$_SESSION['SID'] = $SID;
$_SESSION['Sname'] = $Sname;
// On other scripts, to read the values
session_start();
echo $_SESSION['SID'];
如果您不熟悉如何使用$_SESSION
,请查看基本使用手册。长话短说,您必须调用session_start()
每个访问 的脚本$_SESSION
,并且必须在脚本生成任何输出(包括空格)之前执行此操作。这是在脚本之间共享数据的标准方法。