質問編集履歴

2

database2.phpを修正しました。

2019/07/11 06:26

投稿

kappaTKO
kappaTKO

スコア37

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,21 @@
88
88
 
89
89
  <?php
90
90
 
91
-
91
+ <!DOCTYPE html>
92
+
93
+ <html>
94
+
95
+ <head>
96
+
97
+ <meta charset="utf-8" />
98
+
99
+ </head>
100
+
101
+ <body>
102
+
103
+ <?php
104
+
105
+
92
106
 
93
107
  // エラー表示なし
94
108
 
@@ -98,35 +112,17 @@
98
112
 
99
113
  ini_set('display_errors',1);
100
114
 
101
-
115
+
102
116
 
103
117
  header("Content-type: text/html; charset=utf-8");
104
118
 
105
119
 
106
120
 
107
- // DB情報
108
-
109
- define('DB_HOST', 'localhost');
110
-
111
- define('DB_NAME', 'db_boy');
112
-
113
- define('DB_USER', 'boy');
114
-
115
- define('DB_PASSWORD', 'boy1234');
116
-
117
-
118
-
119
- // 文字化け対策
120
-
121
- $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
122
-
123
-
124
-
125
121
  // PHPのエラーを表示するように設定
126
122
 
127
123
  error_reporting(E_ALL & ~E_NOTICE);
128
124
 
129
-
125
+
130
126
 
131
127
  // ポストにデータがあるかどうか
132
128
 
@@ -136,41 +132,103 @@
136
132
 
137
133
  }else{
138
134
 
139
- // 名前と年齢入力判定
135
+ // 名前入力チェック
140
-
141
- if (!isset($_POST['yourname'], $_POST['yourold']){
136
+
142
-
143
- // ポストのデータを変数にセット
144
-
145
- $name = $_POST['yourname'];
137
+ if (isset($_POST["yourname"])) {
138
+
146
-
139
+ $name=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]);
140
+
141
+
142
+
143
+ }
144
+
147
- $old = $_POST['yourold'];
145
+ if (is_null($name)) {
146
+
147
+
148
148
 
149
149
  }else {
150
150
 
151
- echo "名前・年齢が入力されていません。";
151
+
152
-
152
+
153
- }
153
+ }
154
+
155
+
156
+
154
-
157
+ // 年齢入力チェック
158
+
155
-
159
+ if (isset($_POST["yourold"])) {
160
+
161
+ $old=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT);
162
+
163
+ }
164
+
165
+ if (is_null($old)) {
166
+
167
+
168
+
169
+ }else {
170
+
171
+
172
+
173
+ }
174
+
175
+
176
+
177
+ //var_dump($old);
178
+
179
+
156
180
 
157
181
  try{
158
182
 
183
+ // DB情報
184
+
185
+ $host='localhost';
186
+
187
+ $db='db_boy';
188
+
189
+ $user='boy';
190
+
191
+ $pass='boy1234';
192
+
193
+
194
+
195
+ // インプット値
196
+
197
+ $i_user = (string)filter_input(INPUT_POST, $name);
198
+
199
+ $i_pass = (string)filter_input(INPUT_POST, $old);
200
+
201
+
202
+
203
+ // charsetを指定
204
+
205
+ $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
206
+
207
+
208
+
159
- // データベースに接続
209
+ // DBに接続
160
-
210
+
161
- $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
211
+ $pdo=new PDO("mysql: host=$host; dbname=$db", $user, $pass, $options);
212
+
162
-
213
+ // PDOの属性:例外を投げる
214
+
163
-
215
+ $pdo -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
216
+
217
+ // PDOの属性:プリペアドステートメントのエミュレーションを無効
218
+
219
+ $pdo -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false);
220
+
221
+
164
222
 
165
223
  // 接続確認
166
224
 
167
- if ($PDO) {
225
+ if ($pdo) {
168
226
 
169
227
  //echo "データベースに接続しています"
170
228
 
171
229
  } else {
172
230
 
173
- "データベースに接続できません"
231
+ echo "データベースに接続できません";
174
232
 
175
233
  }
176
234
 
@@ -178,45 +236,51 @@
178
236
 
179
237
  // SQLの準備して、それを$stmt変数に定義
180
238
 
239
+ // 名前付きのプレースホルダにパラメータをバインドするには、
240
+
241
+ // プレースホルダの名前はコロン付きにすること
242
+
181
- $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (?,?)");
243
+ $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (:name,:old)");
182
-
183
-
244
+
245
+
184
246
 
185
247
  // トランザクション開始
186
248
 
187
- $stmt->beginTransaction();
249
+ $pdo->beginTransaction();
188
-
189
-
250
+
251
+
190
252
 
191
253
  // プレースホルダへ実際の値を設定する
192
254
 
193
- $stmt->bindParam('name', $name);
255
+ $stmt->bindParam(':name', $name);
194
-
256
+
195
- $stmt->bindParam('old', $old);
257
+ $stmt->bindParam(':old', $old);
196
-
197
-
258
+
259
+
198
260
 
199
261
  // SQL実行
200
262
 
201
- $stmt->execute(array($name, $old));
263
+ $stmt->execute();
202
-
203
-
264
+
265
+
204
266
 
205
267
  // コミット
206
268
 
207
- $stmt->commit();
269
+ $pdo->commit();
208
-
209
-
270
+
271
+
210
272
 
211
273
  echo "登録完了";
212
274
 
213
-
275
+
214
276
 
215
277
  // データベース切断
216
278
 
279
+ $stmt = null;
280
+
217
- $pdo->close();
281
+ $pdo = null;
218
-
219
-
282
+
283
+
220
284
 
221
285
  } catch (Exception $e) {
222
286
 
@@ -228,10 +292,20 @@
228
292
 
229
293
  }
230
294
 
295
+
296
+
231
297
  }
232
298
 
299
+
300
+
233
301
  ?>
234
302
 
303
+ </body>
304
+
305
+ </html>
306
+
307
+
308
+
235
309
  ```
236
310
 
237
311
  DB操作(値は固定):database3.php

1

database1.htmlとdatabase2.phpを修正しました。

2019/07/11 06:26

投稿

kappaTKO
kappaTKO

スコア37

test CHANGED
File without changes
test CHANGED
@@ -46,6 +46,20 @@
46
46
 
47
47
  <body>
48
48
 
49
+
50
+
51
+ <?php
52
+
53
+ $username=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]);
54
+
55
+ $yourold=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT);
56
+
57
+ var_dump($username,$yourold);
58
+
59
+ ?>
60
+
61
+
62
+
49
63
  <h1>フォーム画面</h1>
50
64
 
51
65
 
@@ -74,11 +88,21 @@
74
88
 
75
89
  <?php
76
90
 
91
+
92
+
77
-
93
+ // エラー表示なし
94
+
95
+ //ini_set('display_errors',0);
96
+
97
+ // エラー表示あり
98
+
99
+ ini_set('display_errors',1);
100
+
101
+
78
102
 
79
103
  header("Content-type: text/html; charset=utf-8");
80
104
 
81
-
105
+
82
106
 
83
107
  // DB情報
84
108
 
@@ -88,9 +112,9 @@
88
112
 
89
113
  define('DB_USER', 'boy');
90
114
 
91
- define('DB_PASSWORD', 'boy1234s');
115
+ define('DB_PASSWORD', 'boy1234');
92
-
93
-
116
+
117
+
94
118
 
95
119
  // 文字化け対策
96
120
 
@@ -102,9 +126,9 @@
102
126
 
103
127
  error_reporting(E_ALL & ~E_NOTICE);
104
128
 
105
-
106
-
129
+
130
+
107
- // 処理
131
+ // ポストにデータがあるかどうか
108
132
 
109
133
  if(empty($_POST)) {
110
134
 
@@ -112,110 +136,100 @@
112
136
 
113
137
  }else{
114
138
 
115
- // 名前入力判定
139
+ // 名前と年齢入力判定
116
-
140
+
117
- if (!isset($_POST['yourname']) || $_POST['yourname'] === "" !isset($_POST['yourold']) || $_POST['yourold'] === ""){
141
+ if (!isset($_POST['yourname'], $_POST['yourold']){
142
+
143
+ // ポストのデータを変数にセット
144
+
145
+ $name = $_POST['yourname'];
146
+
147
+ $old = $_POST['yourold'];
148
+
149
+ }else {
118
150
 
119
151
  echo "名前・年齢が入力されていません。";
120
152
 
153
+ }
154
+
155
+
156
+
121
- }else{
157
+ try{
122
-
123
-
124
-
158
+
125
- // データベース接続
159
+ // データベース接続
126
-
127
- try {
160
+
128
-
129
- $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
161
+ $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
130
-
162
+
163
+
164
+
131
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
165
+ // 接続確認
132
-
166
+
133
- } catch (PDOException $e) {
167
+ if ($PDO) {
168
+
134
-
169
+ //echo "データベースに接続しています"
170
+
171
+ } else {
172
+
135
- echo $e->getMessage();
173
+ "データベースに接続できません"
136
-
137
- exit;
138
174
 
139
175
  }
140
176
 
177
+
178
+
141
-
179
+ // SQLの準備して、それを$stmt変数に定義
180
+
142
-
181
+ $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (?,?)");
182
+
183
+
184
+
143
- // DB接続
185
+ // トランザクション開始
144
-
145
- $d=new pdo("mysql: host=$host; dbname=$db", $user, $pass)or die("接続失敗");
186
+
146
-
147
- $d -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
148
-
149
- $d -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false);
150
-
151
-
152
-
153
- print "接続成功<BR>";
187
+ $stmt->beginTransaction();
154
-
155
-
156
-
188
+
189
+
190
+
157
- //プレースホルダへ実際の値を設定する
191
+ // プレースホルダへ実際の値を設定する
158
-
192
+
159
- $stmt->bind_param('1', $yourname);
193
+ $stmt->bindParam('name', $name);
160
-
194
+
161
- $stmt->bind_param('2', $yourold);
195
+ $stmt->bindParam('old', $old);
162
-
163
- $yourname = $_POST['yourname'];
196
+
164
-
165
- &yourold = $_POST['yourold']
197
+
166
-
167
-
168
-
169
- //プリペアドステートメント
170
-
171
- $stmt = $mysqli->prepare("INSERT INTO db_boy (name,old) VALUES (?,?)");
172
-
173
-
174
-
175
- $i_name = (string)filter_input(INPUT_POST, $name);
176
-
177
- $i_old = (string)filter_input(INPUT_POST, $old);
178
-
179
-
180
-
181
- //$stmt->bindValue(1, $i_name);
182
-
183
- //$stmt->bindValue(2, $i_old);
184
-
185
-
186
198
 
187
199
  // SQL実行
188
200
 
201
+ $stmt->execute(array($name, $old));
202
+
203
+
204
+
205
+ // コミット
206
+
189
- if($stmt->execute()){
207
+ $stmt->commit();
190
-
191
- echo htmlspecialchars($yourname, ENT_QUOTES, 'UTF-8')."さんで登録いたしました。";
208
+
192
-
193
- }else{
209
+
194
-
210
+
195
- echo $stmt->errno . $stmt->error;
211
+ echo "登録完了";
196
-
197
- }
212
+
198
-
199
-
200
-
213
+
214
+
201
- //ステートメント切断
215
+ // データベース切断
202
-
216
+
203
- $stmt->close();
217
+ $pdo->close();
218
+
219
+
220
+
204
-
221
+ } catch (Exception $e) {
222
+
205
-
223
+ $stmt->rollBack();
224
+
225
+ echo "失敗しました。" . $e->getMessage();
226
+
227
+ exit;
206
228
 
207
229
  }
208
230
 
209
231
  }
210
232
 
211
-
212
-
213
- // データベース切断
214
-
215
- $mysqli->close();
216
-
217
-
218
-
219
233
  ?>
220
234
 
221
235
  ```