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

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

解決済

4回答

2489閲覧

INSERT,UPDATE,DELETEの使用方法を教えてください

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グッド

1クリップ

投稿2015/07/23 03:55

現在、タスク管理カレンダーを作成しています。
仕組みとして、
PHPでカレンダーを作成→タスク情報をDBに送る→カレンダーに反映
という仕組みのカレンダーの作成がしたいのですが、どうもうまく扱うことができません。というのは、最初に幾つかのファイルを用意して作成したのですが、全てを統一したてクラス化した時にINSERT(追加)、 UPDATE(更新)、DELETE(削除)をどう記述すればよいかわからずに手が止まってしまいました。
アドバイス等いだければ嬉しいです。
よろしくお願いします。

DB テーブル名 : tasks
id,タイトル、日付、場所、メモ
= id,title,task_date,place,memo

表示したい カラム
【固定】task_date
【編集可能】memo

index.php (トップページ) → 追加

PHP

1<form action="calender.php" method="POST"> 2<p>タイトル : <input type="text" name="title" size="20"></p> 3<p>日時 : <input type="date" name="task_date" min="2015-07-01"></p> 4<p>場所 : <input type="text" name="place" size="20"></p> 5<p>メモ : <textarea type="text" name="memo" rows="4" cols="40"></textarea></p> 6<input type="submit" value="追加する"> 7<input type="reset" value="リセット">

detai.php → UPDATE(更新)、DELETE(削除)

PHP

1<form action="" method="POST"> 2タスク内容:<br /> 3<textarea name="comment" cols="30" rows="5"> 4 <?php echo ?></textarea><br /> 5<input type="submit" value="イベントを更新する"> 6</form> 7<form action="delete.php"> 8 <input type="submit" value="イベントを削除する"> 9</form>

calender.php (処理 class) ※INSERTだけ

PHP

1public function regist(){ 2 $stmt = $this->mysqli->prepare("INSERT INTO tasks(task_date,memo,title) VALUES(?,?,?)"); 3 $query = "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)"; 4 $this->mysqli->query($query); 5 $stmt->bind_param('sss',$_POST['task_date'],$_POST['memo'],$_POST['title']); 6 // 実行 7 $stmt->execute();

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

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

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

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

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

guest

回答4

0

ベストアンサー

form側の処理ですが、まだどのタスクに対して、UPDATEやDELETEを行うか判別のためにidをhiddenフォームで渡すのがいいと思います。

lang

1<form action="" method="POST"> 2タスク内容:<br /> 3<textarea name="comment" cols="30" rows="5"> 4 <?php echo [イベント内容] ?></textarea><br /> 5<input type="hidden" value="<?php echo [イベントのid] ?>" > 6<input type="submit" value="イベントを更新する"> 7</form> 8<form action="delete.php"> 9 <input type="hidden" value="<?php echo [イベントのid] ?>" > 10 <input type="submit" value="イベントを削除する"> 11</form>

class側では、POSTされたデータをチェック・整形して、プロパティに値を入れるメソッド、
プロパティの値を使ってUPDATEをするメソッド、
プロパティの値を使ってDELETEをするメソッド

を作るといいかと思います。

投稿2015/07/23 10:09

tempakyousuke

総合スコア155

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

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

yutaishikawa_

2015/07/24 08:46 編集

コメントありがとうございます。 なるほど、hiddenで送る方がいいのですね...! ちなみに、[]してあるイベント内容というのは主に具体的にどういった記述になるのでしょうか?
tempakyousuke

2015/07/24 09:40

hiddenでなく、post先のurlパラメータにidをつけるのでもいいと思います。 [] は単に更新するタスクの内容やidが入った変数にhtmlspecialcharかけてるだけの記述になると思いますが。
guest

0

更新や削除の際、UIとして見せるダミーフォームと、
UIとして見せない更新(or削除)データ送信用hiddenフォームにわけて、
javascriptでhiddenフォームに必要な項目を渡して送信する形ではいかがでしょうか。

投稿2015/07/23 04:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yutaishikawa_

2015/07/24 01:25

コメントありがとうございます。 記載し忘れていましたが、jsを使わずにPHPのみの記述で完成させなければなりません。。
guest

0

ドットインストールのPHP入門(応用編) (全12回) が参考になると思います。

投稿2015/07/23 04:04

mitsugeek

総合スコア19

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

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

yutaishikawa_

2015/07/24 01:24

コメントありがとうございます。 ドットインストールの動画ですが、初めて拝見させていただきました。 基礎の部分で、今までわかった気になっていた部分もクリアになりました。 ただ、少し早口で大雑把な説明だったので、クラスの説明に関しては理解できない部分もあったため、何度か重ねてみようかと思います。
guest

0

手が止まったということで、クラスに分けていくやり方が
分からないのかと思ってその説明をします。
流れの中で、INSERTについても触れます。

やり方はいろいろあると思いますが、
0.クラスの分割
0.メソッドの分割
0.実装

という流れで進めてはいかがでしょうか?

今回の場合であれば、以下の様になると思います。

1.クラスの分割
これはWebアプリで特に用いられる考え方ですが、
MVCパターンというものがあります。
大雑把に言うと、アプリケーションを

    モデル(M)
データとその操作を行う
ビュー(V)
画面表示を行う
コントローラ(C)
モデルとビューをつなぐ

  の三つに分ける考え方です。
(厳密には色々ありますが、このくらいの考えでも役には立ちます。)

  アプリケーションが行っているそれぞれのことが、
この三つのどれに当てはまるかで分け、
その後、必要があればその中でさらに分割します。

  今回のケースであれば、

  ・モデル
タスクをDBに作成、更新、削除するクラス(TaskDao)
タスクを表すクラス(Task)
・ビュー
タスクの一覧からカレンダーとして整形してHTMLを生成するクラス(CalendarRenderer)
・コントローラ
画面から受け取ったPOST、GETなどのデータを、モデルが受け取れる形にしてモデルに渡し、
結果をビューに渡すクラス(これはクラスにしないで直書きで良いかも
※それぞれの説明の後の括弧内に書いたのはクラス名です。

  というように分けられそうです。
勿論、これが正解というものは無いので、違う分け方もありえます。
クラス図を書いてみるのも良いでしょう。

2.メソッドの分割
1.で分けたクラスに対して、どの様なメソッドがあれば良いか考えます。
メソッド名と引数、戻り値、処理内容を簡単にまとめると良いと思います。

  今回はクラス化前のソースコードがあるので、
それを参考に分けます。
元々一つのメソッドが、複数のクラスに分かれる事もあるかと思います。

INSERTであれば、registをTaskDaoクラスにメソッドにし、
引数をTaskクラスにする事になると思います。
(蛇足ですが、registという英単語はないので、registerの方が良いかと思います。)

  メソッドが大体固まったら、
一つの処理の中で、どのメソッドをどの様な順で、
どんな引数で呼ぶかを考えます。
シーケンス図を書くのも良いと思います。

3.実装
ここまでで決めたことに従って、実装します。
今回の場合はクラス化前のソースコードがあるので、
その切り貼り+αになると思います。

それぞれのステップは、あまり完璧さを求めず、
ざっくり決めて、先のステップに進んで問題があった場合に、
戻って決め直せば良いと思います。

端折った部分もあるので、
分かりにくい部分があれば、指摘お願いします。

投稿2015/07/23 08:01

編集2015/07/24 12:43
eripong

総合スコア1546

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

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

yutaishikawa_

2015/07/24 01:34

コメントありがとうございます。 具体的な作業の流れ、考え方等非常に参考になりました。 実務に入った際、ぜひ利用させていただきます。 作業内容まとめ ・クラスの分割を考えたあと、メソッドを分割。 この時点で、頭の中だけではなく実際にシーケンス図を作成してみて、引数、戻り値、処理内容をまとめる。 →実装 実装内容は具体的な動作とも関わってくるので、またこういったサービスに頼りながらもやっていければ思います。
yutaishikawa_

2015/07/24 08:35

ちなみにですが、TaskとTaskDaoというのはクラスの名前で class Task{} というクラスと、TaskDao{}というクラスを二つ作成して、その中にメソッド(register)などを作成するというような解釈でよろしいでしょうか?
eripong

2015/07/24 12:43

その通りです。 分かりにくいので回答に追記しておきました。
yutaishikawa_

2015/07/26 13:59

追記ありがとうございます。 実際にコードを起こしてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問