• ベストアンサー

GETを使わずにPOSTで送信…したいのですが。

いつもお世話になっております。 また教えて欲しい事がありまして、投稿させて頂きました。 どなた様かご教授宜しくお願い致します。 今現在、GETを使ってのデータ送信は行える用にはなっているのですが、色々調べていった結果GET送信では様々な危険性(POST送信でも 危険性があるのは変わりないみたいですが…)が伴うという事 でしたので、どうにかPOST送信に変更したいと思っています。 今後、更なる重要なデータを送るようなプログラムを書いていく際に 役立てていけるようになればと思っています。 以下ソースです。 ↓↓↓↓ <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>calendar</title> </head> <body> <form name="form1" action="yotei.php" method="post"> <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  }  print "<table border='1' align='center'><tr>"; print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>"; print "<a href=\"?year=$year3&month=$month3\"><</a>"; print " ".$year."年".$month."月のカレンダー "; print "<a href=\"?year=$year4&month=$month4\">></a></td></tr>"; print "<tr><td align='center' bgcolor='pink'>日</td>"; print "<td align='center' bgcolor='silver'>月</td>"; print "<td align='center' bgcolor='silver'>火</td>"; print "<td align='center' bgcolor='silver'>水</td>"; print "<td align='center' bgcolor='silver'>木</td>"; print "<td align='center' bgcolor='silver'>金</td>"; print "<td align='center' bgcolor='skyblue'>土</td></tr>"; $week = date(w,mktime(0,0,0,$month,1,$year)); for ($ix1 = 0 ; $ix1 < $week ; $ix1++) { print "<td align='center'>-</td>"; } // ファイルの読み込み $data = './data.CSV'; $file = fopen($data,"r"); while(!feof($file)){ $csv = fgets($file); $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納 $str = explode(",", $csv); for($day = 1 ; checkdate ($month,$day,$year) ; $day++) { if($str[1] == "$year/$month/$day") { $ymd[] = $str[1]; $all[] = "<br>予定=$str[0] <br>開始日=$str[1] <br>終了日=$str[2] <br>"; } } } if(($day+$week)%7 == 1 ) { print "bgcolor='pink'><font color='red'>"; }else if(($day+$week)%7 == 0 ) { print "bgcolor='skyblue'><font color='blue'>"; }else { print "bgcolor='wheat'>"; } $enc = ''; for($i=0 ; $i<count($ymd) ; $i++) { if($ymd[$i] == "$year/$month/$day") { $enc = $enc.urlencode($all[$i]); print "<a href=yotei.php?yotei=$enc>"; } } print "$day</a></td>"; if(($day+$week)%7 == 0 ) { print "</tr>"; } } fclose($file); $weekend = date(w,mktime(0,0,0,$month,$day,$year)); for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) { if ($weekend != 0) { print "<td align='center'>-</td>"; } } print "</tr>"; print "</table>"; ?> <table border='0' align='center'> <tr> <td width="250"> <div align="center"> <input type="button" value="戻る" onClick="location.href='data.php'" name="button"> </div> </td> </tr> </table> <br><br> </form> </body> </html>

  • PHP
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

説明がややこしいので、ソースを解析してもらうということで、直してしまいました。これで動くと思います。 yotei.phpやCSVの中身がわからないので、推測ですが。 エラー対策や、気がついたバグ取りなんかも入れてしまってます。 変更:とコメント入れてますので、変更点を見てください。 <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>calendar</title> </head> <body> <form name="form1" action="yotei.php" method="post"> <?php $year = date("Y"); $month = date("n"); $day = date("j"); $year2=$_GET["year"]; $month2=$_GET["month"]; $day2=$_GET["day"]; //先月、来月をクリックした場合の処理 if($year2!="" || $month2!="" || $day2!="") { if($year2!="") { $year = $year2; } if($month2!="") { $month = $month2; } if($day2!="") { $day = $day2; }else { $day = 1; } } // カレンダー表示(先月の場合) if($month==1) { $year3 = $year-1; $month3 = 12; }else { $year3 = $year; $month3 = $month-1; } // カレンダー表示(来月の場合) if($month==12) { $year4 = $year+1; $month4 = 1; }else { $year4 = $year; $month4 = $month+1; } print "<table border='1' align='center'><tr>"; print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>"; print "<a href=\"?year=$year3&month=$month3\"><</a>"; print " ".$year."年".$month."月のカレンダー "; print "<a href=\"?year=$year4&month=$month4\">></a></td></tr>"; print "<tr><td align='center' bgcolor='pink'>日</td>"; print "<td align='center' bgcolor='silver'>月</td>"; print "<td align='center' bgcolor='silver'>火</td>"; print "<td align='center' bgcolor='silver'>水</td>"; print "<td align='center' bgcolor='silver'>木</td>"; print "<td align='center' bgcolor='silver'>金</td>"; print "<td align='center' bgcolor='skyblue'>土</td></tr>"; $week = date(w,mktime(0,0,0,$month,1,$year)); for ($ix1 = 0 ; $ix1 < $week ; $ix1++) { print "<td align='center'>-</td>"; } // ファイルの読み込み $data = './data.CSV'; //変更:ファイルがオープンできなかった場合に、無限ループを防ぐ if($file = @fopen($data,"r")){ while(!feof($file)){ $csv = fgets($file); $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納 $str = explode(",", $csv); for($day = 1 ; checkdate ($month,$day,$year) ; $day++) { if($str[1] == "$year/$month/$day") { $ymd[] = $str[1]; $all[] = "<br>件名=$str[0] <br>内容=$str[1] <br>開始日=$str[2] <br>終了日=$str[3] <br>"; } } } //変更:ファイルを閉じる位置を変更 fclose($file); } for($day = 1 ; checkdate ($month,$day,$year) ; $day++) { print "<td align='center'"; if(($day+$week)%7 == 1 ) { print "bgcolor='pink'><font color='red'>"; }else if(($day+$week)%7 == 0 ) { print "bgcolor='skyblue'><font color='blue'>"; }else { print "bgcolor='wheat'>"; } $enc = ''; for($i=0 ; $i<count($ymd) ; $i++) { if($ymd[$i] == "$year/$month/$day") { $enc = $enc.urlencode($all[$i]); } } //変更:以下1行場所を移動、ループの中から外に出した。 //変更:form1.yoteiにデータを設定して、SubmitするようにJavaScriptを書き換え print "<a href='#' onClick='javascript:document.form1.yotei.value=\"{$enc}\";document.form1.submit();'>"; // 追加 print "$day</a></td>"; if(($day+$week)%7 == 0 ) { print "</tr>"; } } $weekend = date(w,mktime(0,0,0,$month,$day,$year)); for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) { if ($weekend != 0) { print "<td align='center'>-</td>"; } } print "</tr>"; print "</table>"; //変更:以下のもの削除、最後のループで設定された$enc固定で渡している //print "<input type='hidden' name='yotei' value='$enc'>"; // 追加 ?> <!-- 変更:空白のyoteiを用意する --> <input type='hidden' name='yotei' value=''>; <table border='0' align='center'> <tr> <td width="250"> <div align="center"> <input type="button" value="戻る" onClick="location.href='data.php'" name="button"> </div> </td> </tr> </table> <br><br> </form> </body> </html>

その他の回答 (4)

  • nick9090
  • ベストアンサー率26% (102/378)
回答No.5

セキュリティの観点から言えば、GETをPOSTに変えてもほぼ全く無意味です。 本当に安全を期すなら、SSL(https)で通信するようにしてください。

nkm-a3u-ki
質問者

お礼

nick9090様 ご教授ありがとうございます。 早速調べて、SSLも参考にさせて頂きたい と思います。 本当にありがとうございます♪♪

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.4

補足です ├yotei.php └[data]フォルダ  ├2000-10-1.csv  ├2000-10-2.csv  └2000-10-3.csv 一つの例ですが、上記のようなシステム構成にして、 yotei.php?year=2000&month=10&day=1 と呼び出して、データが存在すればyotei.php内でファイルを開いて、データ表示編集をする設計をお勧めする。 そうすると、GETで呼び出すことは別に問題がない。 (ユーザが手作業でアドレス欄に入力をするのも、やりたいならどうぞって感じですね) year=2000&month=10&day=32 のように、日付として問題のあるデータが渡された場合、『日付が正しくありません』とエラー表示させればよいかと。 必ずしも、日別のファイル構成にしなくても良いですが、今のままだとデータが増えた場合でも毎回すべての読み込みが必要なので、どんどん遅くなってきます。 (仮に毎日3件入力すると、1年弱で1000件になります。) 少々気になったので、老婆心ながら。

nkm-a3u-ki
質問者

お礼

BellBell様 たくさんのご教授誠にありがとうございました。 確かに予定が増えていけば遅くなっていってしまうのは問題 ですね(汗 細部まで気にかけてくださって本当に感謝致します。 早速ソースの修正をしたところ、データの受け渡しが行われ ていることが確認できました☆ まさに感動ですっ!! ここからは受け渡されたページで表示がされるように頑張っ てプログラムを作成させていこうと思います♪♪

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

まとめると、formとボタンを使わずに、リンクでPOSTする方法って事ですかね? リンクをクリックすることで、JavaScriptを使って、(見えない)フォームにデータを設定して、送信って事ができますね。 下記は適当に作った、送信部分のみのサンプルです。 <html> <head> <script type="text/JavaScript"> function SendPost( Y, M, D){ document.hiddenform.year.value = Y; document.hiddenform.month.value = M; document.hiddenform.day.value = D; document.hiddenform.submit(); } </script> </head> <body> <form action="./next.php" name="hiddenform" method="post"> <input type="hidden" name="year" value="" /> <input type="hidden" name="month" value="" /> <input type="hidden" name="day" value="" /> </form> <a href="javascript:SendPost('1999','11','2');" >1999/11/2</a><br /> <a href="javascript:SendPost('2000','10','31');" >2000/10/31</a><br /> </body> </html>

nkm-a3u-ki
質問者

お礼

BellBell様 度々ご教授ありがとうございます。 サンプルを参考させて頂いたのですが、思った様にいきませんでした(涙 formは使ってPOST送信したいと思うのですが… 自分なりに足らない知恵を振り絞ってソースを変更してみましたが、ここからどうしたら良いか悩んでいます…orz もし、また再度ご教授頂ける様でしたら、宜しくお願い致します。

nkm-a3u-ki
質問者

補足

変更したソースです。 ↓↓↓↓ <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>calendar</title> </head> <body> <form name="form1" action="yotei.php" method="post"> // 追加 <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  }  print "<table border='1' align='center'><tr>";  print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>";  print "<a href=\"?year=$year3&month=$month3\"><</a>";  print " ".$year."年".$month."月のカレンダー ";  print "<a href=\"?year=$year4&month=$month4\">></a></td></tr>";  print "<tr><td align='center' bgcolor='pink'>日</td>";  print "<td align='center' bgcolor='silver'>月</td>";  print "<td align='center' bgcolor='silver'>火</td>";  print "<td align='center' bgcolor='silver'>水</td>";  print "<td align='center' bgcolor='silver'>木</td>";  print "<td align='center' bgcolor='silver'>金</td>";  print "<td align='center' bgcolor='skyblue'>土</td></tr>";  $week = date(w,mktime(0,0,0,$month,1,$year));  for ($ix1 = 0 ; $ix1 < $week ; $ix1++) {   print "<td align='center'>-</td>";  } // ファイルの読み込み  $data = './data.CSV';  $file = fopen($data,"r");  while(!feof($file)){   $csv = fgets($file);   $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納   $str = explode(",", $csv);   for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {    if($str[1] == "$year/$month/$day") {     $ymd[] = $str[1];     $all[] = "<br>件名=$str[0]          <br>内容=$str[1]          <br>開始日=$str[2]          <br>終了日=$str[3]          <br>";    }   }  }  for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {   print "<td align='center'";   if(($day+$week)%7 == 1 ) {    print "bgcolor='pink'><font color='red'>";   }else if(($day+$week)%7 == 0 ) {    print "bgcolor='skyblue'><font color='blue'>";   }else {    print "bgcolor='wheat'>";   }   $enc = '';   for($i=0 ; $i<count($ymd) ; $i++) {    if($ymd[$i] == "$year/$month/$day") {     $enc = $enc.urlencode($all[$i]);      print "<a href='#' onClick='javascript:document.form1.submit();'>"; // 追加    }   }   print "$day</a></td>";   if(($day+$week)%7 == 0 ) {    print "</tr>";   }  }  fclose($file);  $weekend = date(w,mktime(0,0,0,$month,$day,$year));  for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) {   if ($weekend != 0) {    print "<td align='center'>-</td>";   }  }  print "</tr>";  print "</table>";  print "<input type='hidden' name='yotei' value='$enc'>"; // 追加 ?> <table border='0' align='center'>  <tr>   <td width="250">   <div align="center">    <input type="button" value="戻る" onClick="location.href='data.php'" name="button">   </div>   </td>  </tr> </table> <br><br> </form> </body> </html>

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

> $year2=$_GET["year"]; > $month2=$_GET["month"]; > $day2=$_GET["day"]; 上のそれぞれを、下のように$_POSTに書き直せばいいんじゃないかな? $year2=$_POST["year"]; $month2=$_POST["month"]; $day2=$_POST["day"]; GETの場合の危険性は、目に見えるだけに気軽に値を変更されるって事ですね。 POSTの場合も値を変更してデータを渡すのは、簡単だけどメンドクサイので、わざわざやらないだろうって予測レベルですね。 GETの場合はブックマーク可能であるとかリンクを書くのが簡単って利点もありますし、結局はどちらが目的に合うかって使い分けですかね。

nkm-a3u-ki
質問者

補足

BellBell様 回答ありがとうございます。 私の説明不足で申し訳ございません。 やりたい内容としては、カレンダーの日付についているリンクに Uploadしたファイルの該当日内容をPOSTで送信して、別ウィンドウ で開きたいというものです。 今現在は、GET送信で該当日内容を受渡し、別ウィンドウで表示して いるのですが、先にも述べました様にGET送信ではURLに直で内容が 記されてしまいますので、これをどうにかしたいと思っています。 度々申し訳ございませんが、ご教授宜しくお願い致します。

関連するQ&A

  • 該当日のスケジュール内容を別ウィンドウで表示したいのですが…。

    初めて質問させて頂きます。 プログラム初心者です。 今、課題でカレンダー作成(予定を表示させる)をしています。 現在の時点でカレンダーの指定日(予定のある日)にリンクをつけるところまでは出来たのですが、リンク先に移動した際に該当日の予定を表示させるのが出来なくて困っています。 (予定はCSVファイルからuploadしています。) どなたかお力を貸して頂けませんでしょうか??…orz。 宜しくお願いします。 ソースはこちらです。 …読みにくくてすみません(泣 <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>カレンダー</title> </head> <form name="skl" method="post" action="yotei.php"> <body> <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  } // テーブルの作成  print "<tableborder='1'><tr>";  print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>";  print "<a href=\"?year=$year3&month=$month3\"><<</a>";  print " ".$year."年".$month."月のカレンダー ";  print "<a href=\"?year=$year4&month=$month4\">>></a></td></tr>";  print "<tr><td align='center' bgcolor='pink'>日</td>";  print "<td align='center' bgcolor='silver'>月</td>";  print "<td align='center' bgcolor='silver'>火</td>";  print "<td align='center' bgcolor='silver'>水</td>";  print "<td align='center' bgcolor='silver'>木</td>";  print "<td align='center' bgcolor='silver'>金</td>";  print "<td align='center' bgcolor='skyblue'>土</td></tr>";  $week = date(w,mktime(0,0,0,$month,1,$year));  for ($ix1 = 0 ; $ix1 < $week ; $ix1++) {   print "<td align='center'>-</td>";  } // ファイルの読み込み  $data = "date- data.CSV";  $file = fopen($data,"r");  while(!feof($file)){   $csv = fgets($file);   $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納   $str = explode(",", $csv);   for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {    if($str[1] == "$year/$month/$day") {     $ymd[] = $str[1];    }   }  }  for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {   print "<td align='center'";   if(($day+$week)%7 == 1 ) {    print "bgcolor='pink'><font color='red'>";   }else if(($day+$week)%7 == 0 ) {    print "bgcolor='skyblue'><font color='blue'>";   }else {    print "bgcolor='wheat'>";   }   for($i=0 ; $i<count($ymd) ; $i++) {    if($ymd[$i] == "$year/$month/$day") {     print "<a href=yotei.php>";    }   }   print "$day</td>";   if(($day+$week)%7 == 0 ) {    print "</tr>";   }  }  fclose($file);  $weekend = date(w,mktime(0,0,0,$month,$day,$year));  for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) {   if ($weekend != 0) {    print "<td align='center'>-</td>";   }  }  print "</tr>";  print "</table>"; ?> <table border='0'> <tr> <td width="250"> <div align="center"> <input type="button" value="ファイル参照画面へ戻る" onClick="location.href='upload.php'" name="button"> </div> </td> </tr> </table> <br><br> </body> </form> </html>

    • 締切済み
    • PHP
  • 複数の予定(1日に含まれる)を表示させたい

    CSVファイルから読み込んだデータをカレンダーに組み込んで、該当日にリンクを貼り別ページで予定を表示するところまでは出来たのですが、その先で悩んでいます。 自分が表示したい内容としては、該当日に複数の予定がある場合はその内容を全部表示させたいんです…orz 例として、11月12日に3つの予定があったなら、3つの予定を全て表示させたい☆ というものです。 しかしながら実際は予定が上書きされ、最後に格納された予定のみの表示となってしまいます(泣 どうやったら予定を上書きされることなく表示させることができるのでしょうか?? ご教授宜しくお願い致します。 ソースはこんな感じです(泣 // ファイルの読み込み $data = 'data.CSV'; $file = fopen($data,"r"); while(!feof($file)){  $csv = fgets($file);  $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納  $str = explode(",", $csv);  for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {   if($str[1] == "$year/$month/$day") {    $ymd[] = $str[1];    $all[] = "<br>件名=$str[0]         <br>開始日=$str[1]         <br>開始時刻=$str[2]         <br>終了日=$str[3]         <br>終了時刻=$str[4]         <br>";   }  } } for($day = 1 ; checkdate ($month,$day,$year) ; $day++) { print "<td align='center'";  if(($day+$week)%7 == 1 ) {   print "bgcolor='pink'><font color='red'>";  }else if(($day+$week)%7 == 0 ) {   print "bgcolor='skyblue'><font color='blue'>";  }else {   print "bgcolor='wheat'>";  }  for($i=0 ; $i<count($ymd) ; $i++) {   if($ymd[$i] == "$year/$month/$day") {    $enc = urlencode($all[$i]);     print "<a href=yotei.php?yotei=$enc>";   }  }  print "$day</a></td>";  if(($day+$week)%7 == 0 ) {   print "</tr>";  } } fclose($file);

    • ベストアンサー
    • PHP
  • 表(table)の字の大きさの設定

    ブログに表を載せたいと思って調べているところなのですが、↓のようにして、入力すると、字が14くらいの大きさになってしまいます。9くらいの小さめの字にしたいのですが、字の大きさは、どのように入力すれば良いのでしょうか?教えて下さい。どうぞ宜しくお願い致します。 <div align="center"> <table border=1><tr><tdalign="center"colspan="3"bgcolor="#99ee66">あ<BR>あ</td></tr><tr><td align="center" colspan="3"bgcolor="#ffcd59">あ</td></tr><tr><td width="30" align="left" valign="top" bgcolor="#efefde">あ</td><td width="45" align="left" valign="top" bgcolor="#efefde">あ</td><td align="left">・あ<BR>あ</td></tr><td width="30" align="left" valign="top" bgcolor="#efefde">あ</td><td width="45" align="left" valign="top" bgcolor="#efefde">あ</td><td align="left">あ</td></tr></table></div>

    • ベストアンサー
    • HTML
  • カレンダーの今日の日付をハイライトする。

    <?php $year = $_POST['year']; if($year == null){ $year = date(Y); } $month = $_POST['month']; if($month == null){ $month = date(n); } $today = $_POST['today']; if($today == null){ $today = date(j); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="../style.css"> <style type="text/css"> .dot { text-align:center;background-color:#ffffff;font-size:11px;color:black;padding:2px;height:21px } .head_0 { text-align:center;background-color:#ffeeee;font-size:11px;color:red;padding:2px } .head_6 { text-align:center;background-color:#eeffd0;font-size:11px;color:blue;padding:2px } .head { text-align:center;background-color:#ffffee;font-size:11px;color:black;padding:2px } .sun { text-align:center;background-color:#ffeeee;font-size:11px;color:red;padding:2px;height:21px } .sat { text-align:center;background-color:#eeffd0;font-size:11px;color:blue;padding:2px } .today { text-align:center;background-color:#ffcc00;font-size:11px;color:blue;padding:2px } .othr { text-align:center;background-color:#ffffee;font-size:11px;color:black;padding:2px } </style></head> <body><div class="file2" style="height:280px"> <form method = "POST" action = PHP061.php> <?php ///////////////////////////////////////////////////////////////////////カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year."年".$month."月</td><tr>"; ////////////////////////////////////////////////////////////////////////曜日表示部分 $weekday = array("SUN","MON","TUE","WED","THU","FRI","SAT"); for($hcnt = 0 ; $hcnt<7 ; $hcnt++){ if($hcnt == 0 or $hcnt == 6){ echo "<td class='head_".$hcnt."'>"; } else { echo "<td class='head'>"; } echo $weekday[$hcnt]."</td>\n"; } echo "</tr>\n"; ////////日数と曜日の計算 $days = cal_days_in_month ( CAL_GREGORIAN, $month, $year ); $week_start = jddayofweek ( cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0 ); ////////日付が始まる前の空白 for($dot1 = 0 ; $dot1 < $week_start ; $dot1++){ echo "<td align='center' class='dot'></td>\n"; } //////////日付表示部分 for( $day = 1 ; $day <= $days ; $day++ ){ if(($day+$week_start)%7 == 1){ //日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if(($day+$week_start)%7 == 0){ //土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if($day == $today){ echo "<td class = 'today'>$day</td>\n"; } else { //平日 echo "<td class='othr'>$day</td>\n"; } } //////////最終日後の空欄の表示 $wend = 35 - ($days + $week_start) ; if($wend < 0){ $wend += 7; } if($wend == 7){ echo ""; //この行はなくてもよい } else if($wend != 0){ for($dot2 =0 ; $dot2 < $wend ;$dot2++){ echo "<td align='center' class='dot'></td>\n"; } } /////////カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n"; ?> <br><br> </div> </form> </body> </html> 上記のソースでカレンダー表示は行えます。 しかし、今日の日付をハイライトすることができません。。 どなたかご存知の方、いらっしゃらないでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • PHPによるカレンダーについて

    PHPでカレンダーを作成しています。 プルダウンで年月を指定し、更新ボタンを押せば、指定した年月のカレンダーを表示させたいのですが、うまくいきません。 更新ボタンを押してもカレンダーが変わらないです。 KOMOカレンダーというサイトを参考にして、文字コードを変えただけです。 教えてくださる方がいらっしゃいましたら宜しくお願いいたします。 <?php $last_year = 2037; $wday_color = "#000000"; $sat_color = "#0000ff"; $sun_color = "#ff0000"; $reg_color = "#ffccff"; $year = (!isset($year)) ? date("Y") : $year; $month = (!isset($month)) ? date("n") : $month; ?> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>カレンダー</TITLE> </HEAD> <BODY> <P><FONT SIZE="6" COLOR="#006600">カレンダー</FONT></P> <P> <TABLE BORDER="1"CELLSPACING="1" CELLPADDING="1"> <TR> <TD COLSPAN="7"> <SELECT NAME="year"> <?php for($i = 2002; $i <= $last_year; $i++){ echo "<option value=".$i.(($i == $year) ? ' selected':'').">".$i."年\n"; } ?> </SELECT> <SELECT NAME="month"> <?php for($i = 1; $i <= 12; $i++){ echo "<option value=" . $i . (($i == $month) ? ' selected':'').">".$i."月\n"; } ?> </SELECT> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="更新"></TD> </TR> <TR> <TD> <P ALIGN="CENTER"><FONT COLOR="red">日</FONT> </TD> <TD> <P ALIGN="CENTER">月 </TD> <TD> <P ALIGN="CENTER">火 </TD> <TD> <P ALIGN="CENTER">水 </TD> <TD> <P ALIGN="CENTER">木 </TD> <TD> <P ALIGN="CENTER">金 </TD> <TD> <P ALIGN="CENTER"><FONT COLOR="blue">土</FONT> </TD> </TR> <?php $time = mktime(0, 0, 0, $month, 1, $year); $day_of_first = date("w", $time); $date_of_month = date("t", $time); $week_of_month = ceil($date_of_month / 7); if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){ $week_of_month++; } for($i = 1; $i <= $week_of_month * 7; $i++){ if($i % 7 == 1){ echo "<tr>"; } if(($i - 1 < $day_of_first) || ($i > $date_of_month + $day_of_first)){ echo "<td>&nbsp;</td>"; }else{ if($i % 7 == 1){ $color = $sun_color; }elseif($i % 7 == 0){ $color = $sat_color; }else{ $color = $wday_color; } echo "<td width=30 height=30 align=right valign=top>"; echo "<font color=" . $color . ">"; echo $i - $day_of_first; echo "</font></td>"; } if($i % 7 == 0){ echo "</tr>\n"; } } ?> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • カレンダーについて教えてください。

    phpでカレンダーを作っているのですが休日を設定したい場合 の方法がわかりません。 for文で日にちを表示させているのですが休日設定の配列の値を どのように参照すればいいかで悩んでおります。 // 現在の日付を取得 $year = date("Y"); $month = date("n"); $today = date("j"); // 休日を設定 $holyday = array('1', '5', '12', '28'); // カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year . "年" . $month . "月</td><tr>"; // 曜日表示部分 $weekday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); for ($i = 0 ; $i < 7 ; $i++) { if ($i == 0 or $i == 6) { echo "<td class='head_" . $i . "'>"; } else { echo "<td class='head'>"; } echo $weekday[$i] . "</td>\n"; } echo "</tr>\n"; // 日数と曜日の計算 $days = cal_days_in_month (CAL_GREGORIAN, $month, $year); $week_start = jddayofweek (cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0); // 日付が始まる前の空白 for ($dot1 = 0 ; $dot1 < $week_start ; $dot1++) { echo "<td align='center' class='dot'></td>\n"; } // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { if (($day+$week_start)%7 == 1) { // 日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if (($day+$week_start)%7 == 0) { // 土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if ($day == $today) { // 今日 echo "<td class = 'today'>$day</td>\n"; // ここで休日を表示させるのですが方法がわかりません。 } else if ($day == $holyday[0]) { // 休日 echo "<td class = 'holyday'>$day</td>\n"; } else { // 平日 echo "<td class='othr'>$day</td>\n"; } } // 最終日後の空欄の表示 $wend = 35 - ($days + $week_start); if ($wend < 0) { $wend += 7; } if ($wend == 7) { echo ''; } else if ($wend != 0) { for ($dot2 =0 ; $dot2 < $wend ;$dot2++) { echo "<td align='center' class='dot'></td>\n"; } } // カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n";

    • ベストアンサー
    • PHP
  • safariで特定条件下でデーブル幅が効かなくなります

    safariでcolspanでセルを結合し、その中に大きい要素(下の例ですとwidth500pxの画像や、文字数60のテキスト領域)を入れると、他の行の幅が変わってしまいます。 スタイルシートでtd幅を指定してやったりしてみたのですが、どうしても幅が変わってしまいます。 何か解決方法等ございましたら、ご教授願います。 <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" align="center" bgcolor="#99FFFF">20%</td> <td width="80%" align="center">80%</td> </tr> <tr> <td colspan="2" align="center" bgcolor="#FFCCCC"><img src="http://cmm001.goo.ne.jp/img/sn/sn_50.gif" width="500" height="24"></td> </tr> </table> <br> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" align="center" bgcolor="#99FFFF">20%</td> <td width="80%" align="center">80%</td> </tr> <tr> <td colspan="2" align="center" bgcolor="#FFCCCC"><form name="form1" method="post" action=""> <textarea name="textarea" cols="60"></textarea> </form> </td> </tr> </table> <br> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="20%" align="center" bgcolor="#99FFFF">20%</td> <td width="80%" align="center">80%</td> </tr> <tr> <td colspan="2" align="center" bgcolor="#FFCCCC">&nbsp;</td> </tr> </table>

    • ベストアンサー
    • HTML
  • Mac IEのバグなのでしょうか?

    TMEspionです。 <table border="0" cellpadding="5" cellspacing="5"><tr><td width="100" align="left" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="center" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="right" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td></tr><tr><td align="left" bgcolor="#999999">左</td><td align="center" bgcolor="#999999">中</td><td align="right" bgcolor="#999999">右</td></tr></table> --------------------------------- 上記のソースの様に、テーブルを縦2段、横2列にセルを作り、上段はテーブルタグ、下段はテキストでそれぞれalign属性をleft、center,rightと設定しています。 ところがInternet Explorer 5.2 for Macで見ると、 上段右のテーブルタグは「align="right"」の効果が出ていません。 この質問を呼んでいる回答者様には、ブラウザでどう表示されるんでしょうか? どう表示されたかという結果とブラウザ名を教えて下さい。

    • ベストアンサー
    • HTML
  • 1ページにテーブルを複数設定・一括変更の方法について

    一つのページに複数(十数個)を設置する場合 まとめて設置する方法はあるのでしょうか? また、サイズ等を変更したい場合も 一括して変更する方法はあるのでしょうか? 例えば、以下の物を数十個設置する場合 設置自体は簡単なのですが、変更が・・、 どうにか簡単にできる方法があればご教授下さい。 <center> <table border="0" width="600" cellspacing="1" bgcolor="#0fb1ff" height="200"> <tbody> <tr> <td colspan="2" width="600" bgcolor="#ffffff" height="20" align="center"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="100" align="center"></td> <td width="400" bgcolor="#ffffff" height="100"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> <tr> <td width="200" height="20" bgcolor="#ffffff" align="center"></td> <td width="400" height="20" bgcolor="#ffffff"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> </tbody> </table> </center> 宜しくお願いします。

    • ベストアンサー
    • HTML
  • colspanを使うと正しく表示できない?!

    あるwebシステムで 現在の予約数を表示するようなhtmlを作成しています。 tableを使って、td内に予約できる数をcolspanで指定して、 現在の予約状況がひとめでわかるように表示しているのですが なぜか、正しく表示できなくなってしまいました。 ブラウザもie6からie8にはなったのですが。 いろいろ検索してみると、似たような質問はたくさんされていましたし、 それぞれにwidth指定もすればよい・・・のように記載されていて解決されているようでした。 でも、同じように試してみましたがダメでした。(表示結果は同じ) サンプルとしまして、(全体で92がMAXの予約数として です) <table width="319" border="1" cellpadding="0" cellspacing="0"> <tr> <td width="100" height="25" colspan="2" align="center">日時</td> <td width="100" colspan="50" align=right>50</td> <td width="84" colspan="42" align=right>92</td> <td width="35" height="25" align="center" bgcolor="#ffd37d">空き</td> </tr> <tr> <td rowspan="12" width="55" align=center valign=top>11月26日</td> <td width="45" align=center>0時</td> <td width="110" colspan="55" bgcolor="#ff4500" align="center">55</td> <td width="74" colspan="37" bgcolor=white><br></td> <td width="35" align=center><font color=navy>37</font></td> </tr> <tr> <td width="45" align=center>1時</td> <td colspan="55" bgcolor="#ff4500"align="center">55</td> <td colspan="37" bgcolor=white><br></td> <td width="35" align=center><font color=navy>37</font></td> </tr> <tr> <td width="45" align=center>2時</td> <td colspan="55" bgcolor="#ff4500" align="center">55</td> <td colspan="37" bgcolor=white><br></td> <td width="35" align=center><font color=navy>37</font></td> </tr> <tr> <td width="45" align=center>3時</td> <td colspan="70" bgcolor="#ff4500" align="center">70</td> <td colspan="22" bgcolor=white><br></td> <td width="35" align=center><font color=navy>22</font></td> </tr>  ・  ・  ・ のような場合、<tr>内の2つめの<td>のcolspan=70も55も同じ幅で表示されます。 違う・・・といえば、align=centerでそれぞれ数字を表示させていますが 55のテキストが少し左寄り、70がcenterに表示されてるように見えます。 また、赤背景色の幅も微妙に0.xミリくらいは colspan=70の方が広いです。 tableのwidthがborderの幅を考慮していないのですが これも問題でしょうか? みなさん、似たような問題がでても解決されているようなのですが 自分の場合、どうやってもなかなか解決できません。 tableの幅を広めに取ったり、style指定したり、widthを入れたり・・・ 因みに依然(今年の春頃まで?)は、width無しのcolspan指定だけで、 思い通りに表示できていました。 その後、ブラウザのバージョンアップがありました。 最初(春頃)はstyleで table{ table-layout:fixed; } を指定したらなんとかうまく表示できました。 今回は春頃のバージョンのままで特に変更なく動かせるはずだったのですが。。。 そのままではダメなようです。 どのような方法があるのかアドバイスいただければと思います。 よろしくお願いします。

    • ベストアンサー
    • CSS

専門家に質問してみよう