1

我希望当用户选择一个学生姓名以获取学生 ID 作为隐藏输入以在下一页中使用它时,问题是当我将其添加到我的代码中时,它没有显示所有学生列表以供选择,它只显示一个学生姓名(存储在数据库中的第一个) m 有什么想法吗?!我的代码

  $sql = "SELECT s.Sname, e.PID , s.SID
                          from student AS s
                          INNER JOIN evaluator AS e                       
                          WHERE (e.EID1 = '$id' AND s.PID = e.PID) OR  (e.EID2 = '$id' AND s.PID = e.PID)
                          GROUP BY s.Sname  ";
         $result = mysql_query ($sql, $connection);

         echo "<tr><th >Student Name <font size='4'></font></th>";
         echo "<td><select id='Sname' name='Sname' >";

        echo "<option value='' selected='selected'>--</option> ";

        while( $row = mysql_fetch_array($result))
   {

        echo "<option value='$row[Sname]' >$row[Sname]</option> ";
        echo " <input type ='hidden' name='SID' value='".$row['SID']."'  >;

   }
4

1 回答 1

2

问题是您正在创建多个<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,并且必须在脚本生成任何输出(包括空格)之前执行操作。这是在脚本之间共享数据的标准方法。

于 2012-11-17T15:37:25.707 回答