大阪市24区と24区の602町名をそれぞれ区名、町名のみ変更し、リンクでつなげるPHPプログラムを制作中ですが、なかなか前に進まず、分かる方いましたら宜しくお願い致します
データベースはMY SQLを使用
テーブル:city フィールド:id(区のID)、region_id(大阪市のID)、city(区名)、station(駅名)、overviem(概要)
テーブル:town フィールド:id、town(町名)、city_id(区のID)
//top.php(大阪市24区を表示し、各24区へリンク)
<?php
$recordSet = mysqli_query($db , "SELECT id,region_id,city FROM city where region_id=24");
?>
★<?php
while($data = mysqli_fetch_assoc($recordSet)){
print '<li><a href="ward.php?id='.$data["id"].'">'.$data["city"].'</a></li>';
}
?>
//ward.php(区ごとの情報{町名・駅名・概要})
<?php
$recordSet = mysqli_query($db , "SELECT town FROM town");
$data=array("id"=>"","region_id"=>"","city"=>"","station"=>"","overview"=>"","town"=>"","city_id"=>"");//初期化
try{
$pdo = new PDO($dsn, $user,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id=isset($_GET["id"])?$_GET["id"]:"";
$input=array();
$input[]=$id;
$sql="SELECT city.id,city_id,city,station,overview,town.id,town,city_id FROM city,town WHERE city.id=town.city_id and city.id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
$data= $stmt->fetch(PDO::FETCH_ASSOC);
}catch(PDOException $e){
die($e->getMessage());
}
?>
<title><?php if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);?>の主な概要</title>
<h1><?php if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);?>の情報</h1>
<h2><?php if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);?>の町名</h2>
★<p><?php
while($data = mysqli_fetch_assoc($recordSet)){
print '<li><a href="ward.php?id='.$data["id"].'">'.$data["town"].'</a></li>';
}
?>
</p>
<h2><?php if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);?>の駅名</h2>
<p><?php if($data["station"]!=="") print htmlspecialchars($data["station"],ENT_QUOTES);?></p>
<h2><?php if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);?>の概要</h2>
<p><?php if($data["overview"]!=="") print htmlspecialchars($data["overview"],ENT_QUOTES);?></p>
★印をしたループ2箇所が分からない
・一つ目の★、現状はtop.phpの24区のリンクをクリックすると、全件ループされ、24区それぞれの町名が表示されるように指定文を入れる(もしくは受け取り側のward.php)
・2つ目の★も一つ目の★同様で、こちらはward.phpからward.phpへの受け渡しでプログラムを実現させたいが、受け渡しプログラムが分からない
No.3ベストアンサー
- 回答日時:
ちょっと質問と回答がずれるかもしれませんが
まずtop
//top.php(大阪市24区を表示し、各24区へリンク)
<?php
try{
$pdo = new PDO($dsn, $user,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$input=array(24);
$sql="SELECT id,city FROM city where region_id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
print '<li><a href="ward.php?id='.$data["id"].'">'.$data["city"].'</a></li>';
}
}catch(PDOException $e){
die($e->getMessage());
}
?>
大阪のid=24スタティックに埋め込んでいるのであまりよくないですが
とりあえずテストということで・・・
region_id=24におけるcityの一覧が取れるのがわかると思います
ward側ではcityのidを引き継いで
from cityとしてcityの情報を得るのと
from townでcityのidから引ける町の一覧を表示すればよいでしょう
<?php
try{
$pdo = new PDO($dsn, $user,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id=isset($_GET["id"])?$_GET["id"]:"";
$input=array($id);
$sql="SELECT city,station,overview FROM city where city_id=?";//一度cityの情報を取る
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
$data= $stmt->fetch(PDO::FETCH_ASSOC);
print "<title>";
if($data["city"]!=="") print htmlspecialchars($data["city"]>
print "の主な概要</title>\n";
print "<h1>";
if($data["city"]!=="") print htmlspecialchars($data["city"]);
print "の情報</h1>\n";
if($data["station"]!=="") print "駅は".htmlspecialchars($data["station"])."\n";
if($data["overview"]!=="") print "概要は".htmlspecialchars($data["overview"])."\n";
print "<h2>";
if($data["city"]!=="") print htmlspecialchars($data["city"]);
print "の町名</h2>\n";
$sql="SELECT id,town FROM town WHERE city_id=?";//一度townの一覧はtownテーブルのcity_idをキーにする
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
while($data= $stmt->fetch(PDO::FETCH_ASSOC)){
print '<li><a href="ward.php?id='.$data["id"].'">'.$data["town"].'</a></li>';
}
}catch(PDOException $e){
die($e->getMessage());
}
?>
質問者さんと同じ環境が作れるわけではないので、記載ミスがあるかもしれません
うまく拡大解釈しながらテストしてみてください
No.7
- 回答日時:
>Parse error: syntax error
えーと、どこでしょうね。エラーの行数が表示されていればその前後だと推定されます。
もう少し簡単なモデルにしてチェックするとわかりやすいと思いますよ。
エラーの行数は、最終行?>の行数です
そうですね、簡単なモデルにしてチェックすると
補足に書いたようにtryの}をどこに入れるかだと思うのです
ward.phpの区の町名(townのtown)のリンク先の表示を区のページと同じように
○○区の情報
○○区の駅名
○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅
○○区の概要
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○区の町名
○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○
としたいのですが
現状は
の情報
の駅名
の概要
の町名
とプログラムを読み込んでいません
http://www.osaka-glass.com/
↑このサイトのようにトップページ⇒出張エリアの豊中市をクリック⇒豊中市の出張エリアの赤阪をクリック
豊中市と赤阪は一部分(地名のみ)変更されて、他は同じ内容のページであり、この構造を実現させたいのです
プログラム初心者のため、あくまでもサンプル制作です
No.6
- 回答日時:
ちな・・
>○○区の駅名
>○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅
駅はcityテーブル上でどうやって保存されているんでしたっけ?
普通にやるとこんなっ感じ?
今回はhtml上のリストをどうしたいかわからないのでとりあえず<br>で雑に処理してあります
見出しにするのかul~li、dl~dt~ddにするのかうまくやってください
$sql="SELECT city,station,overview FROM city where id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
$data= $stmt->fetch(PDO::FETCH_ASSOC);
print <<<eof
{$data["city"]}の情報<br>
{$data["city"]}の駅名<br>
{$data["station"]}<br>
{$data["city"]}の概要<br>
{$data["overview"]}<br>
eof;
//ここまでがcityテーブルから得られるcityの状況、上記の通り駅のデータの持ち方次第
$sql="SELECT id,town FROM town WHERE city_id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
print "{$data["city"]}の町名<br>\n";
print "<ul>\n";
while($data= $stmt->fetch(PDO::FETCH_ASSOC)){
$id=htmlspecialchars($data["id"]);//たぶんidは数字なのでエスケープは不要ですが保険
$town=htmlspecialchars($data["town"]);
print "<li><a href=\"ward.php?id={$id}\">{$town}</a></li>\n";
}
print "</ul>\n";
たびたび有難うございます
Parse error: syntax error
何かの閉じ忘れですかね?
初心者の私にはわかりませんでした
No.5
- 回答日時:
>リンク先であるward.phpに下記のエラーメッセージが出ます
>Column not found: 1054 Unknown column 'city_id' in 'where clause'
ああ・・・そうですね
city_idはtownテーブルのcityへの紐づけidで、cityテーブルのカラム名はidでしたね
$sql="SELECT city,station,overview FROM city where id=?";
でよいんじゃないでしょうか?
No.4
- 回答日時:
>$pdo = new PDO($dsn, $user,$password);
>この行で下記のエラーメッセージが出ます
えーと、暗黙の了解で省略していたつもりですが、省きすぎましたか?
$user = 'ユーザー';
$password = 'パスワード';
$dsn = 'mysql:host=localhost; dbname=データベース名';
$pdo = new PDO($dsn, $user,$password);
となります。
mysqli_系の関数使うときもユーザー、パスワード、DB名は指定すると思うので
それと同じものを指定してあげてください
PDOをよく理解していなくて、PDOの設定をしないといけないと思い込んでしまいました
ユーザー、パスワード、DB名を指定するとtop.phpは正常に表示されましたが、
リンク先であるward.phpに下記のエラーメッセージが出ます
Column not found: 1054 Unknown column 'city_id' in 'where clause'
SELECT city,station,overview FROM city WHERE city_id=?を
SELECT city,station,overview FROM city,town WHERE city.id=town.city_id and city_id=?にするエラーメッセージは出なくなります
私は初心者でPHPを理解していませんが、テーブルcityとtownを結合する必要があるのでしょうか?
No.1
- 回答日時:
あまり細かく見ていませんが・・・
>$sql="SELECT city.id,city_id,city,station,overview,town.id,town,city_id FROM city,town WHERE city.id=town.city_id and city.id=?";
ward.phpはすでにcityのidを受け取っているので参照するのはtownだけでよいのでは?
$sql="SELECT id,town FROM town WHERE city_id=?";
もちろん、townの上位のcityの情報を表示したいなら別途cityテーブルを参照すればいいので
あえて結合する意味がないと思います
(上記の他に以下で参照するということ)
$sql="SELECT id,city,station,overview FROM city WHERE id=?";
そもそもtownが上位cityからひっぱった駅名は、必ずしもtownに最適な駅だとは思えませんが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
ヒアドキュメントの中のfor文
-
PHP5でCSVの指定行データだけを...
-
テキストデータから指定行の削除
-
複数行のデータのPOST処理に関して
-
FortranのOPEN文
-
$_SESSIONに二次元配列を使える...
-
特定の文からメールアドレスの...
-
行列
-
CArrayの要素としてCStringArra...
-
プルダウンメニューにDBの内容...
-
String だと「 ByRef引数の型が...
-
漢字のソートについて
-
マッチング処理(1:N)
-
foreachのなかで次のキーを参照...
-
多次元配列の扱い方
-
php で1から100までの素数の表...
-
foreachの値をメール本文に表示...
-
プログラミングのPythonのnoteb...
-
phpでforeachの中にforeachがあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
複数行のデータのPOST処理に関して
-
エラーメッセージ(無効な間接...
-
ヒアドキュメントの中のfor文
-
Resource id #3 と表示されま...
-
自動で番号を振りたい
-
C言語でCSVファイルの行数を読...
-
配列同士の足し算のループ処理
-
stdClass Objectを連想配列のよ...
-
PHPでCSVの一部の行を編集したい
-
phpを実行するとファイルダウン...
-
行数が30万件ほどあるCSVから、...
-
phpでCSVファイルの中身を多次...
-
php Undefined variableエラー
-
CSVデータの行数カウントをした...
-
複数ファイルで、それぞれの行...
-
csvの内容を行単位で削除したい
-
CSVファイルの最終行のデー...
-
PHP SimpleXml unsetについて
-
PHP5でCSVの指定行データだけを...
おすすめ情報
制作したいプログラムは
http://www.osaka-glass.com/
↑このサイトのトップページの都島区をクリックして表示されるページ⇒都島区のページの網島をクリックして表示されるページです
データベースMY SQL
テーブル:city
フィールド:id(区のID)、1~24
region_id(大阪市のID)、24、大阪市以外の例えば神戸市などを追加した時のために作成するid
city(区名)、東淀川区、淀川区・・・
station(駅名)、新大阪駅・・・
overviem(概要)、大阪市内の北部・・・
テーブル:town
フィールド:id(町名のID)、1~602
town(町名)、相川、淡路・・・
city_id(区のID)、1~24
>ward.phpはすでにcityのidを受け取っているので参照するのはtownだけでよいのでは?
初心者でわからないのですが、cityのidを受け取った後ならSELECT文でcityのIDとtownのcity_idを結合する必要がないということですよね
>そもそもtownが上位cityからひっぱった駅名は、必ずしもtownに最適な駅だとは思えませんが・・・
確かに仰る通りですが、今回のプログラムはサンプルとお考え下さい
初歩的な質問で申し訳ないですが
//top.php
$pdo = new PDO($dsn, $user,$password);
この行で下記のエラーメッセージが出ます
Undefined variable: dsn in・・・
Undefined variable: user in・・・
Undefined variable: password in・・・
翻訳すると、未定義の変数:DSN、ユーザー、パスワードということなので、DSN、ユーザー、パスワードを指定していないエラーでしょうか?
PDOを調べてみましたが、PDOは「PHP Data Objects」の略で、どのデータベースを使っているかを隠蔽してくれるものです。PDOを使うことで、どのデータベースを利用する場合でも同じ関数を使うことができます
PDOを使ってMySQLへ接続する設定をしていないためのエラーでしょうか?
教えて頂いたward.phpを編集して
○○区の情報
○○区の駅名
○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅/○○駅
○○区の概要
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○区の町名
○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○ ○○
という並びにしたのですが、○○区の町名を○○区の駅名の上に移動させるには
プログラムの位置を移動させるだけではなく、cityテーブル、townテーブル、cityテーブルと読み込ませるプログラムにすると思うのですが、
print "<h1>";
if($data["city"]!=="") print htmlspecialchars($data["city"],ENT_QUOTES);
print "の情報</h1>";
つづき
print "<h2>";
if($data["city"]!=="") print ($data["city"]);
print "の駅名</h2>";
print "<p>";
if($data["station"]!=="") print ($data["station"]);
print "</p>";
print "<h2>";
if($data["city"]!=="") print ($data["city"]);
print "の概要</h2>";
print "<p>";
if($data["overview"]!=="") print ($data["overview"]);
print "</p>";
print "<h2>";
if($data["city"]!=="") print ($data["city"]);
print "の町名</h2>";
つづき
$sql="SELECT id,town FROM town WHERE city_id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute($input);
while($data= $stmt->fetch(PDO::FETCH_ASSOC)){
print '<li><a href="ward.php?id='.$data["id"].'">'.$data["town"].'</a></li>';
}
}catch(PDOException $e){
die($e->getMessage());
}
上記を並び替え、どういうプログラムを追加すればいいでしょうか?
syntax errorの原因は
$sql="SELECT city,station,overview FROM city where id=?";の上にある
try{
$pdo = new PDO($dsn, $user,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id=isset($_GET["id"])?$_GET["id"]:"";
$input=array($id);
try{の閉じ忘れだと思うのですが、}の入れる場所はどこになるのでしょうか?
今回のテストプログラムは明日までに完成させる必要があったため、焦ってしまい、PHPのループ手法を使いこなすことを優先に考えてしまったため、歪な質問になり、テーブルごとの情報の取り出し方やエラーの解決方法、教えて頂いたプログラムの理解を深めていきます
有難うございました
ward.phpからテーブルtownのid(1~602)を受け渡し、新たにtown.phpを作成し、
town.phpでテーブルcityの情報を取得し、フィールドcityをプリントしたいのですが、townのidを受け渡したページ(town.php)にテーブルcityのフィールドcityを連動させるSELECT文がわかりません
イメージはとしては
townテーブルのidとcity_idをcityテーブルのidとcityにどう連動されるなんですが・・・