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

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

2回答

2587閲覧

PHPのデータを変更・削除する方法について(mysql)

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/30 08:14

今回はPHPでMySQLのカラムやレコードを『追加・編集・削除』させたいと思います。
以前、https://teratail.com/questions/13285 でも同じような質問をさせていただいたのですが、自分なりに解釈するのが難しく、どういった記述をしていくのか考え方が分からなくなった為、質問させていただきます。

まず、HTMLのテーブルタグで「日付」タブと「タスク内容」タブを作成しています。

イメージ説明

HTML

1<p>タイトルをクリックすると編集できます。</p> 2<table border="1"> 3 <tr> 4 <td>日付</td> 5 <td> 6 <?php 7 if(isset($_GET['task_date'])){ 8 echo $cal->h($_GET['task_date']); 9 } 10 ?> 11 </td> 12 <tr> 13 <td>タスク内容</td> 14 <td> 15 <?php 16 if(isset($_GET['memo'])){ 17 echo $cal->h($_GET['memo']); 18 } 19 ?> 20 </td> 21 </tr> 22</table>

task_dateとmemoは各カラムになります。
やりたいこと
→ここにDBの内容を表示して、編集・削除ができるようになる。

やりかた
1.task というクラスでメソッドを作成する。
2 .task_doというクラスで引数を作成する。

実際に、やろうと書いてみるものの、上の画像のように、まずDBのデータ自体が表示されていない現状です。
HTML内にechoしていることも含め、アドバイスお願いします。

PHP

1class task extends Calender { 2 // メソッドを作成 3 protected $stmt; 4 protected $create = ""; 5 protected $enter; 6 7 public function __construct() { 8 parent::__construct(); 9 $this->stmt = $this->mysqli; 10 $this->enter = $stmt->extends; 11 } 12 public function setSQL() { 13 return $this->stmt; 14 } 15 public function create() { 16 return $this->create; 17 } 18 public function Enter() { 19 return $this->enter; 20 } 21} 22class task_do extends task { 23 // 引数を作成 24 protected $insert; 25 protected $update; 26 protected $delete; 27 28 public function __construct() { 29 parent::__construct(); 30 $this->insert = $this->stmt->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,sysdate(),?,?)"); 31 $this->update = $this->stmt->prepare("DELETE FROM tasks where task_date = ?"); 32 $this->delete = $this->stmt->prepare("UPDATE tasks set title = ? where id = '$id';"); 33 } 34 public function inSert() { 35 $this->create = "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)"; 36 $this->stmt->query($this->create); 37 $this->enter; 38 } 39 public function upDate() { 40 $this->upDate; 41 $this->enter; 42 } 43 public function deLete() { 44 $this->deLete; 45 $this->enter; 46 } 47} 48 49 50?>

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

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

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

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

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

guest

回答2

0

DB構造はどういったものを想定されておりますでしょうか。
それによって値の取り出し方などがらりと変わるかと思います。
開示いただける範囲で結構ですので、DBのテーブル構成をいただければ多少なりとも前進するかもしれません。

投稿2015/07/30 14:14

yu-ri

総合スコア634

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

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

0

以前の質問にも回答した者です。

以前の回答時にも、具体的なPHPの書き方には触れなかったのですが、
基本的に、PHPはあまり詳しくありません。
Java/JSPの経験を元に書いているため、PHPの流儀からすると
おかしなところがあるかもしれませんが、
基本的な考え方は同じと思うので、参考になればと思って書きます。

ちょっと、処理の流れがソースから読み取れなかったのですが、
基本的なこととして、オブジェクト指向であっても、
何を、どの様な順で実行する必要があるかは、
オブジェクト指向でない場合と同じである、
ということは認識あっていますでしょうか?

コードの整理が必要と思います。

例えば、指定したタスクを表示する場合であれば、
以下の様になると思います。

1.HTTPのリクエストから、表示したいデータのキー情報を取得する。 2.DBから表示したいデータを取得する。 2-1. DBに接続する。 2-2. クエリを発行して結果を取得する。 2-3. DBから切断する。 3.画面に表示する。

(「HTTPのリクエストから、表示したいデータのキー情報を取得する。」は私が必要だろうと思って勝手に追加しました。認識違っていれば、コメントください。)

今のyutaishikawa_さんのコードの処理の流れは、
このようになっていない様に見えます。

処理の流れから進めていくと、以下のようになります。
(クラス名は、yutaishikawa_さんの決めたクラス名を
できるだけそのまま使いました。)

1.task_detail.php(ファイル名がわからないので私が勝手に決めました。)の先頭部分 2.task_detail.phpの先頭部分からtask_doクラスのメソッドを呼ぶ 2-1. task_doクラスのdbconnectメソッド 2-2. task_doクラスのqueryメソッド 2-3. task_doクラスのdbdisconnectメソッド 3.task_detail.phpの、HTMLのテーブルの該当部分

そのままコードに落とすと以下のようなイメージです。

リクエストに必要なキー情報がない場合などは、
考慮していません。必要に応じて追加して下さい。
また、HTMLとして必要なHTMLタグなども省略しているので、
あくまでイメージと思ってください。

lang

1<?php 2 require_once('calender.php'); 3 4 // 1.HTTPのリクエストから、表示したいデータのキー情報を取得する。 5 $task_id = $_GET['id'] 6 7 $tas = new task_do(); 8 9 // 2-1. DBに接続する。 10 $tas->dbconnect(); 11 12 // 2-2 クエリを発行して結果を取得する。 13 $result = $tas->query($task_id); 14 15 // 2-3. DBから切断する。 16 tas->dbdisconnect(); 17 18?> 19 20<p>タイトルをクリックすると編集できます。</p> 21<table border="1"> 22 <tr> 23 <td>日付</td> 24 <td> 25 <?php 26 // 3.画面に表示する 27 echo $cal->h($result->date); 28 ?> 29 </td> 30 <tr> 31 <td>タスク内容</td> 32 <td> 33 <?php 34 // 3.画面に表示する 35 echo $cal->h($result->content); 36 ?> 37 </td> 38 </tr> 39</table> 40

task_doの実装は含んでいないため、
イメージがわかなければ、その部分も追記します。

ここでは、以前回答に書いた、
MVCなどの考え方は入れず、
クラス、メソッドの分割を一度に行いましたが、
やっていることの流れは同じです。

この様に整理した上で、
まずはDBから値を取ってきて表示する部分だけ、
作ってみてはいかがでしょうか?

クラスの分け方についてなど、
他にも改善の余地はあると思いますが、
ひとまずここまでにします。

投稿2015/07/30 13:33

編集2015/07/30 13:47
eripong

総合スコア1546

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問