- PR -

PHPでのコンボボックス

1
投稿者投稿内容
hsi
ベテラン
会議室デビュー日: 2004/06/27
投稿数: 84
お住まい・勤務地: 東京都内
投稿日時: 2005-03-31 14:43
こんにちわ。

PHPで作成したプログラムで携帯電話で見た時、
コンボボックス内の項目を選択し更新ボタンを押すと、
コンボボックスのあるページを更新したいのですが、
ボタンを押しても何の反応も無く変化しません。

初歩的な事で申し訳ありませんがご教授をお願いします。

※PC側でWebではボタンを押すと変化します。
※PC側でのWebではファイルを単純に読み直してしまうため、
 コンボボックスで選択した項目のままにならず、初期の
 項目に戻ってしまいます。

ソースは以下の通りです。


ファイル名 data01.php

<?php

print "<form action=data01.php method=post>";
$c = $str[0][0];
echo $c;

print "<select name=data_select>";
for($k=24; $k>0; $k--){
print "<option value={$k}>{$str[$k][0]}</option>";
}
print "</select><input type=submit value=更新></form>";
print "<br><br>";

print "<table border=0>";
print "<tbody>";
for($j=1; $j<11; $j++){
print "<tr><td>{$str[0][$j]}<br></td>";
switch($_GET['data_select']){
case 1:
print "<td align=right><a href=graph{$j}>{$str[1][$j]}</a><br></td></tr>";
break;
default:
print "<td align=right><a href=graph{$j}>{$str[24][$j]}</a><br></td></tr>";
break;
}
}
print "</tbody>";
print "</table>";
?>
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2005-04-08 08:15
こんにちは。

引用:

コード:
  print "<form action=data01.php method=post>";




とPOSTしているわけですから、

引用:

[code]
switch($_GET['data_select']){
[code]


ここは$_POSTではありませんか?

caseが1とdefaultしかないので、1を選んだときしか内容が変わりませんよね?
hsi
ベテラン
会議室デビュー日: 2004/06/27
投稿数: 84
お住まい・勤務地: 東京都内
投稿日時: 2005-04-11 10:40
>めぐ様

返事ありがとうございます。

申し訳ありません。

Case1 〜 Case24まで存在しています。

中略していたので”中略”を記述していれば良かったです。

私のミスです。

本題ですが、このままだとmethod=postで
$_POSTでOKでした。

しかし、ファイルを再度読み直す事により
コンボボックス内のデータ(時間)が初期値に
戻ってしまうので選択したものをselectedで
固定したところpostで送るデータが変わってしまいました。

本来

print "<select name=data_select>";
for($k=24; $k>0; $k--){
print "<option value={$k}>{$str[$k][0]}</option>";

の$kには1〜24が入っていたのでCase1〜Case24により
データの更新をおこなっていたのですが、

<?php printf( ($_POST['select']==$str[$k][0]) ? "selected" : ""); ?>

このようにコンボボックスで選択されたデータを保持しようとすると
$kがコンボボックスのデータ10:00が代入されてしまいCaseが使えなくなってしまいました。

もともとCSVから取り出したデータなので時間になってしまうと条件分岐の際、
0:00〜23:59まで全て作らなければならないのかなと思いました。

(でも、この発想からすると、CSVの一行読み出しが出来ないような気がします。。。)

Foreach?

プログラム経験がほとんど無いため調べながらやっているのですがどうも
うまくいきません。

なにか良い方法がありましたら
ご教授のほどよろしくお願いします。
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2005-04-26 09:09
もう解決したでしょうか。

未だに、何をしたいのかが理解できていないのですが、

引用:

hsiさんの書き込み (2005-04-11 10:40) より:
しかし、ファイルを再度読み直す事により
コンボボックス内のデータ(時間)が初期値に
戻ってしまうので選択したものをselectedで
固定したところpostで送るデータが変わってしまいました。



ファイルを読み直すというのは、GETでページを取得するということですか?
その場合は、初期値に戻るのは当然の動作だと思いますけど。
初めてそのページにアクセスした場合でも、一度”更新”ボタンを押した後の
リロード時でも、$_SERVER["REQUEST_METHOD"] は 同じ GET なわけですから。

POSTされた$kの値のところに selectedをつけるだけではだめですか?

コード:
print "<select name=data_select>"; 
for($k=24; $k>0; $k--){
  print "<option value={$k} "
  if($_SERVER["REQUEST_METHOD"] == "POST"
     and $k == $_POST["data_select"]){
    print "selected=\"selected\"";
  }
  print ">{$str[$k][0]}</option>";
}



1

スキルアップ/キャリアアップ(JOB@IT)