• 締切済み

一行で表示させたい。

質問は2つあります。 (1) <table border="1"> <td>日付</td> <td>曜日</td> <?php // 時間表示 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $timeid = $row["timeid"]; $jikan = cnv_dispstr($row["jikan"]); ?> <td><?php echo $jikan ?></td> <?php } ?> </tr> <?php  $lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy)); for ($i = 1; $i <= $lastd; $i++) { $ts = mktime(0, 0, 0, $mm, $i, $yyyy); $ymd = date("Y/m/d", $ts); //予約者を表示してる $ymdstr = strftime("%Y年%m月%d日(%a)", $ts); ?> <td><?php echo $ymd ?></td> <?php //曜日表示 $aday = array("日", "月", "火", "水", "木", "金", "土"); $w = date("w", $ts); printf('<td style="color:%s;background-color:%s;"><span style = "font-size:15pt">%s</span></td>' ,$textcolor[$w],$backcolor[$w], $aday[$w]); ?> <?php// 時間ごとの予約表示 $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $timeid = $row["timeid"]; $jikan = cnv_dispstr($row["jikan"]); $link = $_SERVER["PHP_SELF"]. "?hyouji=kousin&hiduke=".$ymd."&timeid=".$timeid; ?> <td><a href="<?php echo $link //予約者からリンクが外れる ?>"> <?php echo yoyakuchk($ymd,$timeid) ?></a></td> <?php } ?> </tr> <?php } ?> </table> を実行すると 9:00|9:30|10:00|.... 12/1 ○  ○  ○ 12/2鈴木  ○  ○ 12/3 ○ 山田 ○ と実行されます。 これを今日の日付だけを表示させたいのでうがうまくいかずに困っています。 (2)カレンダーの日付をクリックしたら、(1)の一行で表示している予約できる画面を表示させたいのこっちもうまくいかずに困っています。 例えば、 カレンダーで12月1日をクリックしたら、 9:00|9:30|10:00|.... 12/1 ○  ○  ○ が表示できるようにしたいです。 いい方法がありましたら、よろしくお願いします。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

まずは、一遍に全部やらずに順番に作成しましょう。 1,まずは、htmlの基本を押さえる。 2.送信を伴うプログラムを作るには、form タグおよびそのform内要素の記述法を調べること。 htmlも入れ子構造で成り立っており、form 内部にtable全体を含める事は可能ですが、途中に入れたりしないように。 3.次に、tableのセル(tdタグ内)に、ラジオボタン要素を置いて、そのvalue値を日付数値にする。ラジオボタンのnameを全て同じにすれば、いずれかの一つの日付しか選べないように出来る。 4.このhtmlを、phpから、forループを利用して出力する。カレンダー部分は出来てるようなので、form内の要素をどう書くかを調べれば付け加えれるでしょう? さらにform内に送信ボタンを加える 5.受信側でどのようにデータを受け取るのかを調べる。 とりあえず、受信用phpプログラムを別に作る。合体させるのは、あとで考える。 phpの $_GET[], $_POST[], $REQUEST[] を調べて下さい。 6.受け取ったデータから、SQL文を作る。 SQL文の基本も知っておくこと。以下のような条件文くらいは理解して下さい。カラム名は適当です。 select column_list from table_name where column_char = 'bbb' and column_int = 1 本日や指定日付のデータ抽出は、日付カラムのデータ型によっても条件記述が微妙に異なります。 7.さらに、外から受け取るデータをSQL文に入れる時には、SQLinjection 対策が必要です。 とりあえずは、 mysqlでは、mysql_real_escape_string() でエスケープすること、文字列比較のところは、きちんと''で括ること。

fufufumi98
質問者

お礼

hrm_mmmさんお返事ありがとうございました。 今回の1~7を参考に少しずつ改良していきたいと思います。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

>今日の日付だけを表示させたい 提示ソースにsql文が有りませんが、sql文の方で本日データのみ取ってくれば済むはずです。 >カレンダーで12月1日をクリックしたら カレンダー表示tableには、radioボタンを置いてないのですか? radioボタンのonclick でformのsubmitを行わせるか、別にsubmitボタンを作るかは、まずやれる方でやってみて下さい。 radioボタンのvalue に日付データを入れておけば、送信されてきたデータによって、sql文の日付選択条件を変更すればよいです。

fufufumi98
質問者

補足

hrm_mmmさんお返事ありがとうございます。 >提示ソースにsql文が有りませんが、sql文の方で本日データのみ取ってくれば済むはずです。 $sql = "SELECT * FROM jikan ORDER BY timeid"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>"> とあるのですが、これを変更すればよいのでしょうか? >カレンダー表示tableには、radioボタンを置いてないのですか? カレンダーはこんな感じで作っているのですが・・・ <?php mb_language("ja"); mb_internal_encoding("euc-jp"); if (!$year && !$month) { $year = date("Y", $time); //今日の"年" $month = date("n", $time); //今日の"月" $day = date("j", $time); } if ($_GET["year"]) {  //"年" がGETされてきたら(表示) $year = $_GET["year"];  //GETの値を受け取って変数に割り当てる $month = $_GET["month"]; //GETの値を受け取って変数に割り当てる } if ($_GET["hyear"]) {   //"年" がGETされてきたら(表示) $year = $_GET["hyear"];  //GETの値を受け取って変数に割り当てる $month = $_GET["hmonth"]; //GETの値を受け取って変数に割り当てる $day = $_GET["hday"];  //GETの値を受け取って変数に割り当てる } $day = 1;  //"日"は 1 から始める $youbi = array("日","月","火","水","木","金","土"); //曜日を配列に入れる $you = date("w", mktime(0, 0, 0, $month, $day, $year));    //1日の曜日 $backy = $year; //前年 $backm = $month - 1; //前月 $nexty = $year; //翌年 $nextm = $month + 1; //来月 if ($backm == 0) { //もし前月が0月になったら $backy = $year - 1; //年から1を引いて前年にする $backm = 12; //12月にする } if ($nextm == 13) { //もし来月が13月になったら $nexty = $year + 1; //年に1を足して翌年にする $nextm = 1; //1月にする } ?> <html> <head><title>カレンダー</title></head> <?php print "<a><a href='./calender.php?year=" . $backy . "&month=" . $backm . "'>←先月</a>\n"; //先月をクリックしたら前月に順繰り変える URLも print $year."年".$month."月のカレンダー\n"; //表示も変える print "<a><a href='./calender.php?year=" . $nexty . "&month=" . $nextm . "'>来月→</a>\n"; //来月をクリックしたら来月に順繰り変える URLも ?> </tr> <tr> <?php print "<td bgcolor='#ffaaaa' align='center' width='100'><font size='10'><b>日</b></font></td>\n"; print "<td bgcolor='#ffffdd' align='center' width='100'><font size='10'><b>月</b></font></td>\n"; print "<td bgcolor='#ffffdd' align='center' width='100'><font size='10'><b>火</b></font></td>\n"; print "<td bgcolor='#ffffdd' align='center' width='100'><font size='10'><b>水</b></font></td>\n"; print "<td bgcolor='#ffffdd' align='center' width='100'><font size='10'><b>木</b></font></td>\n"; print "<td bgcolor='#ffffdd' align='center' width='100'><font size='10'><b>金</b></font></td>\n"; print "<td bgcolor='#ddddff' align='center' width='100'><font size='10'><b>土</b></font></td></tr>\n"; ?> </tr> <tr> <?php if ($day == 1) { //1日だったら $yo = 0; //初期値を 0 として変数 $yo を設定 for ($i = $yo; $i < $you; $i++) { //正しい曜日まで繰り返す print "<td a class='cale' valign='top'>&nbsp;</a>"; //空白セルを出力 } } $monday = 0; //初期値を 0 として変数 $yo を設定 for ($i = $day; $i < 3660; $i++) { //日付に1を足しながら3660日まで繰り返し $you = date("w", mktime(0, 0, 0, $month, $day, $year)); //曜日 if ($you == 1) { //月曜日なら$mondayに+1 $monday++; } 最近PHPをはじめたばかりなので、質問ばかりですみません。もしよろしければ、具体的にコードも教えていただければ助かります。 よろしくお願いします。

関連するQ&A