こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ブラウザにテーブルのレコードが表示されません

初めまして。
PHP初心者のものです。

CodeIgniterを使用して、MySQLのテーブルの一覧をブラウザ上で表示させていと思っています。ですが、画面は表示されるのですが、レコードの部分がまったく表示されず困っています。
よろしければご教授のほど、よろしくお願いいたします。

#controllers/helo.php
<?php

class Helo extends CI_Controller {
function Helo()
{
parent::__construct();
}

public function index ()
{
$data = array ('head_title' => 'index', 'content' => 'index');
$data['records'] = $this->db->get('blogs')->result_array();
$this->load->view('layout/mylayout', $data);
}
}

#views/index.php
<h1>Blog一覧</h1>
<p>テーブルの一覧です</p>
<table>
<tr>
<th>ID</th>
<th>DATE</th>
<th>TITLE</th>
<th>CONTENT</th>
</tr>

<?php foreach($records as $row): ?>
<?= "<tr><td> {$row['id']} </td>" ?>
<?= "<td>" . date ('Y/m/d', $row['timestamp']) . "</td>" ?>
<?= "<td> {$row['title']} </td>" ?>
<?= "<td> {$row['content']} </td></tr>" ?>
<?php endforeach; ?>
</table>

#views/layout/mylayout.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title><?= $head_title ?></title>
<link rel="stylesheet" type="text/css" href="/igniterapp/css/mylayout.css" />
</head>
<body>
<table class="content_table">
<tr><td>
<?php $this->load->view('layout/header.php'); ?>
</td></tr>
<tr><td>
<?php $this->load->view($content); ?>
</td></tr>
<tr><td>
<?php $this->load->view('layout/footer.php'); ?>
</td></tr>
</table>
</body>
</html>

#views/layout/footer.php
<p class="footer">this is Footer.</p>

#views/layout/header.php
<p class="header"> this is header.</p>

#config/database.php
$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'mysql';
$db['default']['password'] = 'password';
$db['default']['database'] = 'igniter_db';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['port'] = '3306';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

■環境
・osはCentOS6.2です。
・CodeIgniterのバージョンは2.1.2です。
・PHPのバージョンは5.3.3です。
・MySQLのバージョンは5.5.25です。

個人的には「$this->db->get('blogs')->result_array();」
の部分でテーブルの情報が取得されていないので、後のforeach文が実行されず終了しているのだと思うのですが、対処法がわからない状態です。(見当違いでしたら申し訳ございません)

分かりにくい文章で申し訳ございませんが、よろしくお願いいたします。

投稿日時 - 2012-07-01 22:06:55

QNo.7566541

すぐに回答ほしいです

質問者が選んだベストアンサー

スミマセン。セミコロンが抜けてましたね。
$query = $this->db->get('blogs');
です。

ログファイルなしの開発はあり得ないので、
パーミッションなどを確認して、ログファイルの出力ができるようにしてみてください。
ログファイル・ログディレクトリは、Webサーバデーモンからの書き込み権限が必要です。

config/config.phpの「$config['log_path'] = '';」設定が空であれば、デフォルトの
「application/logs/」ディレクトリにログファイルが作成されます。
「$config['log_path']」にパスを設定しているのであれば、
そのパスにログファイルが作成されます。(書き込み権限があれば)


下記の設定で、データベース関連のエラーが出力されます。
=== [ config/database.php ] =======================
:
$db['default']['db_debug'] = TRUE;
:
==============================================

投稿日時 - 2012-07-09 21:48:51

お礼

セミコロンをつけたらなんと表示できました!
ありがとうございます!

そして6cc70ef9d187のおっしゃる通りlogsのパーミッションを書き換えたところ、ログも正常に作成されました。
本当にありがとうございます。

ただ少し腑に落ちない点があるのですが、6cc70ef9d187が最初におっしゃっていた3番の自動でDBを読み込む設定では、
何故正常にレコードが表示されなかったのでしょうか。
そこだけが未だに疑問です。

投稿日時 - 2012-07-10 01:25:48

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

下記のように、ログ出力して「APPPATH/application/logs/log-2012-07-??.php」ログファイルを確認してみてください。
=== [ config/database.php ] =======================
:
$db['default']['db_debug'] = TRUE;
:
==============================================

=== [ models/blogs.php ] =========================
class Blogs extends CI_Model {

public function __construct()
{
parent::__construct();
$this->load->database();
}

public function getBlogs()
{
$query = $this->db->get('blogs')

// 検索件数ログ出力
log_message('debug', 'NUM ROWS: ' . $query->num_rows());
// SQLログ出力
log_message('debug', 'SQL: ' . $this->db->last_query());

if ($query->num_rows() > 0) {
return $query->result_array();
}

return FALSE;
}

}
===============================================

投稿日時 - 2012-07-07 18:16:54

補足

ご回答ありがとうございます。

プログラムを上記のように変更しました。

すると、ブラウザでは
Parse error: syntax error, unexpected T_STRING in /var/www/html/igniterapp/application/models/blogs.php on line 15
というメッセージが出ました。

また、$config['log_threshold'] = 0;だったので、$config['log_threshold'] = 4;にconfig.phpを変更いたしました。

しかし、/application/logs/配下にindex.phpしか存在しておらず、ログファイルが作成されていない状態です。

php.iniも見てみたのですが、特に変化はありませんでした。

データベースの設定などがおかしいのかと思い、試しにwordpressをインストールしてみたのですが、
正常にデータベースに接続でき、インストールすることができました。

何度も申し訳ございません。
よろしくお願いいたします。

投稿日時 - 2012-07-08 03:05:44

ANo.2

シェルコマンドで以下を確認してみてください。

mysqldデーモンがTCP3306ポートでリッスンしているか
$ netstat -ln |grep 3306

mysqldデーモンにTCPで接続できるか
$ mysql -u mysql --password=password -P 3306 -h localhost igniter_db

投稿日時 - 2012-07-05 23:58:22

補足

お返事ありがとうございます。

どちらもうまくいく状態です。

$ netstat -ln |grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

$ mysql -u mysql --password=password -P 3306 -h localhost igniter_db
Welcome to the MySQL monitor.




色々調べてみたのですが原因が全くわかりません・・・。
よろしくお願いいたします。

投稿日時 - 2012-07-07 13:37:36

ANo.1

データベースに接続されていません。
データベースに接続するには、

1.CI_Loaderでロードする。
$this->load->database();

2.モデルクラスロード時に接続する。
$this->load->model('blogs', 'blogs', TRUE);

3.autoload.phpで自動接続する。
(お勧めしません。)

の3通りあります。

通常は、モデルクラス内で、(1.)を実行します。

# models/blogs.php
<?php

class Blogs extends CI_Model {

public function __construct()
{
parent::_construct();
$this->load->database();
}

public function getBlogs()
{
return $this->db->get('ci_sessions')->result_array();
}
}

#controllers/helo.php
<?php

class Helo extends CI_Controller {
public function __construct()
{
parent::__construct();
}

public function index ()
{
$this->load->model('blogs');
$data = array ('head_title' => 'index', 'content' => 'index');
$data['records'] = $this->blogs->getBlogs();
$this->load->view('layout/mylayout', $data);
}
}


モデルクラスの使い方はこちらにあります。
http://www.ci-guide.info/basic/model/
http://www.ci-guide.info/practical/core/model/

参考URL:http://www.ci-guide.info

投稿日時 - 2012-07-04 00:21:04

補足

ご回答ありがとうございます。

6cc70ef9d187に教えていただいた1の方法と3の方法を試してみましたが、
結果は変わりませんでした。

データベースやテーブルの作成が間違えているのでしょうか?

mysql -umysql -p
>show databases;
>show tables;
コマンドで、igniter_dbとblogsテーブルの確認はできます。

情報が少なくて申し訳ないのですが、もし何か考えられる原因がございましたらご教授願えればと思います。
よろしくお願いいたします。

投稿日時 - 2012-07-05 01:30:41

あなたにオススメの質問