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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

Q&A

解決済

1回答

1900閲覧

if文の基礎的な使用方法について

yutaishikawa_

総合スコア58

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

0グッド

0クリップ

投稿2015/07/08 09:19

初めまして。
PHP初心者です。
今回、某企業より課題が出されため、PHP+MySQLを用いて、タスク機能付きのカレンダー(縛りあり)を作成しています。
縛りは、
・クラス化しない。
というものがあります。

しかし、現段階の知識では中々うまくいきません。
PHPからMySQLにINSERTすることは可能(他ファイル"edit_do.php"を使用)なのですが、SELECT文の記述の仕方にイマイぴんときていません。

内容的なもので言えば、$userDataの添字を日付にして、データベースの日付を設定しているカラムの'task_date'を取得したいと考えています。
どういったif文を記述すればいいのか。あと少しのところまできていると思うのですが、アドバイスをいただければ嬉しいです。

それと、自分なりに勉強しているのですが、他にコメントアウトしている部分で、認識間違いしている部分があればご指摘お願い致します。

何卒宜しくお願いします。

現段階の表示は画像1のような表示となっております。(日にちにリンクができていない。)
![イメージ説明]WIDTH:486

ちなみに、理想は画像2の様に、INSERTしてタスクを追加した日付が表示できるようになること。(データベースからタスクを取得してリンクできている)
![イメージ説明]WIDTH:598

  • lang

    1
<?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;?>">&laquo;</a></th> <th><a href="?ym=<?php echo $prev;?>">&raquo;</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> ```

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

日付にリンクを貼るかどうかのif文のところは

if (isset($userData[$day]) ) {
リンクを貼る
} else {
リンクを貼らない
}

でいいかと思います。

SQLは今月のタスクだけ取ってくる必要があるので
WHERE task_date > '先月の最終日' AND task_date < '翌月の1日'
を付け足せばいいと思います。もちろん「先月の最終日」「翌月の1日」の部分の文字列を作る必要もありますが。また取得するカラムはすべてではなく必要最低限なものにした方がいいです。(その方が早いので)

あと同じ日付にタスクが2つ以上入ることがあるなら、
$userData[date('j',strtotime($row['task_date']))] = array(
の部分で同じ日付にタスクが2つ以上あるとき、$userDataには片方の日付のものしか入りません。
リンクを貼るかどうかの判定だけなら問題ありませんが、そうでなければ修正が必要です。

投稿2015/07/08 10:30

tempakyousuke

総合スコア155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutaishikawa_

2015/07/09 04:59

ご回答ありがとうございます。 的確なアドバイスをいただき、無事作成することができました。 タスクが2つ以上の際の処理も視野に入れつつ作業に臨みます。 この度は本当に有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問