1

ユーザーが1人の学生名を選択して、次のページで使用する非表示の入力として学生IDを取得したいのですが、問題は、これをコードに追加したときに、選択するすべての学生リストが表示されず、表示されるのは1 人の生徒の名前 (データベースに最初に保存された名前) 何かアイデアはありますか? ! 私のコード

  $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>s の中 に入れ子になっていることに注意してください<option>。それはおそらく良いアプローチではありません (有効な HTML ではないと思います)。代わりに、すべてSIDを配列に格納し、2 回ループして入力を作成します。

$ids = array();
while( $row = mysql_fetch_array($result)) {
   // First make an array of ids
   $ids[] = $row;
}

次に、それを 2 回ループして、選択オプションと非表示の入力を構築します。

// <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 を使用してフォント プロパティを定義する必要があります。

コメント後の更新:

値 (Sname) とともに SID を渡したい場合は、hidden を完全<option>にスキップするのが最も簡単です。<input>代わりに、<option value>属性で両方の値を . などで区切って渡します|。それを受け取る PHP コードでは、explode()2 つの値に戻ります。

// 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 に答える