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

回答編集履歴

1

見直し

2019/09/10 00:52

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,81 @@
1
- foreach閉じてない
1
+ foreach閉じてない
2
+
3
+ 【追記】
4
+ 私のやった確認方法を添えておきます。
5
+ まず、3v4lを開きます。
6
+ https://3v4l.org/
7
+ オンラインのphp実行環境です。
8
+ ここではブロック要素の{~}の対が分かる表示機能があります。
9
+ それを確認しながら、提示のソースをインデントしていくと、
10
+ 後半のforeachループの終わりがわからないようになっています。
11
+
12
+ ```php
13
+ <?php
14
+
15
+ $list = array(
16
+ array('to'=>'46.txt', 'from'=>'23.txt', 'name'=>'inp_01', 'disp'=>'クーピー', 'qty'=>0),
17
+ );
18
+ // 取得した値を保管する変数を初期化
19
+ $values = array(); // これ追加します
20
+ foreach($list as $key=>$item) {
21
+ // オプションを指定すれば入力範囲の制限も可能
22
+ $options=array('options'=>array('min_range'=>0, 'max_range'=>9));
23
+ // 制限範囲内の整数を取得する
24
+ $value = filter_input(INPUT_POST, $item['name'], FILTER_VALIDATE_INT, $options);
25
+ if (($value === NULL) or ($value === FALSE)) {
26
+ // 入力欄が無かった場合、
27
+ // 数値でなかった場合、制限範囲外の場合は以降をスキップ
28
+ continue;
29
+ }
30
+ // スキップされていない=数値が入力された
31
+ // $item や $value を使って $msg を生成する
32
+ // $item や $value を使ってファイルに書き出す
33
+ }
34
+ // スキップされていない=数値が入力された
35
+ $values[$key] = $value; // これを追加します
36
+ // $field を生成する
37
+ $field = '';
38
+ foreach ($list as $key=>$item) {
39
+ if ($item['qty'] == 0) {
40
+ // 不要な入力欄を作らない為にスキップ
41
+ continue;
42
+ }
43
+ $field .= <<<HTML
44
+ <div class="field">
45
+ <div class="item">
46
+ <span class="name">{$item['disp']}</span>:<span class="number">{$item['qty']}</span>
47
+ </div>
48
+ <div class="inputField">
49
+ <input type="text" name="{$item['name']}" value="{$values[$key]}">
50
+ </div>
51
+ HTML;
52
+ // ここで htmlspecialchars() を使っていないのは
53
+ // 自分で設定した値、及びフィルターを通して
54
+ // 整数である事が確定済みで、無害であると判断したため
55
+ // 最初に「数値である事を」と書いたのはその為
56
+ ?>
57
+ <!DOCTYPE html>
58
+ <html lang="ja">
59
+ <head>
60
+ <meta charset="UTF-8">
61
+ <title>必要な物を</title>
62
+ </head>
63
+ <body>
64
+ <?= count($msg) > 0 ? implode('', $msg) . "備品のナンバーを書き込みました。 <hr>"
65
+ '' ?>
66
+ <?=$msg;?>
67
+ <div class="form">
68
+ <form action="number.php" method="post">
69
+ <?=$filed:?>
70
+ <input type="submit" name="btnSubmit" value="送信">
71
+ </form>
72
+ </div>
73
+ </body>
74
+ </html>
75
+ ```
76
+ それだけでなく、`<?=$filed:?>`のコロンも文法エラーを引き起こすでしょうし、
77
+ ```
78
+ <?= count($msg) > 0 ? implode('', $msg) . "備品のナンバーを書き込みました。 <hr>"
79
+ '' ?>
80
+ ```
81
+ で改行を挟んでいる箇所が文字列の連結演算子も置かないために文法エラーを引き起こすだろうなと。