teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

加筆修正

2020/01/08 05:36

投稿

退会済みユーザー
answer CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  </head>
6
6
  <body>
7
- <form method="post">
7
+ <form method="POST">
8
8
  <p>質問1 <br />
9
9
  <input type="radio" name="Q1" value="1000" />①yes<br />
10
10
  <input type="radio" name="Q1" value="2000" />②no<br />
@@ -48,10 +48,18 @@
48
48
 
49
49
  if (is_numeric($value1) && is_numeric($value2)) {
50
50
  $qtq = intval($value1) + intval($value2);
51
+ echo h($qtq);
52
+ } else {
53
+ echo '...';
51
54
  }
52
- echo h($qtq);
53
55
  ```
54
56
  $_POST[~]で受信したものはすべて**文字列**として扱われます。
55
57
  文字列と文字列を「+」演算子にて処理する際、
56
58
  数値でないものを処理すると、示されたようなエラーメッセージが表示されます。
57
- そのため、intval()で加工したり、あるいは`(int)$value1`などと型キャストを明示します。
59
+ そのため、intval()で加工したり、あるいは`(int)$value1`などと型キャストを明示します。
60
+
61
+ それと、今は想像がつかないかもしれないけど、$_POST[~]で受信したデータは、
62
+ 細工すればHTMLフォームに書いていないデータを送り込むことも容易にできるため、
63
+ 悪意を持ってhtmlやjavascriptを含むものを送り込まれたら、
64
+ そのままwebブラウザに出力してしまう`echo $_POST['Q1']`というのはやってはいけないです。
65
+ それを回避するために、htmlspecialchars()があります。