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

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

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

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

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

1186閲覧

[FuelPHP]入力項目のDB登録

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2021/06/03 01:12

編集2021/06/04 08:00

FuelPHPを使用してひとこと掲示板を作っています。入力された名前、コメントをデーターベースに登録して一覧表示を更新する処理をしたいのですが、新規名前、コメントをdbのtcommentテーブルに新規登録することができません。どこを直せばよいでしょうか。

PHP

1//Controller 2<?php 3/** 4 * Board Controller. 5 */ 6use \Model\Tcomment; 7 8class Controller_Board extends Controller 9 10{ 11 public function action_post() 12 { 13 14 if (Input::method() == 'POST') 15      { 16 17 $onamae = Input::post('onamae'); 18 19 $comment = Input::post('comment'); 20 21 $comment_data = Tcomment::insert_datas($onamae, $comment); 22 23 $this->load->model('tcomment'); 24 25    } 26 } 27 28 29 public function action_index() 30 { 31 $view = View::forge('board/index'); 32 33 $comment_data = Tcomment::get_datas(); 34 35 $view->comment_data = $comment_data; 36 return $view; 37 } 38 39 40} 41 42?>

PHP

1//Views 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5<meta charset="UTF-8"> 6<title>入力フォーム表示画面</title> 7</head> 8<body> 9 10<form action="post" accept-charset="utf-8" method="post"> 11<div> 12<label for="form_onamae">お名前</label> 13<input name="onamae" value="" type="text" id="onamae"> 14</div> 15 16<div> 17<label for="form_comment">コメント</label> 18<input name="comment" value="" type="text" id="comment"> 19</div> 20 21<div> 22<input name="submit" value="登録" type="submit" id="form_submit"> 23<div> 24</form> 25 26<div> 27 <table> 28 <tr> 29 <th>ID</th> 30 <th>名前</th> 31 <th>コメント</th> 32 <th>登録日</th> 33 </tr> 34 <?php foreach($comment_data as $data):?> 35 <tr> 36 <td><?php echo $data['id'];?></td> 37 <td><?php echo $data['name'];?></td> 38 <td><?php echo $data['comment'];?></td> 39 <td><?php echo $data['registed'];?></td> 40 </tr> 41 <?php endforeach;?> 42 </table> 43 </div> 44</body>

php

1//Model 2<?php 3/** 4 * コメントテーブル(t_comment) 5 */ 6namespace Model; 7use DB; 8 9class Tcomment extends \Model 10{ 11 public static function insert_datas($onamae,$comment) 12 { 13 try{ 14 DB::start_transaction(); 15 16 $query = DB::insert('t_comment')->set(array( 17 'name'=>$onamae, 18 'comment'=>$comment, 19 ))->execute(); 20 21 DB::commit_transaction(); 22 23 }catch(Exception $e){ 24 25 DB::rollback_transaction(); 26 } 27 28 $query = DB::query('SELECT * FROM t_comment'); 29 30 return $query->execute(); 31 32 } 33 public static function get_datas() 34 { 35 $query = DB::query('SELECT * FROM t_comment'); 36 37 return $query->execute(); 38 } 39 40} 41?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

Model_Crudではなく単にModelの場合、
クエリビルダでinsert文の処理を書きます。

Query Builder Insert - クラス - FuelPHP ドキュメント

values メソッドの例が参考になるかと。

php

1// insert 文を準備します 2$query = DB::insert('users'); 3 4// カラム名をセット 5$query->columns(array( 6 'name', 7 'surname', 8 'email', 9)); 10 11// 値をセット 12 13$query->values(array( 14 'John', 15 'Doe', 16 'john@doe.com', 17)); 18 19// INSERT INTO `users` (`name`, `surname`, `email`) VALUES ("John", "Doe", "john@doe.com")

トランザクション処理を加えるのに、下記の記事が参考になるかな。

【FuelPHP】トランザクションの使用例 - MEMO REC

投稿2021/06/03 01:20

編集2021/06/04 06:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/06/03 01:34

すみませんこの文はどこに書けばいいんでしょうか
退会済みユーザー

退会済みユーザー

2021/06/03 01:37

自作Modelクラスの中で、データ登録用メソッドを起こして書きます。 コントローラからデータ登録用メソッドに登録用データを渡します。 フォーム入力データの検証をしてから、データ登録用メソッドを呼びます。 fieldsetを定義する箇所をコントローラ内で共通化して、フォーム表示だけでなく入力データの検証にも使い回すのですが、業務時間中は具体的なコードを書いてあげられる余裕はないのでごめんなさい。
退会済みユーザー

退会済みユーザー

2021/06/03 06:37 編集

修正してみたのですが、うまくいきません。
退会済みユーザー

退会済みユーザー

2021/06/03 10:02 編集

public static function insert_datas() 引数で渡さないと。 コントローラでは $comment_data = Tcomment::insert_datas($onamae, $comment); などとして、モデルでデータを受け取るようにします。
退会済みユーザー

退会済みユーザー

2021/06/04 00:53

引数で渡すとはどういうことですか
退会済みユーザー

退会済みユーザー

2021/06/04 01:19

今のままだと、モデルにデータが渡っていないので、 モデルのデータ保存処理メソッドへの引数として渡さないと、データが渡りませんよ、ということです。
退会済みユーザー

退会済みユーザー

2021/06/04 01:36

ありがとうございます。やってみます
退会済みユーザー

退会済みユーザー

2021/06/04 02:16

修正しましたが何も変わらずです。これは適性の問題でしょうか
退会済みユーザー

退会済みユーザー

2021/06/04 02:20

public static function insert_datas() の定義も変えなきゃ。
退会済みユーザー

退会済みユーザー

2021/06/04 02:33

一応$onamaeと$commentにしているのですがこれではだめでしょうか
退会済みユーザー

退会済みユーザー

2021/06/04 02:36 編集

それ、ただのローカル変数です。受け取ってない。 public static function insert_datas($onamae, $comment) にしないと。
退会済みユーザー

退会済みユーザー

2021/06/04 02:40

わかりました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/06/04 02:49

一通り行ってみたのですが、何も変わらずでした。どこを再確認すればよいでしょうか、特にエラーは出ていませんが登録がされないです。
退会済みユーザー

退会済みユーザー

2021/06/04 03:40 編集

insertの箇所で $query->execute(); が足りてない。
退会済みユーザー

退会済みユーザー

2021/06/04 04:31

$query = DB::insert('t_comment')->set(array( 'name'=>'$onamae', 'comment'=>'$comment', ))->execute(); でやってみたのですが特に変わりなしでした。
退会済みユーザー

退会済みユーザー

2021/06/04 04:37 編集

'$onamae'では変数展開されないですよ、引用符は不要です。
退会済みユーザー

退会済みユーザー

2021/06/04 05:26

引用符を消してみましたがダメでした...
退会済みユーザー

退会済みユーザー

2021/06/04 05:41

ダメでした、じゃわからん。
退会済みユーザー

退会済みユーザー

2021/06/04 05:53

上記のように書き直したのですが、登録されませんでした。
退会済みユーザー

退会済みユーザー

2021/06/04 06:06

トランザクション処理の話を忘れていたので、回答内に追記しました。
退会済みユーザー

退会済みユーザー

2021/06/04 06:37

トランザクション処理を追加しましたが登録されず同じ画面にとどまっています。
退会済みユーザー

退会済みユーザー

2021/06/04 06:44

<form action="" accept-charset="utf-8" method="post"> actionの送信先、action_post()に繋がないといけないですね。 <form action="post" accept-charset="utf-8" method="post"> とかで、action_post()メソッドに渡るようにする必要があるはず。
退会済みユーザー

退会済みユーザー

2021/06/04 07:47

postにしたのですが変わりませんでしたわたっていないということですか
退会済みユーザー

退会済みユーザー

2021/06/04 08:11

最初の、フォームを表示するページのURLを元に、 POST先URLを書かなきゃいけないんだが。 どういうURLでやってるか想像つかないので、ひとまずURL教えて。
退会済みユーザー

退会済みユーザー

2021/06/04 08:30 編集

http://fuel.sunabird.local/board/index これが最初のフォームのURLです。 コメントを入力するテキストの下に一覧をつくり登録するとそこを更新する仕様です
退会済みユーザー

退会済みユーザー

2021/06/04 08:38 編集

だとすると、action_index()にはhttp://fuel.sunabird.local/board/indexでアクセスできているので、 その法則性で、action_post()にはhttp://fuel.sunabird.local/board/postでアクセスできるはず。 POST先は /board/post になるかと。
退会済みユーザー

退会済みユーザー

2021/06/04 09:03

Fuel\Core\PhpErrorException [ Notice ]: Undefined property: Controller_Board::$load というエラーが出て $this->load->model('tcomment');に問題があるらしいのですがどうすればいいですか 一応登録はされて、登録ボタンを押すとエラーが表示され再度board/indexを読み込むと一覧に追加されている状態です。
退会済みユーザー

退会済みユーザー

2021/06/04 09:10 編集

$this->load->model()とかどこから出てきたかわからないので、 代わりに、 $view = View::forge('board/index'); $view->set('comment_data', $comment_data); return $view; で解決。
退会済みユーザー

退会済みユーザー

2021/06/04 09:23

$view->comment_data = うんたら、 みたいな代入方法は基本的にダメです。(動いても。) View - クラス - FuelPHP ドキュメント http://fuelphp.jp/docs/1.7/classes/view.html set()もしくはset_safe()を使います。 $view->set('comment_data', $comment_data); で、ビューの方で参照できるようになります。
退会済みユーザー

退会済みユーザー

2021/06/07 00:46

できました!!一から教えてくださり、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問