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

回答編集履歴

2

修正

2017/03/10 04:54

投稿

s8_chu
s8_chu

スコア14731

answer CHANGED
@@ -253,10 +253,10 @@
253
253
  <?php if ($state === "submit"): ?>
254
254
  <form action="" method="post">
255
255
  <ul>
256
- <li><?= h($name) ?>:<?= h($_SESSION["name"]) ?></li>
256
+ <li><?= h($_SESSION["name"]) ?></li>
257
- <li><?= h($gender) ?>:<?= h($_SESSION["gender"]) ?></li>
257
+ <li><?= h($_SESSION["gender"]) ?></li>
258
- <li><?= h($age) ?>代:<?= h($_SESSION["age"]) ?></li>
258
+ <li><?= h($_SESSION["age"]) ?></li>
259
- <li><?= h($message) ?>:<?= h($_SESSION["message"]) ?></li>
259
+ <li><?= h($_SESSION["message"]) ?></li>
260
260
  </ul>
261
261
  <input type="hidden" name="name" value="<?= h($_SESSION["name"]) ?>">
262
262
  <input type="hidden" name="gender" value="<?= h($_SESSION["gender"]) ?>">

1

追記

2017/03/10 04:54

投稿

s8_chu
s8_chu

スコア14731

answer CHANGED
@@ -148,4 +148,170 @@
148
148
  </form>
149
149
  </body>
150
150
  </html>
151
+ ```
152
+
153
+ 追記
154
+ ---
155
+ ```PHP
156
+ <?php
157
+ if (session_status() !== PHP_SESSION_ACTIVE) {
158
+ session_cache_expire(0);
159
+ session_cache_limiter('private_no_expire');
160
+ session_start();
161
+ }
162
+ if (!isset($_SESSION["token"])) {
163
+ $_SESSION["token"] = "";
164
+ }
165
+
166
+ $errorm = "";
167
+ $state = "";
168
+
169
+ function h($str)
170
+ {
171
+ return htmlspecialchars($str, ENT_QUOTES, "UTF-8");
172
+ }
173
+
174
+ function getToken()
175
+ {
176
+ $token = null;
177
+ if (is_null($token)) {
178
+ $token = hash("sha256", uniqid());
179
+ }
180
+ $_SESSION["token"] = $token;
181
+ return $token;
182
+ }
183
+
184
+ function checkToken($str)
185
+ {
186
+ return (isset($_SESSION["token"]) && $_SESSION["token"] === $str);
187
+ }
188
+
189
+ foreach (["name", "gender", "age", "message"] as $value) {
190
+ $$value = "";
191
+ }
192
+
193
+ if (filter_input(INPUT_POST, "submit")) {
194
+ if (checkToken(filter_input(INPUT_POST, "token"))) {
195
+ $state = "submit";
196
+ unset($_SESSION["token"]);
197
+ foreach (["name", "gender", "age", "message"] as $value) {
198
+ if (empty(filter_input(INPUT_POST, $value))) {
199
+ $errorm = "未入力箇所があります。";
200
+ $state = "";
201
+ break;
202
+ } else {
203
+ $_SESSION[$value] = filter_input(INPUT_POST, $value);
204
+ }
205
+ }
206
+ } else {
207
+ $state = "";
208
+ foreach (["name", "gender", "age", "message"] as $value) {
209
+ $$value = filter_input(INPUT_POST, $value);
210
+ }
211
+ }
212
+ } else if (filter_input(INPUT_POST, "confirm")) {
213
+ if (checkToken(filter_input(INPUT_POST, "token"))) {
214
+ $state = "confirm";
215
+ unset($_SESSION["token"]);
216
+ foreach (["name", "gender", "age", "message"] as $value) {
217
+ if (empty(filter_input(INPUT_POST, $value))) {
218
+ $errorm = "未入力箇所があります。";
219
+ $state = "";
220
+ break;
221
+ } else {
222
+ if ((!isset($_SESSION[$value])) || $_SESSION[$value] !== filter_input(INPUT_POST, $value)) {
223
+ $state = "";
224
+ }
225
+ }
226
+ }
227
+ } else {
228
+ $state = "";
229
+ }
230
+ //送られてきた内容の保存などの処理は省略。
231
+ }
232
+ ?>
233
+ <!DOCTYPE html>
234
+ <html lang="ja">
235
+ <head>
236
+ <meta charset="utf-8">
237
+ <title>タイトル</title>
238
+ <style type="text/css">
239
+ * {
240
+ margin: 0;
241
+ padding: 0;
242
+ }
243
+
244
+ label {
245
+ display: block;
246
+ }
247
+ </style>
248
+ </head>
249
+ <body>
250
+ <?php if (!empty($errorm)): ?>
251
+ <strong><?= $errorm ?></strong>
252
+ <?php endif; ?>
253
+ <?php if ($state === "submit"): ?>
254
+ <form action="" method="post">
255
+ <ul>
256
+ <li><?= h($name) ?>:<?= h($_SESSION["name"]) ?></li>
257
+ <li><?= h($gender) ?>:<?= h($_SESSION["gender"]) ?></li>
258
+ <li><?= h($age) ?>代:<?= h($_SESSION["age"]) ?></li>
259
+ <li><?= h($message) ?>:<?= h($_SESSION["message"]) ?></li>
260
+ </ul>
261
+ <input type="hidden" name="name" value="<?= h($_SESSION["name"]) ?>">
262
+ <input type="hidden" name="gender" value="<?= h($_SESSION["gender"]) ?>">
263
+ <input type="hidden" name="age" value="<?= h($_SESSION["age"]) ?>">
264
+ <input type="hidden" name="message" value="<?= h($_SESSION["message"]) ?>">
265
+ <input type="hidden" name="token" value="<?= h(getToken()) ?>">
266
+ <input type="submit" name="confirm">
267
+ </form>
268
+ <?php elseif ($state === "confirm"): ?>
269
+ <p>送信完了。</p>
270
+ <?php else: ?>
271
+ <form action="" method="post">
272
+ <label>お名前:
273
+ <input type="text" name="name" value="<?= h($name) ?>">
274
+ </label>
275
+ <span>性別</span>
276
+ <label>男性:
277
+ <input type="radio" name="gender" value="男性" <?php if ($gender === "男性") echo "checked"; ?>>
278
+ </label>
279
+ <label>女性:
280
+ <input type="radio" name="gender" value="女性" <?php if ($gender === "女性") echo "checked"; ?>>
281
+ </label>
282
+ <label>その他:
283
+ <input type="radio" name="gender" value="その他" <?php if ($gender === "その他") echo "checked"; ?>>
284
+ </label>
285
+ <label>年齢:
286
+ <select name="age"><?= $age ?>
287
+ <?php foreach (["10", "20", "30", "40", "50", "60"] as $value): ?>
288
+ <?php if ($age === $value): ?>
289
+ <?php if ($value === "10"): ?>
290
+ <option value="<?= $value ?>" selected><?= $value ?>代未満</option>
291
+ <?php elseif ($value === "60"): ?>
292
+ <option value="<?= $value ?>" selected><?= $value ?>代以上</option>
293
+ <?php else: ?>
294
+ <option value="<?= $value ?>" selected><?= $value ?>代</option>
295
+ <?php endif; ?>
296
+ <?php else: ?>
297
+ <?php if ($value === "10"): ?>
298
+ <option value="<?= $value ?>"><?= $value ?>代未満</option>
299
+ <?php elseif ($value === "60"): ?>
300
+ <option value="<?= $value ?>"><?= $value ?>代以上</option>
301
+ <?php else: ?>
302
+ <option value="<?= $value ?>"><?= $value ?>代</option>
303
+ <?php endif; ?>
304
+ <?php endif; ?>
305
+ <?php endforeach; ?>
306
+ </select>
307
+ </label>
308
+ <label>メッセージ(お問い合わせ内容):
309
+ <textarea name="message" rows="5" cols="50"><?= h($message) ?></textarea>
310
+ </label>
311
+ <input type="hidden" name="token" value="<?= h(getToken()) ?>">
312
+ <input type="submit" name="submit">
313
+ </form>
314
+ <?php endif; ?>
315
+ </body>
316
+ </html>
151
317
  ```