質問編集履歴

3

誤字修正です

2021/06/23 04:08

投稿

mimi_01
mimi_01

スコア1

test CHANGED
File without changes
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
  //プレースホルダへ実際の値を設定する
102
102
 
103
- $statement->bindValue(':title', $like_word PDO::PARAM_STR);
103
+ $statement->bindValue(':name', $like_word PDO::PARAM_STR);
104
104
 
105
105
 
106
106
 

2

前回から自力でなんとか進んだためDB連携までできました。

2021/06/23 04:08

投稿

mimi_01
mimi_01

スコア1

test CHANGED
@@ -1 +1 @@
1
- 【php】switch文を使った条件分岐の管理方法と作り込まれた結果の表示方法
1
+ 【php】データベース内検索から条件にあった結果を返す方法
test CHANGED
@@ -1,8 +1,12 @@
1
+ ※以前の質問からすこし進んだため修正しました。
2
+
3
+
4
+
1
5
  ### 前提・実現したいこと
2
6
 
3
7
 
4
8
 
5
- Wordpressでオリジナルフォームを設置、『特定の文字列』が送信され場合にイラストやリンクを返す占いのようなコンテンツを作りたいです。
9
+ 検索したとき「付いているタグ」応じてイラストやリンクを返すコンテンツを作りたいです。
6
10
 
7
11
 
8
12
 
@@ -12,63 +16,225 @@
12
16
 
13
17
  ```HTML
14
18
 
15
- <div id="Form">
16
-
17
- <span id="FormMain">
18
-
19
- <form id="Form" method="POST" action="action.php" autocomplete="off">
19
+ <form id="MyForm" method="POST" action="action.php" autocomplete="off">
20
+
20
-
21
+ <div class="mainform">
22
+
21
- <input id="Input" name="name" maxlength="100" class="form-control form-control-lg mb-2" type="text" placeholder="好きな言葉を入力してください" value="">
23
+ <input id="input" name="word" maxlength="100" class="form-control form-control-lg mb-2" type="text" placeholder="ここに入力してください" value="">
24
+
22
-
25
+ </div>
26
+
23
- <input id="ButtonSubmit" type="submit" class="btn btn-primary btn-block btn-lg shindanButton" value="診断する">
27
+ <input id="submit" type="submit" value="診断する">
24
28
 
25
29
  </form>
26
30
 
27
- </span>
28
-
29
- </div>
30
-
31
- ```
31
+ ```
32
-
33
-
34
-
32
+
33
+
34
+
35
- 返答としてaction.phpを以下のように作りました。(例)
35
+ データベースはMySQLで以下のように作りました。
36
+
37
+
38
+
36
-
39
+ id(番号)、name(テキスト)、category(テキスト)、tag(番号 1-10番まで)
40
+
41
+
42
+
37
-
43
+ 入力されたword(検索ワード)でDB内のname(テキスト)が見つかった時にcategoryの文字とtagに応じたイラスト結果を返すようにしたいです。
44
+
45
+
46
+
38
-
47
+ こちらのファイルがaction.phpとなります。
48
+
49
+
50
+
39
- ```php
51
+ ```
40
52
 
41
53
  <?php
42
54
 
55
+ header("Content-type: text/html; charset=utf-8");
56
+
57
+
58
+
59
+ if(empty($_POST)) {
60
+
61
+ header("Location: xxx");
62
+
63
+ exit();
64
+
65
+ }else{
66
+
67
+ if (!isset($_POST['word']) || $_POST['word'] === "" ){
68
+
43
- switch ($_REQUEST['name']) {
69
+ $errors['name'] = "入力されていません。";
44
-
45
- case '青':
70
+
46
-
47
- echo 'ルピナス';
48
-
49
- break;
50
-
51
- case 'オレンジ':
52
-
53
- echo 'アルストロメリア';
54
-
55
- break;
56
-
57
- case 'ピンク':
58
-
59
- echo 'アザレア';
60
-
61
- break;
62
-
63
- }
71
+ }
72
+
64
-
73
+ }
74
+
75
+
76
+
77
+ if(count($errors) === 0){
78
+
79
+ $dsn = 'mysql:host=localhost;dbname=data1;charset=utf8';
80
+
65
- echo 'がおすすめです。';
81
+ $user = 'root';
82
+
83
+ $password = 'root';
84
+
85
+
86
+
87
+ try{
88
+
89
+ $dbh = new PDO($dsn, $user, $password);
90
+
91
+ $statement = $dbh->prepare("SELECT * FROM data1 WHERE name LIKE (:name) ");
92
+
93
+
94
+
95
+ if($statement){
96
+
97
+ $word = $_POST['word'];
98
+
99
+ $like_word= "%".$word."%";
100
+
101
+ //プレースホルダへ実際の値を設定する
102
+
103
+ $statement->bindValue(':title', $like_word PDO::PARAM_STR);
104
+
105
+
106
+
107
+ if($statement->execute()){
108
+
109
+ //レコード件数取得
110
+
111
+ $row_count = $statement->rowCount();
112
+
113
+
114
+
115
+ while($row = $statement->fetch()){
116
+
117
+ $rows[] = $row;
118
+
119
+ }
120
+
121
+
122
+
123
+ }else{
124
+
125
+ $errors['error'] = "検索失敗しました。";
126
+
127
+ }
128
+
129
+
130
+
131
+ //データベース接続切断
132
+
133
+ $dbh = null;
134
+
135
+ }
136
+
137
+
138
+
139
+ }catch (PDOException $e){
140
+
141
+ print('Error:'.$e->getMessage());
142
+
143
+ $errors['error'] = "データベース接続失敗しました。";
144
+
145
+ }
146
+
147
+ }
148
+
149
+
66
150
 
67
151
  ?>
68
152
 
153
+
154
+
155
+ <!DOCTYPE html>
156
+
157
+ <html>
158
+
159
+ <head>
160
+
161
+ <title>結果</title>
162
+
163
+ <meta charset="utf-8">
164
+
165
+ </head>
166
+
167
+ <body>
168
+
169
+
170
+
171
+ <?php if (count($errors) === 0): ?>
172
+
173
+
174
+
175
+ <p><?=htmlspecialchars($word, ENT_QUOTES, 'UTF-8')."で検索しました。"?></p>
176
+
177
+ <p><?=$row_count?>件です。</p>
178
+
179
+
180
+
181
+ <?php
182
+
183
+ foreach($rows as $row){
184
+
185
+ ?>
186
+
187
+ <table border='1'>
188
+
189
+ <tr>
190
+
191
+ <td>「<?=htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8')."」は"?></td>
192
+
193
+ </tr>
194
+
195
+ <tr>
196
+
197
+ <td><?=htmlspecialchars($row['category'],ENT_QUOTES,'UTF-8')."</br>がおすすめです"?></td>
198
+
199
+ </tr>
200
+
201
+ <?php
202
+
203
+ }
204
+
205
+ ?>
206
+
207
+
208
+
209
+ <?php elseif(count($errors) > 0): ?>
210
+
211
+ <?php
212
+
213
+ foreach($errors as $value){
214
+
215
+ echo "<p>".$value."</p>";
216
+
217
+ }
218
+
219
+ ?>
220
+
221
+ <?php endif; ?>
222
+
223
+
224
+
225
+ </body>
226
+
227
+ </html>
228
+
69
- ```
229
+ ```
230
+
231
+
232
+
70
-
233
+ この状態で、今データベースに接続してカテゴリー結果を返すというところまでできています。
234
+
235
+
236
+
71
-
237
+ 参考にしたもの:https://noumenon-th.net/programming/2016/02/15/pdo_search/
72
238
 
73
239
 
74
240
 
@@ -76,57 +242,45 @@
76
242
 
77
243
 
78
244
 
79
- caseに入った文字列を1として、1の場合はechoでresult1を、case2の場合はresult2を表示したいです。
80
-
81
- caseが100件以上になるので、できればエクセルで管理してその後フォルダにアップする形にできないかと模索しています。
82
-
83
-
84
-
85
- またechoで返っくる結果に、画像やリンク、アニメーション入れたです
245
+ name から tag を引き出して結果を返すとう部分がうまくいきません
86
-
87
-
88
-
246
+
247
+
248
+
89
- ### 試したこと
249
+ 試したけど失敗したもの↓
90
-
91
-
92
-
93
- ケースを以下のように連ねればいずれかに該当した場合に結果を返せるということはわかったのですが、量が多いので別シートで管理できないかと思っています。
250
+
94
-
95
-
96
-
251
+
252
+
97
- ```
253
+ ```
98
-
254
+
99
- <?php
255
+ $tag = ["result1"=>1,"result2"=>2,"result3"=>3,"result4"=>4,"result5"=>5];
100
-
256
+
257
+
258
+
101
- switch ($_REQUEST['name']) {
259
+ if(array_key_exists("result1",$tag)){
102
-
103
- case '青':
260
+
104
-
105
- case 'スカイ':
106
-
107
- case '次縹':
108
-
109
- echo 'ルピナス';
261
+ echo $tag["result"].PHP_EOL;
110
-
111
- break;
262
+
112
-
113
- }
263
+ }
264
+
114
-
265
+ if(in_array(1,$tag)){
266
+
115
- echo 'がおすすめです。';
267
+ echo "画像".PHP_EOL;
268
+
116
-
269
+ }
270
+
271
+ if(in_array(2,$tag)){
272
+
117
- ?>
273
+ echo "画像".PHP_EOL;
274
+
118
-
275
+ }
119
-
120
-
276
+
121
- ```
277
+ ```
278
+
279
+
280
+
122
-
281
+ tag1の場合はechoでresult1を、tag2の場合はresult2を表示したいです。
123
-
124
-
282
+
125
- ### 補足情報(FW/ツルのバージョンなど)
283
+ echoで返ってくる結果はイラストやアニメョンを入れたいと考えています。
126
-
127
-
128
-
129
- 使用:Wordpress 5.7.2
130
284
 
131
285
 
132
286
 

1

すみません、codeの書き方を修正しましたm(_ _)m

2021/06/23 04:06

投稿

mimi_01
mimi_01

スコア1

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,8 @@
9
9
  フォームはHTMLで以下のように作りました。
10
10
 
11
11
 
12
+
13
+ ```HTML
12
14
 
13
15
  <div id="Form">
14
16
 
@@ -26,11 +28,15 @@
26
28
 
27
29
  </div>
28
30
 
31
+ ```
32
+
29
33
 
30
34
 
31
35
  返答としてaction.phpを以下のように作りました。(例)
32
36
 
37
+
38
+
33
- > 引用テキスト
39
+ ```php
34
40
 
35
41
  <?php
36
42
 
@@ -60,6 +66,10 @@
60
66
 
61
67
  ?>
62
68
 
69
+ ```
70
+
71
+
72
+
63
73
 
64
74
 
65
75
  ### 解決したいこと
@@ -84,6 +94,12 @@
84
94
 
85
95
 
86
96
 
97
+ ```
98
+
99
+ <?php
100
+
101
+ switch ($_REQUEST['name']) {
102
+
87
103
  case '青':
88
104
 
89
105
  case 'スカイ':
@@ -92,7 +108,17 @@
92
108
 
93
109
  echo 'ルピナス';
94
110
 
111
+ break;
95
112
 
113
+ }
114
+
115
+ echo 'がおすすめです。';
116
+
117
+ ?>
118
+
119
+
120
+
121
+ ```
96
122
 
97
123
 
98
124