スレッド表示 | フラット表示〕 全トピック 920 件中 148 番目 次≫ ≪前

コンボボックスの初期表示について

created: 2007-01-24 23:05 | modified: 2007-01-26 02:15 | reply: 4

[3540] コンボボックスの初期表示について

user: どりっぷ | created: 2007-01-24 23:05
こんばんわ、質問をさせてください。
いまPHPにてHPを作成しています。
その際にPHPコードの中にコンボボックスを作成し、
その中身にDBからselect文にてもってきたアイテムを
格納しようとしています。

そこまではできたのですが、更新作業(submit)を行って
再表示をした際に、選んだアイテムを表示させたまま、
ページを再表示させたいと思っています。
例えば、コンボボックスのアイテムにA~Fまでの値を
DBよりもってきて入れて、Cを押して更新ボタンを
押下します。其の直後ページを再表示させたときに、
コンボボックスのアイテムはCを選んでいる状態で
再表示をさせたいのです。


現在のPHPに挿入しているコンボボックス作成用の
コードは下記のようになっています。

/* コンボボックス初期値設定定義・・・開始 */
$idx = (isset($_POST['shubetsu'])?$_POST['shubetsu']:"0");
$checked = array("", "");
$checked[$idx] = "selected";
/* コンボボックス初期値設定定義・・・終了 */

print('<select name="shubetsu" style="position:absolute;top:100px;left:600px;">');
print('<option value="1" <?=$checked[1]?>>りんご');
print('<option value="2" <?=$checked[2]?>>なし');
print('<option value="3" <?=$checked[3]?>>ばなな');
print('<option value="4" <?=$checked[4]?>>きゅうい');
print('<option value="5" <?=$checked[5]?>>その他');
print('</select>');
/* コンボボックスの設定・・・終了 */

このような記述をしているのですが、実際にコンボボックスに
表示されるのは「>りんご」となってしまい、更新を
したときもコンボボックスの位置はトップに戻って
しまいます。

やはりコードがおかしいと思うのですが、どこが可笑しいか
わかりません。
よろしければ教えていただけないでしょうか。
reply: 3542 返信 編集 削除

[3542] Re. コンボボックスの初期表示について

user: ゆうじ | created: 2007-01-25 00:17
こんばんわ。

配列の添え字で、数値の 1 と文字の '1' は
別物と判断されますのでそれが原因ではないでしょうか。

初期値設定の所をこう直すといいかもね。

/* コンボボックス初期値設定定義・・・開始 */
$idx = (integer)$_POST['shubetsu'];
$checked = array($idx => 'selected="selected"');
/* コンボボックス初期値設定定義・・・終了 */
Parent: 3540  reply: 3543 返信 編集 削除

[3543] だめでした_/ ̄|○

user: どりっぷ | created: 2007-01-26 01:12
ゆうじさん、お返事ありがとうございます。
やってみたのですが、状況は変わりませんでした・・・。
まず、コンボボックスに「りんご」と表示したいのに、
「>りんご」となってしまうってことは、多分
print('<option value="1" <?=$checked[1]?>>りんご');
がうまく実行できていないかとおもうのですが、
どうでしょうか?エスケープ文字とか試してみたのですが、
うまくいきませんでした。
Parent: 3542  reply: 3544 返信 編集 削除

[3544] ショートタグ他

user: ゆうじ | created: 2007-01-26 01:53
print('<option value="1" <?=$checked[1]?>>りんご');

この部分はすでにPHPのコードの中にもかかわらず
さらにショートタグが入れ子になってますよ。
なので「 ?> 」のところでPHPのパースを抜けて
「 >りんご 」が表示されてると思いますが、
ひとまずHTMLソースを見て確かめてください。

print('<option value="1" '. $checked[1]. '>りんご');
print関数内を↑こう書きかえるか、
↓のように全体を書き換えるかどちらかになろうと思います。
<?php
/* コンボボックス初期値設定 */
$idx = (integer)$_POST['shubetsu'];
$checked = array($idx => 'selected="selected"');

/* コンボボックスの表示 */
?>
<select name="shubetsu" style="position:absolute;top:100px;left:600px;">
<option value="1" <?php echo $checked[1] ?>>りんご</option>
<option value="2" <?php echo $checked[2] ?>>なし</option>
<option value="3" <?php echo $checked[3] ?>>ばなな</option>
<option value="4" <?php echo $checked[4] ?>>きゅうい</option>
<option value="5" <?php echo $checked[5] ?>>その他</option>
</select>

固定的な文字列の出力に print や echo を使ってると
ダブルクォーテーションやシングルクォーテーション、
「\」などの文字のエスケープを見落としたりミスを招きやすくなります。
また、ショートタグはXMLのタグと重複するので
特に理由がない限り使わない方が
後々混乱を招かないと思います。
ので後者の書き方を推薦します。
Parent: 3543  reply: 3545 返信 編集 削除

[3545] できました!!

user: どりっぷ | created: 2007-01-26 02:15
ゆうじさん、ありがとうございます。
後者のほうが良いのではないかということで試したところ、
希望するようにできました。
本当にありがとうございます。

後者のやり方みたいに、普通のHTMLのなかにPHPの
変数を使うことができるのですね。
勉強になりました。
本当にありがとうございました。
Parent: 3544  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 148 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑