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

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

ただいまの
回答率

90.61%

  • PHP

    19849questions

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

  • MySQL

    5694questions

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

  • mysqli

    157questions

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

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

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 900

yutaishikawa_

score 46

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


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

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


index.php (トップページ) → 追加
<form action="calender.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="リセット">
detai.php → UPDATE(更新)、DELETE(削除)
<form action="" method="POST">
タスク内容:<br />
<textarea name="comment" cols="30" rows="5">
 <?php echo  ?></textarea><br />
<input type="submit" value="イベントを更新する">
</form>
<form action="delete.php">
    <input type="submit" value="イベントを削除する">
</form>

calender.php (処理 class) ※INSERTだけ
public function regist(){
        $stmt = $this->mysqli->prepare("INSERT INTO tasks(task_date,memo,title) VALUES(?,?,?)");
        $query =  "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)";
        $this->mysqli->query($query);
        $stmt->bind_param('sss',$_POST['task_date'],$_POST['memo'],$_POST['title']);
        // 実行
        $stmt->execute();
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

+2

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

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


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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/07/24 15:27 編集

    コメントありがとうございます。

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

    キャンセル

  • 2015/07/24 18:40

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

    キャンセル

+2

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/07/24 10:25

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

    キャンセル

+1

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



投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/07/24 10:24

    コメントありがとうございます。
    ドットインストールの動画ですが、初めて拝見させていただきました。
    基礎の部分で、今までわかった気になっていた部分もクリアになりました。

    ただ、少し早口で大雑把な説明だったので、クラスの説明に関しては理解できない部分もあったため、何度か重ねてみようかと思います。

    キャンセル

+1

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

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

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

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

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

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

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

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

  今回のケースであれば、

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

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

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

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/07/24 10:34

    コメントありがとうございます。
    具体的な作業の流れ、考え方等非常に参考になりました。

    実務に入った際、ぜひ利用させていただきます。
    作業内容まとめ
    ・クラスの分割を考えたあと、メソッドを分割。
    この時点で、頭の中だけではなく実際にシーケンス図を作成してみて、引数、戻り値、処理内容をまとめる。
    →実装

    実装内容は具体的な動作とも関わってくるので、またこういったサービスに頼りながらもやっていければ思います。

    キャンセル

  • 2015/07/24 17:35

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

    キャンセル

  • 2015/07/24 21:43

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

    キャンセル

  • 2015/07/26 22:59

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

    キャンセル

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

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

関連した質問

  • 受付中

    PHPのセッションを利用したフォームについて

    PHPの入力フォームからセッションを利用してエラーチェックがない場合 次の確認画面にページ遷移させたいと思っています。 POSTでやった場合は、エラーチェック後確認画面へページ推

  • 解決済

    【PHP】参考書の例文で何故かエラーがでます。

    ファイルのアップロードをしたいのですがどうもうまく行きません… <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl

  • 受付中

    データベースの一覧画面と詳細画面について[PHP]

    現在データベースを利用したお問い合わせフォームを作成中なのですが、分からない点が2つあり質問させて頂きました。 ■流れ ・お問い合わせフォームから入力されたデータをDBへ格納 ・

  • 解決済

    $_GET?パラメータ?SELECT?

    タスクカレンダーを作る際に、INSERT文を書いてPHPからMySQLにデータをインサートします。 そこには、id[pri],日付[timestamp],タイトル[varchar]

  • 解決済

    PHPのエラー原因について

    151行目の、class task の$this->mysqliの$this でパースエラーで弾かれてしまいます。 なにがいけないのでしょう。 calenderクラスを継承した

  • 解決済

    画面遷移なしで編集したいのですが、書き方が全くわかりません。。

    「編集」と「削除」を画面遷移なしで実行したいのですが、ajaxが分からず困っています。どうすれば、意図した結果が得られるでしょうか?>< PHPとMySQLを使っています。 PH

  • 解決済

    PHP:簡易掲示板の編集機能

    PHPで簡易掲示板を作っております。 下記コードで編集機能を実装しようとしています。 「各投稿番号とPOST送信されてきた編集番号を比較し、等しい場合、配列値を取得する」 ことはで

  • 解決済

    動作が確認できない

    ・「投稿」は投稿にチェックかつボタン押下で入力内容を新規に投稿  ・チェックボックスには各投稿のIDをvalueに設定し、ボタン押下で受け取れるようにして  ・「更新」は更新に

同じタグがついた質問を見る

  • PHP

    19849questions

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

  • MySQL

    5694questions

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

  • mysqli

    157questions

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