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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

Q&A

解決済

2回答

10513閲覧

PHPでDBのカラムを配列で取得して、繰り返し文で表示させたい

sykj

総合スコア13

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

0グッド

0クリップ

投稿2018/09/13 01:16

###postgreSQLで格納されている都道府県を一覧表で表示して、選択された都道府県のリンクをクリックすると、該当都道府県の市区町村を表示させるプログラムを作成したい

ここに質問の内容を詳しく書いてください。
PHPで表題の県のようなプログラムを以下のように書いています。今回DBはPostgreSQL 8.1.10でphppgAdmin3.5.3を使用しております。
ダンプしてみると、DBから$rowsに格納されていることは確認できたのですが、後半の表示がうまくいきません。
どのようにすればよいかお知恵をください。
よろしくお願いします。

### 

PHP側

1<?php 2$db_connect = pg_connect("host=localhost dbname=xxxxxxx user=xxxxxxx password=yyyyyyyy"); 3pg_query($db_connect,"SET search_path TO sykj;"); 4 5$sql = "SELECT * FROM all_pref"; 6$result = pg_query($db_connect,$sql); 7//DBに格納されているテーブルを配列で受け取る。 8$rows = pg_fetch_all($result); 9//テーブルのレコード数 10$numrow = pg_num_rows($result); 11//出力 12print_r($numrow); 13var_dump($rows); 14?> 15 16 <table> 17 <?php 18 for($i = 0;$i< $numrow; $i++){ 19 ?> 20 21 <tr> 22 <td><a href="citytown.php?pref_no=<?php //echo $rows[$i]; ?>"></a></td> 23 </tr> 24 <?}?> 25 </table> 26 27```データベース側 28CREATE TABLE all_pref ( 29 //県の番号 一意 01、02、…、47となっている 30 pref_no text NOT NULL, 31  //県名 32 pref_subject text NOT NULL 33); 34 35ALTER TABLE sykj.all_pref 36 37### 現在の表示 38 39 47 array(47) { [0]=> array(2) { ["pref_no"]=> string(2) "01" ["pref_subject"]=> string(6) "北海道" } [1]=> array(2){ ["pref_no"]=> string(2) "02" ["pref_subject"]=> string(6) "青森" }・・・・・[46]=> array(2) { ["pref_no"]=> string(2) "47" ["pref_subject"]=> string(6) "沖縄" } } 40 41 42### 補足情報(FW/ツールのバージョンなど) 43php 5.2.8 44DBはPostgreSQL 8.1.10 45phppgAdmin3.5.3

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

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

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

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

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

guest

回答2

0

ベストアンサー

php

1 <table> 2 <?php 3 foreach ($rows as $rec) : 4 ?> 5 6 <tr> 7 <td><a href="citytown.php?pref_no=<?php echo $rec['pref_no']; ?>"><?php echo $rec['pref_subject']; ?></a></td> 8 </tr> 9 <?php 10 endforeach; 11 ?> 12 </table>

$rowsはレコード(行単位)の配列なので、
一つずつ引き出すために例えば$recなど別の変数に行単位で取り出して、
あとは$rec['pref_no']とか$rec['pref_subject']とかで
お望みのものが取り出せるはず。
forループを使って
$rec = $rows[$i];
などとしても良いのですが、
$iを特別なにかに使うことがなければ
私の場合はforeachループにしつつ
foreach ($rows as $rec) :であれば順次$recに1つずつ読み出されるので
コーディング量が減ってわかりやすいこともあるので
書き直しました。

あと、<?php<?などと省略して使うためには、
php.iniの設定値short_open_tagの変更が必要です。
通常は省略せず書きます。

PHPにおいてブロック構造を示すのに{``}を使いますが、
htmlと混在したときにわかりづらくなってしまうため、
endif, endfor, endforeachなどの制御構造に関する別の構文を私は好みます。

投稿2018/09/13 01:23

編集2018/09/13 02:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sykj

2018/09/13 01:53

ご回答ありがとうございます。 foreachの使い方もご丁寧に解説いただきよくわかりました。 一つまた理解が深まりました。 また、endif, endfor, endforeachなどは知りませんでしたの今後こちらを使いたいと思います。
yambejp

2018/09/13 02:10

> <?phpは<?などと省略できません これはやや違って 「XMLと設定が競合する使えるけど使わないようにしましょう」 ということです。 設定short_open_tagのオンオフで切り替えができます。
sykj

2018/09/13 02:47

補足頂きましてありがとうございます。 参考にさせていただきます。
退会済みユーザー

退会済みユーザー

2018/09/13 02:55

shot_open_tagの件、回答内に反映いたしました。ご指摘ありがとうございます。
guest

0

念の為・・・、以下癖をつけておくとよいでしょう
(今回はやらなくても直接影響はありません)

  • urlに埋め込むデータはurlencode
  • htmlに埋め込むデータはhtmlspecialchars

PHP

1$rows=[ 2 ["pref_no"=> "01","pref_subject"=>"北海道"], 3 ["pref_no"=> "02","pref_subject"=>"青森"], 4 ["pref_no"=> "1&2","pref_subject"=>"名&前"], 5 ["pref_no"=> "47","pref_subject"=>"沖縄"], 6 ]; 7$enc_rows=array_map(function($x){ 8 return ["pref_no"=>urlencode($x["pref_no"]),"pref_subject"=>htmlspecialchars($x["pref_subject"])]; 9},$rows); 10?> 11<table border> 12<?PHP 13foreach($enc_rows as $rec){ 14print <<<eof 15 <tr> 16 <td><a href="citytown.php?pref_no={$rec['pref_no']}">{$rec['pref_subject']}</a></td> 17 </tr> 18eof; 19} 20?> 21</table> 22

※上記「&」はurlencodeすると「%26」、htmlspecialcharsすると「&」に変換されます。

投稿2018/09/13 03:55

yambejp

総合スコア114814

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問