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

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

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

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

2回答

730閲覧

入力したデータをDBへ登録したい(codeigniter)

shirouto_user

総合スコア12

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2018/10/25 12:19

編集2018/10/28 03:46

いつもお世話になっております。

codeigniterでフォームから入力した値を取得してDBへ登録したいのですが以下のようなエラー内容がでてしまい、
登録できない状態になっています。
調べてみたところ、配列の中からデータを取り出せていない状態のようで、取り出すやり方をさがしてみましたが、
よくわかりませんでした。

ヒントでもよいので配列から取り出してデータを登録する方法を教えていただけますでしょうか?
ほかにも問題がありましたらご指摘いただけると幸いです。

よろしくお願いいたします。

◆エラー内容 A PHP Error was encountered Severity: Notice Message: Array to string conversion Filename: models/News_model_02.php Line Number: 26 Backtrace: File: C:\xampp\htdocs\CodeIgniter\application\models\News_model_02.php Line: 26 Function: _error_handler File: C:\xampp\htdocs\CodeIgniter\application\controllers\News_02.php Line: 71 Function: insert_answer File: C:\xampp\htdocs\CodeIgniter\index.php Line: 315 Function: require_once A Database Error Occurred Error Number: 1054 Unknown column 'Array' in 'field list' insert into news ( id, title, slug, text ) values ( Array, Array, Array, Array ) Filename: C:/xampp/htdocs/CodeIgniter/system/database/DB_driver.php Line Number: 691
【model】 <?php class news_model_02 extends CI_Model { public function __construct() { $this->load->database(); } public function insert_answer($hikisu) { $sql = " insert into news ( id, title, slug, text ) values ( ".$this->db->escape($hikisu).", ".$this->db->escape($hikisu).", ".$this->db->escape($hikisu).", ".$this->db->escape($hikisu)." ) "; $result = $this->db->query($sql); } }
【controller】 public function create_02 () { $this->load->helper('form'); $this->load->model('create_02'); $data['title'] = 'Create a news item'; $hikisu = $this->input->post(); $this->news_model_02->insert_answer($hikisu); $this->load->view('news/success'); }
【view】 <h2>xxxxx</h2> <h2><?php echo $title; ?></h2> <?php echo form_open('news/create'); ?> <label for="title">Title</label> <input type="input" name="title" /><br /> <label for="text">Text</label> <textarea name="text"></textarea><br /> <input type="submit" name="submit" value="Create news item" /> </form>
  • 補足

アドバイスありがとうございます。
以下の形で修正してみたところ、エラーは表示されなくなりましたが、データを入力しても
NULLしかインサートされなくなりました。こういった場合はどのような対処をとればよいですか?
当方、php自体の基本もわかっていない状態なため、この部分の理解ができていないなどありましたらご指摘お願いいたします。

【model】 public function create_02 (){ $this->load->helper('form'); $data['title'] = 'Create a news item'; $this->load->model('News_model_02'); $hikisu = $this->input->post('hikisu'); $this->News_model_02->insert_answer($hikisu); $this->load->view('news/create_02',$data); }
【controller】 public function create_02 (){ $this->load->helper('form'); $data['title'] = 'Create a news item'; $this->load->model('News_model_02'); $hikisu = $this->input->post('hikisu'); $this->News_model_02->insert_answer($hikisu); $this->load->view('news/create_02',$data); }
【view】 <h2>news_02</h2> <h2><?php echo $title; ?></h2> <?php echo validation_errors(); ?> <?php echo form_open('news_02/create_02'); ?> <label for="title">Title</label> <input type="input" name="title" /><br /> <label for="text">Text</label> <textarea name="text"></textarea><br /> <input type="submit" name="submit" value="Create news item" /> </form>

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

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

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

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

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

guest

回答2

0

Array to string conversion

配列は文字列に変換できない ということ
文字列を引数として受け取りたい機能や関数に対して配列を渡してしまったときに起きることが多いです。

ざっとしか見てませんが、POSTデータをそのまま渡しているように見受けられます。
PHPのPOSTを確認されると分かりますが、key=>value形式の配列です。
ある特定の値を取り出したいのであれば、keyを指定して取り出してやる必要があります。

php

1$id = $_POST["id"]; 2//簡易例

フレームワークのドキュメントを読んだ感じ、引数にkeyを与えるとそのkey(入力コントロールのname属性の属性値)を指定するととれそうですね。

上記に

引数を指定せずに呼び出すことで、 POST されたすべての値を連想配列で返します。

とあるので、今は$_POSTをそのままescape関数に突っ込もうとしていることになります。
それぞれidやtitleなど特定の情報をSQLに入れていかなければならないので$_POSTそのまま入れようとするのはおかしいですよね。

あと、CodeIgniter上はどうか知りませんが、$_POST自体はスーパーグローバル変数なので、引数として渡さなくても直接使えるのではないでしょうか。

投稿2018/10/25 13:07

m.ts10806

総合スコア80850

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

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

0

public function insert_answer($hikisu) の$hikisuにはpostパラメータが連想配列で渡っているので正しく処理してください。
codeigniterのマニュアルにpostパラメータの取得方法が記載されています。

viewに記載の name="title" とname="text" はDB登録時に
$this->db->escape($hikisu['title'])
$this->db->escape($hikisu['text'])
で取得可能です。

newsテーブルに登録するid と slug に入れる値は、質問内容に記載がないので判断できません。

投稿2018/10/25 13:05

編集2018/10/25 13:17
kaba

総合スコア314

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問