質問編集履歴

4

更新内容:whileをforeachに変更、別のエラー発生内容

2021/01/16 13:30

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- ・smartyを使ってDBから取得したデータのみをwhile文でtable表示。
3
+ ・smartyを使ってDBから取得したデータのみをforeachでtable表示。
4
4
 
5
5
 
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
- ・table表示でエラーが出てしまう
9
+ ・table表示で、各テーブルデータごとにエラー発生
10
-
11
- ・永遠とtableが表示されてしまう。
12
-
13
- →データ取得、while文でのデータ表示コードに問題ありと思われます。
14
10
 
15
11
 
16
12
 
@@ -18,19 +14,37 @@
18
14
 
19
15
  ```
20
16
 
21
- Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/smarty_test/templates_c/774497ade8290083b30fd348f083be01c3fa9f7e_2.file.list.tpl.php on line 72
17
+ Warning: Illegal string offset '各カラム名' in /Applications/MAMP/htdocs/smarty_test/templates_c/774497ade8290083b30fd348f083be01c3fa9f7e_2.file.list.tpl.php on line 76、78、80、82、84
22
18
 
23
19
  ```
24
20
 
25
- ブール型の値の配列オフセットにアクセスしようしていと出るエラーのようです。
21
+ 指定された変数が配列ではなく文字列だ発生するエラーのようです。
26
22
 
27
23
 
28
24
 
29
- エラーで指摘されたコードは下記の通りです。
25
+ エラーで指摘されたコード
30
26
 
31
27
  ```
32
28
 
29
+ <td><?php echo htmlspecialchars(smarty_modifier_date_format($_smarty_tpl->tpl_vars['s']->value['purchase_date'],'%Y-%m-%d'), ENT_QUOTES, 'UTF-8');?>
30
+
31
+ </td>
32
+
33
+ <td><?php echo htmlspecialchars($_smarty_tpl->tpl_vars['s']->value['stock_name'], ENT_QUOTES, 'UTF-8');?>
34
+
35
+ </td>
36
+
37
+ <td>¥<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['s']->value['price'], ENT_QUOTES, 'UTF-8');?>
38
+
39
+ </td>
40
+
41
+ <td><?php echo htmlspecialchars($_smarty_tpl->tpl_vars['s']->value['number'], ENT_QUOTES, 'UTF-8');?>
42
+
43
+ </td>
44
+
33
- <td><?php echo htmlspecialchars(smarty_modifier_date_format($_smarty_tpl->tpl_vars['stock']->value[1],"%Y%m%d日"), ENT_QUOTES, 'UTF-8');?>
45
+ <td><?php echo htmlspecialchars(smarty_modifier_date_format($_smarty_tpl->tpl_vars['s']->value['deadline'],'%Y-%m-%d'), ENT_QUOTES, 'UTF-8');?>
46
+
47
+ </td>
34
48
 
35
49
  ```
36
50
 
@@ -45,12 +59,6 @@
45
59
  ```php
46
60
 
47
61
  <?php
48
-
49
- //require_once('../login_certification2/certification2.php');
50
-
51
- //certification();
52
-
53
-
54
62
 
55
63
  require_once('../db_connect2/db_connect2.php');
56
64
 
@@ -76,6 +84,18 @@
76
84
 
77
85
 
78
86
 
87
+ $rec = '';
88
+
89
+ if(!is_array($rec))
90
+
91
+ {
92
+
93
+ $rec = array();
94
+
95
+ }
96
+
97
+
98
+
79
99
  try
80
100
 
81
101
  {
@@ -85,6 +105,8 @@
85
105
  $stmt = connect()->prepare($sql);
86
106
 
87
107
  $stmt->execute();
108
+
109
+ $rec = $stmt->fetch(PDO::FETCH_ASSOC);
88
110
 
89
111
  $dbh = null;
90
112
 
@@ -104,29 +126,9 @@
104
126
 
105
127
 
106
128
 
107
- while(true)
108
-
109
- {
110
-
111
- $rec = $stmt->fetch(PDO::FETCH_ASSOC);
112
-
113
- if($rec == false)
114
-
115
- {
116
-
117
- break;
118
-
119
- }
120
-
121
- }
122
-
123
-
124
-
125
129
  $smarty->assign('stock', $rec);
126
130
 
127
131
  $smarty->display('list.tpl');
128
-
129
-
130
132
 
131
133
  ?>
132
134
 
@@ -138,69 +140,11 @@
138
140
 
139
141
  ```tpl
140
142
 
141
- <!DOCTYPE html>
142
-
143
- <html lang="ja">
144
-
145
- <head>
146
-
147
- <meta charset="UTF-8">
148
-
149
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
150
-
151
- <link rel = "stylesheet" href = "css/common2.css">
152
-
153
- <link rel = "stylesheet" href = "css/list2.css">
154
-
155
- <link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.0.4/css/all.css">
156
-
157
- <script src = "https://www.w3schools.com/lib/w3.js"></script>
158
-
159
- <title>在庫一覧</title>
160
-
161
- </head>
162
-
163
- <body>
164
-
165
-
166
-
167
- <div id = "menu-list">
168
-
169
-  <ul>
170
-
171
-  <li><a href = "../user/user_list.php">アカウント編集</a></li>
172
-
173
-  <li><a href = "../user_login/user_logout_check.php">ログアウト</a></li>
174
-
175
-  </ul>
176
-
177
- </div>
178
-
179
-
180
-
181
- <form method = "post" action = "stock_branch.php">
182
-
183
- <input type = "submit" name = "disp" value = "参照">
184
-
185
- <input type = "submit" name = "edit" value = "修正">
186
-
187
- <input type = "submit" name = "delete" value = "削除">
188
-
189
- <input type = "submit" name = "add" value = "追加">
190
-
191
- <input type = "text" name = "search_name" class = "search">
192
-
193
- <input type = "submit" value = "検索">
194
-
195
- <br>
196
-
197
-
198
-
199
- <table class = "sorttbl" id = "myTable" border = "2">
143
+ <table class = "sorttbl" id = "myTable" border = "2">
200
144
 
201
145
  <tr>
202
146
 
203
- <th class = "radio-th"></th>
147
+ <th class = "radio-th"></th>
204
148
 
205
149
  <th class = "purchase_date-th">購入日</th>
206
150
 
@@ -216,47 +160,29 @@
216
160
 
217
161
 
218
162
 
219
- {while $stock eq false}
163
+ {foreach $stock as $s}
220
164
 
221
165
  <tr class = "item">
222
166
 
223
- <td><input type = "radio" name = "stockid" value = "{$stock[0]}"></td>
167
+ <td><input type = "radio" name = "stockid" value = "{$s.stock_id}"></td>
224
168
 
225
- <td>{$stock[1]|date_format:"%Y%m%d日"}</td>
169
+ <td>{$s.purchase_date|date_format:'%Y-%m-%d'}</td>
226
170
 
227
- <td>{$stock[3]}</td>
171
+ <td>{$s.stock_name}</td>
228
172
 
229
- <td>¥{$stock[4]}</td>
173
+ <td>¥{$s.price}</td>
230
174
 
231
- <td>{$stock[5]}</td>
175
+ <td>{$s.number}</td>
232
176
 
233
- <td>{$stock[2]|date_format:"%Y%m%d日"}</td>
177
+ <td>{$s.deadline|date_format:'%Y-%m-%d'}</td>
234
178
 
235
179
  </tr>
236
180
 
237
- {/while}
181
+ {/foreach}
238
182
 
239
183
  </table>
240
184
 
241
185
 
242
-
243
-
244
-
245
- <input type = "submit" name = "disp" value = "参照">
246
-
247
- <input type = "submit" name = "edit" value = "修正">
248
-
249
- <input type = "submit" name = "delete" value = "削除">
250
-
251
- <input type = "submit" name = "add" value = "追加">
252
-
253
- </form>
254
-
255
-
256
-
257
- </body>
258
-
259
- </html>
260
186
 
261
187
  ```
262
188
 
@@ -264,9 +190,9 @@
264
190
 
265
191
  ### 試したこと
266
192
 
267
- smartyPHPコードの見直
193
+ 下記のサイトを参考に配列であることを確認てから値を代入
268
194
 
269
- →恐らくコードの書き方に問題があるため、気になる点があればご指摘頂きたいです。
195
+ https://scrapbox.io/namaozi/PHP7%E3%81%A7Illegal_string_offset%E3%81%8C%E5%87%BA%E3%82%8B
270
196
 
271
197
 
272
198
 

3

更新内容:エラーで指摘されたコードの追記

2021/01/16 13:29

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -26,6 +26,16 @@
26
26
 
27
27
 
28
28
 
29
+ エラーで指摘されたコードは下記の通りです。
30
+
31
+ ```
32
+
33
+ <td><?php echo htmlspecialchars(smarty_modifier_date_format($_smarty_tpl->tpl_vars['stock']->value[1],"%Y年 %m月 %d日"), ENT_QUOTES, 'UTF-8');?>
34
+
35
+ ```
36
+
37
+
38
+
29
39
  ### 該当のソースコード
30
40
 
31
41
 

2

更新内容:エラー内容追記

2021/01/14 06:52

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  ```
24
24
 
25
+ ブール型の値の配列オフセットにアクセスしようとしていると出るエラーのようです。
26
+
25
27
 
26
28
 
27
29
  ### 該当のソースコード

1

白紙状態→永遠とエラー文の出たtableが表示されるようになった。

2021/01/14 06:28

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,26 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- ・smartyを使ってDBから取得したデータをwhile文でtable表示。
3
+ ・smartyを使ってDBから取得したデータのみをwhile文でtable表示。
4
4
 
5
5
 
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
- ブラウザ表示が白紙になってしまう。
9
+ ・table表示でエラーてしまう。
10
+
10
-
11
+ ・永遠とtableが表示されてしまう。
12
+
11
- サイトをリロードするアクセスでの時間が遅い点も気になる
13
+ →デタ取得、while文でのデータ表示コーに問題あり思われ
12
-
14
+
15
+
16
+
13
- (他のsmartyを使っていない.phpファイルは正常。)
17
+ エラーメッセージ
18
+
19
+ ```
20
+
21
+ Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/smarty_test/templates_c/774497ade8290083b30fd348f083be01c3fa9f7e_2.file.list.tpl.php on line 72
22
+
23
+ ```
14
24
 
15
25
 
16
26
 
@@ -242,8 +252,6 @@
242
252
 
243
253
  ### 試したこと
244
254
 
245
- ・現在のディレクトリ構成でブラウザ表示されるか確認。(ブラウザ表示可能)
246
-
247
255
  ・smarty、PHPコードの見直し。
248
256
 
249
257
  →恐らくコードの書き方に問題があるため、気になる点があればご指摘頂きたいです。