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

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

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

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

CodeIgniter

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

Q&A

解決済

2回答

2295閲覧

CodeIgniter3のチュートリアルにて個別ページが作れない

2zhfcmp5

総合スコア8

PHP

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

CodeIgniter

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

0グッド

0クリップ

投稿2017/07/11 08:47

編集2017/07/12 02:27

###前提・実現したいこと
はじめまして。
PHP5.6、PostgreSQL9.6、XAMPPのAPACHEを使用して
CodeIgniter3のチュートリアルを行っています。

チュートリアルの概要としては
・作るのはブログのようなもの
・記事の一覧、個別ページ、投稿フォーム、サンクスページを作る
・投稿フォームからはタイトルと本文を入力して送信するとdbに追加
・記事の一覧に追加される
といったようなものです。
詳細は以下のページにあります。
http://codeigniter.jp/user_guide/3/tutorial/news_section.html

写経で1周した結果、フォームから書き込んで記事一覧に追加することは成功しました。
イメージ説明
###発生している問題・エラーメッセージ
記事一覧から「view article」をクリックし、記事の個別ページを開こうとすると以下のエラーが表示されます。

php

1A PHP Error was encountered 2 3Severity: Warning 4Message: Invalid argument supplied for foreach() 5Filename: news/index.php 6Line Number: 3 7Backtrace: 8File: C:\xampp\htdocs\CodeIgniter\application\views\news\index.php 9Line: 3 10Function: _error_handler 11 12File: C:\xampp\htdocs\CodeIgniter\application\controllers\News.php 13Line: 38 14Function: view 15 16File: C:\xampp\htdocs\CodeIgniter\index.php 17Line: 315 18Function: require_once

###該当のソースコード
エラーメッセージの該当のソースはここの部分です。
/application/views/news/index.php

php

1<h2><?php echo $title; ?></h2> 2 3<?php foreach ($news as $news_item): ?> 4 5 <h3><?php echo $news_item['title']; ?></h3> 6 <div class ="main"> 7 <?php echo $news_item['text']; ?> 8 </div> 9 <p><a href="<?php echo $news_item['slug']; ?>">View article</a></p> 10 11<?php endforeach; ?>

###試したこと
エラーメッセージでググった結果、foreach文のnullの時の問題かと思われ、
以下のように強制的に配列になるように書き換えましたが依然エラーが表示されます。
ここでどうにもならなくなってしまったのでここからどうすればよいのかお聞きしたいです。
そもそもこれはチュートリアルのコードがおかしいのでしょうか。

php

1<h2><?php echo $title; ?></h2> 2 3<?php foreach ((array)$news as $news_item): ?> 4 5 <h3><?php echo $news_item['title']; ?></h3> 6 <div class ="main"> 7 <?php echo $news_item['text']; ?> 8 </div> 9 <p><a href="<?php echo $news_item['slug']; ?>">View article</a></p> 10 11<?php endforeach; ?>

php

1A PHP Error was encountered 2 3Severity: Notice 4Message: Undefined variable: news 5Filename: news/index.php 6Line Number: 3 7Backtrace: 8 9File: C:\xampp\htdocs\CodeIgniter\application\views\news\index.php 10Line: 3 11Function: _error_handler 12 13File: C:\xampp\htdocs\CodeIgniter\application\controllers\News.php 14Line: 38 15Function: view 16 17File: C:\xampp\htdocs\CodeIgniter\index.php 18Line: 315 19Function: require_once

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

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

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

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

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

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

guest

回答2

0

自己解決

viewの記述にミスがありました。

投稿2017/07/12 04:17

2zhfcmp5

総合スコア8

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

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

0

Controller に、デバッグ用の表示を on にする設定を追記してみて下さい。

php

1class News extends CI_Controller { 2 3 public function __construct() 4 { 5 parent::__construct(); 6 $this->load->model('news_model'); 7 $this->load->helper('url_helper'); 8 $this->output->enable_profiler(TRUE);//これを入れる 9 }

SQL等が正常に稼働しているか、確認できるようになります。
多分、DB 周りでうまく行っていなくて、$news が空なんだと思います。
空かどうかは、foreach の手前で var_dump($news) を入れることで確認できます。

Postgre と MySQL 同居させて、MySQL 使っているとかありませんか?

追記
コメント内容のデータだと、正常に稼働する気がしたので、こちらでも確認してみました。

php

1<?php 2$news = [ 3 0 =>[ 4 "id" => "1", 5 "title" => "タイトル1", 6 "slug"=> "category1", 7 "text"=> "1本文ここから始まる今日は7月10日codeigniterで試しているところだ", 8 ], 9 1 =>[ 10 "id" => "2", 11 "title" => "タイトル2", 12 "slug"=> "category2", 13 "text"=> "2本文ここからテストの文章が入る。本日の最高気温はおそらく35度。", 14 ], 15 2 =>[ 16 "id" => "3", 17 "title" => "タイトル3", 18 "slug"=> "category3", 19 "text"=> "3本文ここからうんたらかんたら", 20 ], 21]; 22?> 23 24<?php foreach ((array)$news as $news_item): ?> 25 26 <h3><?php echo $news_item['title']; ?></h3> 27 <div class ="main"> 28 <?php echo $news_item['text']; ?> 29 </div> 30 <p><a href="<?php echo $news_item['slug']; ?>">View article</a></p> 31 32<?php endforeach; ?>

このスクリプトだと正常に動作します。

投稿2017/07/11 10:02

編集2017/07/12 03:09
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

2zhfcmp5

2017/07/12 02:53

回答ありがとうございます。 ご指摘いただきましたデバッグとvar_dumpは入れてみました。 $news には二重配列で値が入っておりました。 ```php array(3) { [0]=> array(4) { ["id"]=> string(1) "1" ["title"]=> string(13) "タイトル1" ["slug"]=> string(9) "category1" ["text"]=> string(87) "1本文ここから始まる今日は7月10日codeigniterで試しているところだ" } [1]=> array(4) { ["id"]=> string(1) "2" ["title"]=> string(13) "タイトル2" ["slug"]=> string(9) "category2" ["text"]=> string(93) "2本文ここからテストの文章が入る。本日の最高気温はおそらく35度。" } [2]=> array(4) { ["id"]=> string(1) "3" ["title"]=> string(13) "タイトル3" ["slug"]=> string(9) "category3" ["text"]=> string(79) "3本文ここからうんたらかんたら" } } ``` また、スクリーンショットを追加しましたようにPostgreSQLは正常に動作しており、MySQLは使用しておりませんでした。 自己解決したのですが 記事の個別ページ用のviewにうまくデータを渡せていなかったようです。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/07/12 03:07

動くようになったのであれば良いですが、$news が上記のとおりだったら、最初から特に問題なく動いたはずです。 ちょっと提示された情報がチグハグな感じがします。。。 こちらで確認したスクリプトを回答にあげておきますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問