問題は、複数<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