$_GET?パラメータ?SELECT?
解決済
回答 1
投稿
- 評価
- クリップ 1
- VIEW 946
そこには、id[pri],日付[timestamp],タイトル[varchar]の3つのカラムをtasksという一つのテーブルに作成してあります。
index.phpにて、カレンダーの形作りを行いました。
<?php
require_once('dbconnect.php');
// 変数の判別、パラメータを出力。
// 三項演算子 条件式 ? 式1: 式2;
$ym = isset($_GET['ymd']) ? $_GET['ymd'] : date("Y-m-d");
// 現在の日時取得
$timeStamp = strtotime($ym ,"-01");
// 比較演算子、(Y-m)を取得できないFALSEだった場合、TIME関数time()
if ($timeStamp === false) {
$timeStamp = time();
}
// 翌月、前月を取得
$next = date("Y-m",mktime(0,0,0,date("m",$timeStamp)-1,1,date("Y",$timeStamp)));
$prev = date("Y-m",mktime(0,0,0,date("m",$timeStamp)+1,1,date("Y",$timeStamp)));
// 最終日の取得(月末を取得)
$lastday = date("t",$timeStamp);
// 1日の曜日番号の数だけ空白を出力(7月だと3つ)
$youbi = date("w",mktime(0,0,0,date("m",$timeStamp),1,date("Y",$timeStamp)));
// $weekを初期化
$week = "";
// 結合代入演算子を使用して、<td>を取得。一週間(0~6の<td>)が完成。
$week .= str_repeat('<td></td>', $youbi);
// SQLで今月を取得する処理。先月の最終日と翌月の初日を不等号で期間を指定し、ANDで結ぶ。
$lastMonth = date("Y-m-d",strtotime("last day of - 1 month",$timeStamp));
$nextMonth = date("Y-m-d",strtotime("first day of + 1 month",$timeStamp));
// PHP->MySQLtable
$query = $mysqli->query("SELECT * FROM tasks WHERE task_date >'$lastMonth' AND task_date <'$nextMonth'");
// パラメータを送信する
$parmeta = date("Y-m-d",$mysqli->query("SELECT * FROM tasks WHERE task_date",$timestamp));
// 配列を準備
$userData = array();
// 連想配列で$rowを取得する
while($row = $query->fetch_assoc()) {
$userData[date('j',strtotime($row['task_date']))] = array(
'id' => $row['id'],
'title' => $row['title'],
'task_date' => $row['task_date'],
'place' => $row['place'],
'memo' => $row['memo']
);
}
// 上記の定義で1日から31日までfor文で取得
for ($day = 1; $day <= $lastday; $day++ ,$youbi++) {
// もし$userData[日付]の変数が 空の場合
if (isset($userData[$day])) {
// リンクをはる
$week .= '<td><a href="taskListDay.php">'.$day.'</a></td>';
}else{
// リンクをはらない
$week .= '<td class="youbi_'.($youbi % 7).'">'.$day.'</td>';
}
// $youbiを7で割ったあまりが6。(土曜日)
if ($youbi % 7 == 6 OR $day == $lastday) {
// もし 1 = $lastdayだったとき、<tb>に$youbiを7で割ったものを6で引く
if($day == $lastday) {
$week .= str_repeat('<td></td>', 6 - ($youbi % 7));
}
// 結果、<tr>は$week
$weeks[]='<tr>' .$week .'</tr>';
// $weekを初期化する
$week = '';
}
// week""を初期化し続ける処理によってカレンダー型を形成。
}
?>
<!DOCTYPE html>
<html>
<title>カレンダー</title>
<h1><?php echo date("Y",$timeStamp).'年'; ?></h1>
<h2><?php echo date("m",$timeStamp).'月のカレンダー'; ?></h2>
<meta charset="utf-8">
<table border="1">
<tr>
<th><a href="?ym=<?php echo $next;?>">«</a></th>
<th><a href="?ym=<?php echo $prev;?>">»</a></th>
</tr>
<thead>
<tr>
<th>日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th>土</th>
</tr>
</thead>
<tbody>
<?php
foreach ($weeks as $week) {
echo $week;
}
?>
</tbody>
</table>
<form action="edit_do.php" method="POST">
<p>
タイトル : <input type="text" name="title" size="20">
</p>
<p>
日時 : <input type="date" name="task_date" min="2015-07-01">
</p>
<p>
場所 : <input type="text" name="place" size="20">
</p>
<p>
メモ : <textarea type="text" name="memo" rows="4" cols="40"></textarea>
</p>
<input type="submit" value="追加する"><input type="reset" value="リセット">
</form>
</html>
index.phpには、INSERTするために別途ファイル(edit_do.php)を作成しました。
<?php
require_once('dbconnect.php');
// 実行するためのステートメントを準備する。ユーザが作成する箇所は?にしておく「。
$stmt = $mysqli->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,?,?,?)");
// 直前のクエリで使用した自動生成のIDを返す処理
$query = "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)";
$mysqli->query($query);
// $_POST['name']に名前が、$_POST['message']に本文が格納されているとする
// ? の位置に値を振り当てる。対応する変数の型はstring。
$stmt->bind_param('sssss',$_POST['id'],$_POST['title'],$_POST['task_date'],$_POST['place'],$_POST['memo']);
// 実行
$stmt->execute();
?>
<title>Add to Calender | 予定を追加しました。</title>
<p>予定を追加しました。</p>
<p><a href="index.php">カレンダーへ戻る</a></p>
<p><a href="taskListDay.php">タスクの確認</a></p>
さらにこちらがリンク先のカレンダーのタスク情報となります。
<?php
require_once('dbconnect.php');
// 年月日のパラメータを取得する。
$ymd = isset($_GET['ymd']) ? $_GET['ymd'] : date("Y-m-d");
// タスクの配列を準備
$task = "";
$taskData = array();
// $pass = file_get_contents('edition.php');
// PHP->MySQLtable
// タスクのパラメータを送れるようにする。
$query = $mysqli->query(" SELECT * FROM tasks");
// エラー処理
if (!$query) {
die('クエリーが失敗しました。'.mysql_error());
}
while ($row = $query->fetch_assoc() {
// 各メンバ取得
$id = $row['id'];
$title = $row['title'];
$task_date = $row['task_date'];
$place = $row['place'];
$memo = $row['memo'];
$task .= "<tr><td><a href=?=ymd echo ${query}>${title}</a></td><td>${task_date}</td><td>${place}</td><td>${memo}</td></tr>";
}
?>
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>Today | タスク一覧</title>
<h1>タスク一覧</h1>
<table border="1">
<thead>
<tr>
<th>タイトル</th>
<th>日時</th>
<th>場所</th>
<th>メモ</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $task?></td>
</tr>
</tbody>
</table>
<form action="delete.php">
<input type="submit" value="イベントを削除する">
</form>
<form action="index.php">
<input type="submit" value="トップページへ戻る">
</form>
</html>
この二つのファイルを加味して、index.phpのパラメータの引き継ぎ先をtaskListDataにしようと考えてます。
例えば、1日にタスクを入れると、入力完了後にindex.phpから1日にリンク(taskListData.php)ができるようになり、taskListData.phpの情報が閲覧ようになるのですが、
1日のみのタスクを確認したい場合はどういう記述にすればいいでしょうか。
アドバイス、回答お願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
指定した1日の情報のみ取得したいという事で間違いございませんか?
それであれば、下記はいかがでしょうか。
ご自身のソースコードとdiffをとって確認してください。
<?php
require_once('dbconnect.php');
// 年月日のパラメータを取得する。
$ymd = isset($_GET['ymd']) ? $_GET['ymd'] : null;
// タスクの配列を準備
$task = "";
$taskData = array();
// $pass = file_get_contents('edition.php');
// PHP->MySQLtable
// タスクのパラメータを送れるようにする。
$sql = "SELECT * FROM tasks";
if ($ymd) {
$ymd = mysql_real_escape_string($ymd);
$sql.= " WHERE FROM_UNIXTIME(task_date, '%Y-%m-%d') = '$ymd' ";
}
$query = $mysqli->query($sql);
// エラー処理
if (!$query) {
die('クエリーが失敗しました。'.mysql_error());
}
while ($row = $query->fetch_assoc() {
// 各メンバ取得
$id = $row['id'];
$title = $row['title'];
$task_date = $row['task_date'];
$place = $row['place'];
$memo = $row['memo'];
$task .= "<tr><td><a href=?=ymd echo ${query}>${title}</a></td><td>${task_date}</td><td>${place}</td><td>${memo}</td></tr>";
}
?>
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>Today | タスク一覧</title>
<h1>タスク一覧</h1>
<table border="1">
<thead>
<tr>
<th>タイトル</th>
<th>日時</th>
<th>場所</th>
<th>メモ</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $task?></td>
</tr>
</tbody>
</table>
<form action="delete.php">
<input type="submit" value="イベントを削除する">
</form>
<form action="index.php">
<input type="submit" value="トップページへ戻る">
</form>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/07/22 09:52
無事、本案件は解決いたしました。
ご協力ありがとうございました。