PHP - 隐藏输入类型以获取id

时间:2012-11-17 15:28:12

标签: php html select hidden

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

  $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']."'  >;

   }

1 个答案:

答案 0 :(得分:2)

问题是您正在使用<input>创建多个name='SID',并且接收页面可能只会接受第一个[]。您需要使用echo " <input type ='hidden' name='SID[]' value='".$row['SID']."' ></option>"; //----------------------------------^^^^^^

将它们创建为数组
var_dump($_POST['SID'])

在接收页面中,使用foreach()检查内容。它将是一个数组,您可以使用<input>迭代它。

我注意到您在<option>内嵌套了SID。这可能不是一个好方法(我不认为它是有效的HTML)。相反,将所有$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']."'  >";
}

然后循环两次,构建选择选项和隐藏的输入:

</font>

关于有效HTML的主题...... 我也看到了一个迷路的关闭<font>。不推荐使用<option>,而应该使用CSS来定义字体属性。

评论后更新:

如果您想在<input>中传递SID以及值(Sname),那么最简单的方法是完全跳过隐藏的<option value>。相反,传递|属性中的两个值,由explode()之类的内容分隔。在接收它的PHP代码中,// 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(),请查看the manual on basic usage。简而言之,您必须在访问$_SESSION的每个脚本上调用{{1}},并且必须在脚本生成任何输出(包括空格)之前执行。这是在脚本之间共享数据的标准方法。