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

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

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

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

Q&A

解決済

3回答

2279閲覧

php require_onceで呼び出すプルダウン選択について

yoshipu

総合スコア115

PHP

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

0グッド

0クリップ

投稿2016/10/18 07:54

4つのphpファイルがあり、一番最後のphpがほかの3つのphpファイルを呼び出して使うことを想定しています。

入力した際、プルダウンで都道府県を次の画面で選択済にしたいのですが、配列キーがページ上部に出てくるだけで、プルダウン上なんら選択されません。

いろいろ考え、require_onceを使うタイミングや順番が違うのではないかと考えているのですが、お力をおかしいただけませんでしょうか。

php

1<?php 2 3$address1 = h($_POST['address1']); 4

php

1<?php 2 3$area = array( 4 'お選びください','北海道','青森県','岩手県','宮城県','秋田県','山形県', 5 '福島県','茨城県','栃木県','群馬県','埼玉県','千葉県', 6 '東京都','神奈川県','新潟県','富山県','石川県','福井県', 7 '山梨県','長野県','岐阜県','静岡県','愛知県','三重県', 8 '滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県', 9 '鳥取県','島根県','岡山県','広島県','山口県','徳島県', 10 '香川県','愛媛県','高知県','福岡県','佐賀県','長崎県', 11 '熊本県','大分県','宮崎県','鹿児島県','沖縄県', 12); 13

php

1<?php 2function h($str) 3{ 4 echo htmlspecialchars($str, ENT_QUOTES); 5}

php

1<?php 2 3require_once('array.php'); 4require_once('function.php'); 5require_once('var.php'); 6 7?> 8<!DOCTYPE html> 9<html> 10<head> 11<meta charset="utf-8"> 12</head> 13<body> 14都道府県 15<select name="address1"> 16 <?php foreach($area as $k => $v):?> 17 <option value="<?=$k?>"<?=($address1 == $k ?'selected="selected"':'')?>><?=$v?></option> 18 <?php endforeach;?> 19</select> 20</body> 21</html> 22

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

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

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

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

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

guest

回答3

0

ベストアンサー

htmlspecialchars は入力時に使うものではなく出力時に使うものです。また、関数 h()echo があって return が無いので、そもそも下記コードの $address1 には何も代入されず、$_POST['address1']) の値を画面に出力します。

PHP

1$address1 = h($_POST['address1']);

<?=$v?><?php h($v)?> では?

投稿2016/10/18 08:20

編集2016/10/18 08:22
kei344

総合スコア69364

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

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

yoshipu

2016/10/18 09:19

echoをreturnに変更しましたらうまくいきました。 echoとreturnを調べたのですが、 echo 単なる結果の出力 return 値を返して終わり(出力しない) という違いであっていますでしょうか? 今回お答えいただいた >return が無いので、そもそも下記コードの $address1 には何も代入されず というのの意味がよくわからないのですが詳しく教えていただけないでしょうか。 echoだと単なる出力だから変数になにもないとh関数が実行されず、returnは変数がなくても計算だけしてくれていて、htmlの中での記述が$address1だから入れるものがなくてページ上に・・・と考えたのですが、書いていて意味がわからなくてなってしまいました。
kei344

2016/10/18 09:50

関数 h() を下記のように使うのであれば、関数内で return をする必要があります。 $address1 = h($_POST['address1']); PHPの入門書などを数冊買って読まれることをお勧めします。 また、回答でも書きましたが、htmlspecialchars は出力( echo )の時に使いましょう。入力時は filter_input を使いましょう。 $address1 = filter_input( INPUT_POST, 'address1' ); 【[PHP]どうしてfilter_input関数を使うのか】 http://junk-blog.com/php_filter_input/
yoshipu

2016/10/18 10:04

ありがとうございます。入門書を読みたいと思います。
guest

0

問題なさそうですが、最後のPHPに遷移してくる前のHTMLはどのようになっているのでしょうか。
selectnameaddress1になっているか、formmethodPOSTになっているかなど、辻褄があうかご確認ください。
あと、require_onceしている各PHPは、?>がないですが、それは端折ってるだけですよね?

投稿2016/10/18 08:20

ttyp03

総合スコア16996

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

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

yoshipu

2016/10/18 08:24

確認してみます。?>がないのは省略しているだけです。
guest

0

$kじゃなくて$vを出力ですかね

投稿2016/10/18 08:10

livetc

総合スコア86

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

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

yoshipu

2016/10/18 08:25

$kで他ページにも流用するので$kでと指定されています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問