プロが教えるわが家の防犯対策術!

何度もお問い合わせし申し訳ありません。本日2度目の問い合わせです。

MySQL + PearDBでコンテンツを作っています。

テーブルのカラムは「ID、都道府県名(pre_name)、都道府県ID(pre_no)、市町村名(p_name)、市町村ID(p_no)、会社名(company).....」です。

完成イメージは下記です。
●ユーザーは都道府県IDをGETする。
●都道府県名がヘッダーのタイトルに掲載される。
●指定した都道府県下の市町村の一覧が表示される
●その一覧にあるリンクをクリックすると、市町村内のホテル一覧に飛ぶ

そこで作ったのが下のソースです。
ヘッダーでは、GETされた任意のpre_noに基づき、抽出されたpre_nameを1つだけ表示する。
本文では、GETされた任意のpre_noに基づき、抽出された市町村名を1回だけ表示する(その市町村名にはリンクが張られており市町村ごとのホテルページへ飛ぶことが可能)


【結果】

【ソース1】の場合
市町村名へのリンクが、登録会社の数だけ出現!
(表示数を指定しないためここまでは当たり前です)

ここから、繰り返しさえ制御できれば完成のはずです。

ここで対策としてfetchOneを使おうとしたのですが、fetchOneはMDBからの機能のようでpearDBでは使えません。

ということで、【ソース2】の表示数を指定することにしました。
$rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_no ASC",1,1);

しかし今回の使用用途では何故か
Parse error: syntax error, unexpected $end in になります。

どなたか、私の間違いをご指摘いただけますでしょうか?


************************************************************
【ソース1】(市町村名がホテルの数だけ出現)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


<?PHP
// サーバー情報接続
require_once '../../config_n_reform.php';
require_once '/usr/share/pear/DB.php';

$db = DB::connect($dsn);
if (PEAR::isError($db)) {
die($db->getMessage());
}

print('接続に成功しました<br>');

$db->query('SET NAMES UTF8');
if (PEAR::isError($db)) {
die($db->getMessage());
}

//////GET URL表示
if(isset($_GET['pre_no'])){
$sql = "select * from reform_co where pre_no = '" .addslashes($_GET['pre_no'])."'";
}

$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}

//////タイトル表示
print<<<EOF
<title>
EOF;
$i = 0;
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
if ($i == 0) {
print($row['p_name']);
print<<<EOF
のホテルのご紹介
</title>
</head>
<body>
EOF;
}
$i++;

//////ホテル名1回のみ表示

$rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_name ASC",1,1);

while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
print($row['pre_no']);

//市町村へのリンク ここは機能しています
//print '<a href="http://hoge.com/index1.php?p_no=';

//print($row['p_no'].'');

//print '">';

//print($row['p_name'].'<br>');

//print "</a><br><br>";

}

$db->disconnect();
?>

</body>
</html>
****************************************************

****************************************************
【ソース2】 繰り返しを制御したはずなのですが、エラー

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


<?PHP
// サーバー情報接続
require_once '../../config_n_reform.php';
require_once '/usr/share/pear/DB.php';

$db = DB::connect($dsn);
if (PEAR::isError($db)) {
die($db->getMessage());
}

print('接続に成功しました<br>');

$db->query('SET NAMES UTF8');
if (PEAR::isError($db)) {
die($db->getMessage());
}

//////GET URL表示
if(isset($_GET['pre_no'])){
$sql = "select * from reform_co where pre_no = '" .addslashes($_GET['pre_no'])."'";
}

$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}

//////タイトル表示
print<<<EOF
<title>
EOF;
$i = 0;
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
if ($i == 0) {
print($row['p_name']);
print<<<EOF
のホテルのご紹介
</title>
</head>
<body>
EOF;
}
$i++;

//////ホテル名表示

$rs=$db->limitQuery("SELECT * FROM reform_co where pre_no = '" .addslashes($_GET['pre_no'])." ORDER BY p_name ASC",1,1);

while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {


//市町村へのリンク
print '<a href="http://hoge.com/index1.php?p_no=';

print($row['p_no'].'');

print '">';

print($row['p_name'].'<br>');

print "</a><br><br>";

}

$db->disconnect();
?>

</body>
</html>

********************************************************

A 回答 (1件)

Parse Errorは、DBに関係ないPHPのエラーです。


閉じ括弧 } が1つ足りないだけでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!