初めまして。
PHP初心者です。
今回、某企業より課題が出されため、PHP+MySQLを用いて、タスク機能付きのカレンダー(縛りあり)を作成しています。
縛りは、
・クラス化しない。
というものがあります。
しかし、現段階の知識では中々うまくいきません。
PHPからMySQLにINSERTすることは可能(他ファイル"edit_do.php"を使用)なのですが、SELECT文の記述の仕方にイマイぴんときていません。
内容的なもので言えば、$userDataの添字を日付にして、データベースの日付を設定しているカラムの'task_date'を取得したいと考えています。
どういったif文を記述すればいいのか。あと少しのところまできていると思うのですが、アドバイスをいただければ嬉しいです。
それと、自分なりに勉強しているのですが、他にコメントアウトしている部分で、認識間違いしている部分があればご指摘お願い致します。
何卒宜しくお願いします。
現段階の表示は画像1のような表示となっております。(日にちにリンクができていない。)
![イメージ説明]WIDTH:486
ちなみに、理想は画像2の様に、INSERTしてタスクを追加した日付が表示できるようになること。(データベースからタスクを取得してリンクできている)
![イメージ説明]WIDTH:598
<?php
require_once('dbconnect.php');
// 変数の判別、パラメータを出力。
// 三項演算子 条件式 ? 式1: 式2;
$ym = isset($_GET['ym']) ? $_GET['ym'] : date("Y-m");
// 現在の日時取得
$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);
// PHP->MySQLtable
$query = $mysqli->query("SELECT * FROM tasks");
// 配列を準備
$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++) {
if($userData[date('j',strtotime($row['task_date']))]) {
/////ここに何を記述すればいいか検討がつきません/////
}
// もし$userData[日付]の変数が空の場合
if (isset($userData)) {
// 結合代入演算子で$dayを代入する
$week .= '<td class="youbi_'.($youbi % 7).'">'.$day.'</td>';
}else{
$week .= '<td><a href="detail.php">'.$day.'</a></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>
```
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/09 04:59