$_GET
や $_POST
から値を取り出すのは(フレームワークではない)素の PHP でやるなら filter_input
がオススメらしいです。
sh
1$uname = filter_input(INPUT_POST, "uname");
もしくは三項演算子でもよいと思います。
sh
1$uname = isset($_POST["uname"]) ? $_POST["uname"] : null:
三項演算子を使う方法は、リクエストの内容によっては $_POST["uname"]
に配列が入ることがあります。もしそれが問題になるのであれば、文字列にキャストしておけば良いと思います。
sh
1$uname = isset($_POST["uname"]) ? (string)$_POST["uname"] : null:
この方法だと $_POST["uname"]
が配列のときに Array
などという文字列に変換されてしまいますが、どうせ invalid なリクエストなのでそうなったところで困る人はいないだろうと思われます。
PHP7 なら次のようにより短くかけます。
sh
1$uname = $_POST["uname"] ?? (string)$_POST["uname"];
htmlspecialchars
は値を取り出す時ではなく、値を出力するときにやるべきです。
なので、そのタイミングでは行わず、HTML の出力時に次のようにすると良いです。
<span class="uname"><?= htmlspecialchars($uname) ?></span>
htmlspecialchars
のその他に引数 ENT_QUOTES
UTF-8
は、PHP のバージョンによってあったほうが良かったりなくてもよかったりした気がするのですが、都度これを書くのが面倒であれば、つぎのような関数を作ると良いです。
php
1function h()
2{
3 return htmlspecialchars($_POST["uname"], ENT_QUOTES, "UTF-8");
4}
error_reporting(0); にしてやった方が現実的なのでしょうか。
非現実的です。error_reporting(0);
にして開発するとまったく上達することもなく、また、多くの時間を無駄にすると思われます。
必ず error_reporting(E_ALL);
とか error_reporting(-1);
とかにしておくことをおすすめします。
もっと根本的なところとして、確認画面で次のようなエラーが出ている時点でなにかおかしいですけれども?
Notice: Undefined index: uname in ...
入力画面をスキップしたとかならともかく、入力画面→確認画面、と遷移してきてこのエラーが表示されるなら、入力画面側で何かがおかしいと思われます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/26 03:56