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

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

ただいまの
回答率

90.03%

php データformタグでデータを移動

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 287

banianizm

score 87

イメージ図
お世話になります。
今カレンダーアプリ作成しています。
日付のボタンをクリックすることでリンクしているページ(./day.php)にformメソッドでクリックした日の日付のデータを送信したいと考えています。

今までに行なったこと

echo "<a href = \"./day.php\"><button type='button' class='btn btn-primary btn-lg btn-block'>$d<br /></button></a>";   


このbuttonタグをformタグでくくったりしたのですが、それでは画面遷移しませんでした。

全てのコードになります。

<?php
//データベース接続情報
$dsn='mysql:dbname=green;host=localhost;charset=utf8';
$user='root';
$password='root';

//データベース接続開始
$dbh = new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);


//データベース選択
$sql='SELECT * FROM schedule LEFT OUTER JOIN customer ON schedule.customer_id = customer.customer_id ORDER BY ID ASC';
$stmt=$dbh->prepare($sql);
$stmt -> bindParam(':id', $id, PDO::PARAM_STR);
$stmt->execute();
//fetchAllで全てのデータを配列化
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
/*
print"<pre>";
print_r($data);
print "</pre>";
*/


 $today = date('Y-m-d');

//print_r($id);


?>
<!doctype html>
<html lang="ja">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="../css/bootstrap.min.css" >
    <link rel="stylesheet" href="../css/all.css">
    <link rel="stylesheet" href="style.css" >

    <title>イグラングリーン 月間</title>
  </head>
<body>



  <table border="1">
<?php

// 上のコードは、次のコードと同じ意味です。
$y = isset($_REQUEST['y']) ? $_REQUEST['y'] : date("Y");
$m = isset($_REQUEST['m']) ? $_REQUEST['m'] : date("m");





//受けとったrequestが現在の年、月、日と同じならば変数を代入する

//print_r($today);
//print_r($request);
  // 1日の曜日を取得。mktimeは時・分・秒・月・日・年の順に表記
  $wd1 = date("w", mktime(0, 0, 0, $m, 1, $y));

  // 年とりあえず同じ年
  $prevY = $nextY = $y;

  // 一ヶ月前。1より小さければ12にして1年下げる。
  $prevM = $m - 1;
  if($prevM < 1) {
    $prevM = 12;
    $prevY--;
  }
  // 一ヶ月後。12より大きければ1にして1年上げる。
  $nextM = $m + 1;
  if($nextM > 12) {
    $nextM = 1;
    $nextY++;
  }


 if($m < 12){
 $next =  $m + 1;
 }
 else{
 $next = 1;
 }


//EOMはechoを非表示にする  
  print <<< EOM


    <h1>{$y}年{$m}月<span class="arrow"><i class="fas fa-angle-left"></i><a href="?y={$prevY}&m={$prevM}" />&laquo;</a><i class="fas fa-angle-right"></i></span><a href="?y={$nextY}&m={$nextM}" />&raquo;</a></h1>
    <table class="table table-bordered">
EOM;
?>
<thead>
    <tr>
      <th scope="col"></th>
      <th scope="col"></th>
      <th scope="col"></th>
      <th scope="col"></th>
      <th scope="col"></th>
      <th scope="col"></th>
      <th scope="col"></th>
    </tr>
  </thead>
<?php

// その数だけ空白を表示
for ($i = 1; $i <= $wd1; $i++) {
echo "<td> </td>";
}


//日付に1を代入
$d = 1;

while (checkdate($m, $d, $y)) {



        echo "<td>";


        //日付表示    
        echo "<a href = \"./day.php\"><button type='button' class='btn btn-primary btn-lg btn-block'>$d<br /></button></a>";   
    foreach ($data as $value) { //入力回数分繰り返し
        //echo $value['request']; // 多次元配列の扱い →(略)
        $datetime = $value['request'];
        $datetime1 = explode(' ', $datetime);
        $date = explode('-', $datetime1[0]);
        $year = $date[0];
        $month = $date[1];
        $day = $date[2];


        if ( $d == $day && $m == $month && $y == $year ) {
        // カレンダー日付と入力値が一緒ならボタンを表示
        echo "<a href = \"http://yahoo.co.jp\"><button>{$value['name']}</button></a><br />";


            }
}

echo "</td>";            


    // 今日が土曜日の場合は…
    if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) {
        // 週を終了
        echo "</tr>";


        // 次の週がある場合は新たな行を準備
    if (checkdate($m, $d + 1, $y)) {
        echo "<tr>";
        }
}


//インクリメント
$d++;
}



// 最後の週の土曜日まで移動
$wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y));
for ($i = 1; $i < 7 - $wdx; $i++) {
    echo "<td> </td>";
}

?>
    </tr>
  </table>
</body>
</html>

同じような考えでなくても何とか次ページで、formでデータを受け取りたいのですが、どのような方法があるのでしょうか?

よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+2

ここを

//日付表示    
        echo "<a href = \"./day.php\"><button type='button' class='btn btn-primary btn-lg btn-block'>$d<br /></button></a>";

下記のようにして

//日付表示
        echo "<a href = \"./day.php?year=$y&month=$m&day=$d\"><button type='button' class='btn btn-primary btn-lg btn-block'>$d<br /></button></a>";

day.phpでGETで受け取れるようになります。
↓ day.php

<?php
$array = $_GET;

echo "<pre>\n";
print_r($array);
echo "</pre>\n";
?>

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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