質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20856questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9290questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

PHPのセレクトボックスの初期値の設定について(PHPのバージョンは5.3です。)

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 753
退会済みユーザー

退会済みユーザー

<?php
$month_list = array(
"01", "02", "03", "04", "05", "06",
"07", "08", "09", "10", "11", "12"
);
//月数加算 +1
function addMonth($date, $add_month) {
// 年月日別に分離
$year = date('Y', strtotime($date));
$month = date('n', strtotime($date));
$day = "01";
// 年を跨ぐ場合
if ($month + $add_month > 12) {
$year++;
$month = $month + $add_month - 12;
} else {
$month = $month + $add_month;
}
// 算出結果の日付を返す
if (checkdate($month, $day, $year)) {
return date('Y-m-d', strtotime(sprintf('%04d-%02d-%02d', $year, $month, $day)));
} else {
// 2月31日などになった場合、月末の日付を返す
return date('Y-m-d', strtotime(sprintf('%04d-%02d-01 -1 day', $year, ($month+1))));
}
}

//月数カウント
function count_m($f,$t){
$date1=strtotime($f);
$date2=strtotime($t);
$month1=date("Y",$date1)*12+date("m",$date1);
$month2=date("Y",$date2)*12+date("m",$date2);
$diff = $month1 - $month2;
return $diff + 1;
}

//年月形状変更 2016-02→20162
function c_m($from2,$to2){
$from2 = $from2."-01";
$to2 = $to2."-01";

$m_list = array();
for($i=0; $i < count_m($from2,$to2); $i++){
$aa = addMonth($to2, $i);
$bb = explode("-",$aa);
$cc = $bb[0] * 100 + $bb[1];
$m_list[$i] = $cc;
}
return $m_list;
}

//月部分抜き取り 201602→2
function month_get($list){
$list3 = array();
foreach($list as $key=>$val){
$list3[$key] = substr($val, 4);
}
return $list3;
}

if(isset($_POST["submit"])){
$option = $_POST["option"];
$month1 = $_POST["month1"];//開始
$date1 = $_POST["date1"];
$month2 = $_POST["month2"];//終了
$date2 = $_POST["date2"];

if(($date1 == 10) or ($date1 == 11) or ($date1 == 12)){
}else{
$date1 = "0"."$date1";
}
if(($date2 == 10) or ($date2 == 11) or ($date2 == 12)){
}else{
$date2 = "0"."$date2";
}
$month1 = $month1."-".$date1;//"2016-02"
$month2 = $month2."-".$date2;//"2016-03"
$search_month = c_m($month2,$month1);
$month_name = month_get($search_month);
}
?>

<html>
<head>
<meta charset='utf-8'>
<title>集計画面test</title>
</head>
<body>
<form method ="post" action="testdb.php">
<table border="1">
<tr>
<td>集計期間</td>
<td>
<SELECT name="month1">
<?php for($y=2013;$y<="2050";$y++):?>
<OPTION value="<?php echo $y; ?>" <?php if(isset($month1) && $month1 == $y ){ echo "selected"; } ?>>
<?php echo $y; ?>
</OPTION>
<?php endfor; ?>
</SELECT>年
<SELECT name="date1">
<?php foreach($month_list as $key => $value): ?>
<OPTION value="<?php echo $key + 1; ?>" <?php if(isset($date1) && $date1 == $value ){ echo "selected"; } ?>>
<?php echo $value; ?>
</OPTION>;
<?php endforeach ?>
</SELECT>月
&nbsp;~&nbsp;
<SELECT name="month2">
<?php for($y=2013;$y<="2050";$y++):?>
<OPTION value="<?php echo $y; ?>" <?php if(isset($month2) && $month2 == $y ){ echo "selected"; } ?>>
<?php echo $y; ?>
<?php endfor; ?>
</SELECT>年
<SELECT name="date2">
<?php foreach($month_list as $key => $value): ?>
<OPTION value="<?php echo $key + 1; ?>" <?php if(isset($date2) && $date2 == $value ){ echo "selected"; } ?>>
<?php echo $value; ?>
</OPTION>;
<?php endforeach ?>
</SELECT>月
</td>
</tr>
<tr>
<td>条件</td>
<td>
<select name="option">
<option value="登録" <?php if(isset($option) && $option == "登録"){ echo "selected"; } ?> >登録</option>
<option value="稼動" <?php if(isset($option) && $option == "稼動"){ echo "selected"; } ?> >稼動</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="OK" name="submit">
</td>
</tr>
</table>
</form>
</body>
</html>

上記のコードで入力フォームを作成したのですが問題が発生しました。
集計期間のセレクトボックスの初期値を当年(2016年)で開始期間の月を当月-3(5月なら初期値は2月)、終了期間を当月+3(5月なら初期値は8月)にしたいのですがどうしてもうまくいきません。

すみませんが良い修正案がありましたらよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/05/20 00:02

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • kei344

    2016/05/20 03:15

    コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。また、「うまくできない」とは「何をしたときに」「どうなると思って」「どうなったのか」をお書きください。

    キャンセル

回答 2

+1

コードが長いうえにインデントも無いので全コード読んでいませんが、当月-3月と当月+3月を取得したいのですよね?
そのようなサンプルはネット上にたくさん落ちていますので探してみてください。

当月-3月の年月を取得する例は

<?php
    $year = 2016;
    $month = 5;
    echo date("Ym", mktime(0, 0, 0, $month - 3, 1, $year));
?>


こんな感じです。これで201502が表示されます。
ネットでdateやmktimeなり調べてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

年なのにmonth、月なのにdateと言うネーミングしてたりするので
まずはそこから修正しないと、、いけないかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20856questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9290questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。