※ ChatGPTを利用し、要約された質問です(原文:Codeigniterでのviewへの受け渡し)
Codeigniterでのviewへの受け渡し
このQ&Aのポイント
Codeigniterを使用してデータベースからデータを取得し、viewに受け渡す方法が分からない。
データベースへの接続は成功しているが、viewにデータが受け渡せずエラーが発生している。
controllerとviewのコードを確認し、データの受け渡しに問題があることが分かった。
Codeigniterを使用しています。
databaseからデータを取得するまでは出来るのですが、
viewへの受け渡しと表示がうまくいきません。
データベースへの接続は出来ていますので、単にソースの不備
と思いますが、どこが悪いのかよく分かりません。ご教授頂きたく
お願いいたします。
現在の仕様
【controllers/tel2.php】
<?php
class Tel2 extends CI_Controller{
function index()
{
// データベースを初期化(データの取得:ActiveRecord)
$this->load->database();
// SQLの実行
$this->db->select('id, prefecture_name,prefecture_name_en');
$query = $this->db->get('prefectures');
// 結果を表示
foreach( $query->result() as $row ){
$data['prefectures'] = array('id, prefecture_name,prefecture_name_en');
$this->load->view('tel2_view', $data);
}
}
}
?>
【views/tel2_view.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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>tel2</title>
</head>
<body>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<th scope="col">id</th>
<th scope="col">県名</th>
<th scope="col">en</th>
</tr>
<tr>
<td><?=$row['id']?></td>
<td><?=$row['prefecture_name']?></td>
<td><?=$row['prefecture_name_en']?></td>
</tr>
</table>
</body>
</html>
としてみました。
フレームは表示され、データの数だけ繰り返されているのですが、
肝心なデータの内容が下記のようになります。
【id欄】
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: row
Filename: views/tel2_view.php
Line Number: 18
【prefecture_name欄】
Severity: Notice
Message: Undefined variable: row
Filename: views/tel2_view.php
Line Number: 19
【prefecture_name_en欄】
Severity: Notice
Message: Undefined variable: row
Filename: views/tel2_view.php
Line Number: 20
上記がデータの数だけ繰り返されます。(内容に変化なし)
database接続は下記となります。
(xamppのためパスワードは設定していません)
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'tel';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$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;
いろいろ弄ってみたのですが、うまくいきません。
controllerを下記のようにするとデータが表示されますので、データの取得までは
出来ているようです。
viewへの受け渡しでミスがあるのだと思います。
<?
class Tel2 extends CI_Controller{
function index()
{
// データベースを初期化(データの取得:ActiveRecord)
$this->load->database();
// SQLの実行
$this->db->select('id, prefecture_name,prefecture_name_en');
$query = $this->db->get('prefectures');
// 結果を表示
foreach( $query->result() as $row ){
echo $row->id;
echo $row->prefecture_name;
echo $row->prefecture_name_en;
}
}
}
いろいろ試してみたのですがうまくいきません。
お手数ですがどこに間違いがあるのかご教授願います。
環境は以下のとおりです。
xampp for windowsXP
codeigniter2.0.3
Apache/2.2.21 (Win32)
PHP/5.3.8
mysql5.5.16
お礼
ご回答頂き有難う御座います。 そのままではうまくいきませんでしたが、試行錯誤の後 下記の方法でうまくいきました。 お忙しいところご対応頂き有難う御座いました。 【Contrller】 <? class Tel5 extends CI_Controller{ function index() { // データベースを初期化(データの取得:ActiveRecord) $this->load->database(); // SQLの実行 $this->db->select('id, prefecture_name,prefecture_name_en'); $data['query'] = $this->db->get('prefectures'); // 結果を表示 $data['prefectures'] = array('id', 'prefecture_name','prefecture_name_en'); $this->load->view('tel5_view', $data); } } ?> 【view】 <!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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題ドキュメント</title> </head> <body> <table width="700" border="1" cellspacing="2" cellpadding="2"> <tr> <th scope="col">id</th> <th scope="col">県名</th> <th scope="col">en</th> </tr> <?php foreach ($query->result() as $row):?> <tr> <td><?=$row->id?></td> <td><?=$row->prefecture_name?></td> <td><?=$row->prefecture_name_en?></td> </tr> <?php endforeach;?> </table> </body> </html>
補足
早速のご回答有難うございます。 >なので、読み捨てられていますよ? 申し訳ございません。 いろいろWEBで調べてこのような記述が正と思っており、 ご指摘いただいたことにたいする修正をする知識を持っておりません。 大変お手数で恐縮ですがソースを修正いただけますと幸いです。 (当方趣味でやっており、プロではありません。大変お恥ずかしいお願いで恐縮です。よろしくお願いいたします。)