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

質問編集履歴

2

database2.phpを修正しました。

2019/07/11 06:26

投稿

kappaTKO
kappaTKO

スコア37

title CHANGED
File without changes
body CHANGED
@@ -43,78 +43,115 @@
43
43
  DB操作:database2.php
44
44
  ```ここに言語を入力
45
45
  <?php
46
-
46
+ <!DOCTYPE html>
47
+ <html>
48
+ <head>
49
+ <meta charset="utf-8" />
50
+ </head>
51
+ <body>
52
+ <?php
53
+
47
54
  // エラー表示なし
48
55
  //ini_set('display_errors',0);
49
56
  // エラー表示あり
50
57
  ini_set('display_errors',1);
51
-
58
+
52
59
  header("Content-type: text/html; charset=utf-8");
53
60
 
54
- // DB情報
55
- define('DB_HOST', 'localhost');
56
- define('DB_NAME', 'db_boy');
57
- define('DB_USER', 'boy');
58
- define('DB_PASSWORD', 'boy1234');
59
-
60
- // 文字化け対策
61
- $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
62
-
63
61
  // PHPのエラーを表示するように設定
64
62
  error_reporting(E_ALL & ~E_NOTICE);
65
-
63
+
66
64
  // ポストにデータがあるかどうか
67
65
  if(empty($_POST)) {
68
66
  echo "<a href='database1.html'>database1.html</a>←こちらのページからどうぞ";
69
67
  }else{
70
- // 名前と年齢入力判定
68
+ // 名前入力チェック
71
- if (!isset($_POST['yourname'], $_POST['yourold']){
72
- // ポストのデータを変数にセット
73
- $name = $_POST['yourname'];
69
+ if (isset($_POST["yourname"])) {
70
+ $name=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]);
71
+
72
+ }
74
- $old = $_POST['yourold'];
73
+ if (is_null($name)) {
74
+
75
75
  }else {
76
- echo "名前・年齢が入力されていません。";
76
+
77
77
  }
78
+
79
+ // 年齢入力チェック
80
+ if (isset($_POST["yourold"])) {
81
+ $old=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT);
82
+ }
83
+ if (is_null($old)) {
84
+
85
+ }else {
78
86
 
87
+ }
88
+
89
+ //var_dump($old);
90
+
79
91
  try{
92
+ // DB情報
93
+ $host='localhost';
94
+ $db='db_boy';
95
+ $user='boy';
96
+ $pass='boy1234';
97
+
98
+ // インプット値
99
+ $i_user = (string)filter_input(INPUT_POST, $name);
100
+ $i_pass = (string)filter_input(INPUT_POST, $old);
101
+
102
+ // charsetを指定
103
+ $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
104
+
80
- // データベースに接続
105
+ // DBに接続
81
- $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
106
+ $pdo=new PDO("mysql: host=$host; dbname=$db", $user, $pass, $options);
82
-
107
+ // PDOの属性:例外を投げる
108
+ $pdo -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
109
+ // PDOの属性:プリペアドステートメントのエミュレーションを無効
110
+ $pdo -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false);
111
+
83
112
  // 接続確認
84
- if ($PDO) {
113
+ if ($pdo) {
85
114
  //echo "データベースに接続しています"
86
115
  } else {
87
- "データベースに接続できません"
116
+ echo "データベースに接続できません";
88
117
  }
89
118
 
90
119
  // SQLの準備して、それを$stmt変数に定義
120
+ // 名前付きのプレースホルダにパラメータをバインドするには、
121
+ // プレースホルダの名前はコロン付きにすること
91
- $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (?,?)");
122
+ $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (:name,:old)");
92
-
123
+
93
124
  // トランザクション開始
94
- $stmt->beginTransaction();
125
+ $pdo->beginTransaction();
95
-
126
+
96
127
  // プレースホルダへ実際の値を設定する
97
- $stmt->bindParam('name', $name);
128
+ $stmt->bindParam(':name', $name);
98
- $stmt->bindParam('old', $old);
129
+ $stmt->bindParam(':old', $old);
99
-
130
+
100
131
  // SQL実行
101
- $stmt->execute(array($name, $old));
132
+ $stmt->execute();
102
-
133
+
103
134
  // コミット
104
- $stmt->commit();
135
+ $pdo->commit();
105
-
136
+
106
137
  echo "登録完了";
107
-
138
+
108
139
  // データベース切断
140
+ $stmt = null;
109
- $pdo->close();
141
+ $pdo = null;
110
-
142
+
111
143
  } catch (Exception $e) {
112
144
  $stmt->rollBack();
113
145
  echo "失敗しました。" . $e->getMessage();
114
146
  exit;
115
147
  }
148
+
116
149
  }
150
+
117
151
  ?>
152
+ </body>
153
+ </html>
154
+
118
155
  ```
119
156
  DB操作(値は固定):database3.php
120
157
  ```ここに言語を入力

1

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

2019/07/11 06:26

投稿

kappaTKO
kappaTKO

スコア37

title CHANGED
File without changes
body CHANGED
@@ -22,6 +22,13 @@
22
22
  <meta charset="utf-8">
23
23
  </head>
24
24
  <body>
25
+
26
+ <?php
27
+ $username=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]);
28
+ $yourold=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT);
29
+ var_dump($username,$yourold);
30
+ ?>
31
+
25
32
  <h1>フォーム画面</h1>
26
33
 
27
34
  <form action="database2.php" method="post">
@@ -36,77 +43,77 @@
36
43
  DB操作:database2.php
37
44
  ```ここに言語を入力
38
45
  <?php
46
+
39
-
47
+ // エラー表示なし
48
+ //ini_set('display_errors',0);
49
+ // エラー表示あり
50
+ ini_set('display_errors',1);
51
+
40
52
  header("Content-type: text/html; charset=utf-8");
41
-
53
+
42
54
  // DB情報
43
55
  define('DB_HOST', 'localhost');
44
56
  define('DB_NAME', 'db_boy');
45
57
  define('DB_USER', 'boy');
46
- define('DB_PASSWORD', 'boy1234s');
58
+ define('DB_PASSWORD', 'boy1234');
47
-
59
+
48
60
  // 文字化け対策
49
61
  $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
50
62
 
51
63
  // PHPのエラーを表示するように設定
52
64
  error_reporting(E_ALL & ~E_NOTICE);
53
-
65
+
54
- // 処理
66
+ // ポストにデータがあるかどうか
55
67
  if(empty($_POST)) {
56
68
  echo "<a href='database1.html'>database1.html</a>←こちらのページからどうぞ";
57
69
  }else{
58
- // 名前入力判定
70
+ // 名前と年齢入力判定
59
- if (!isset($_POST['yourname']) || $_POST['yourname'] === "" !isset($_POST['yourold']) || $_POST['yourold'] === ""){
71
+ if (!isset($_POST['yourname'], $_POST['yourold']){
72
+ // ポストのデータを変数にセット
73
+ $name = $_POST['yourname'];
74
+ $old = $_POST['yourold'];
75
+ }else {
60
76
  echo "名前・年齢が入力されていません。";
77
+ }
78
+
61
- }else{
79
+ try{
62
-
63
- // データベース接続
80
+ // データベース接続
64
- try {
65
- $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
81
+ $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
82
+
66
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
83
+ // 接続確認
67
- } catch (PDOException $e) {
84
+ if ($PDO) {
85
+ //echo "データベースに接続しています"
86
+ } else {
68
- echo $e->getMessage();
87
+ "データベースに接続できません"
69
- exit;
70
88
  }
71
-
72
- // DB接続
73
- $d=new pdo("mysql: host=$host; dbname=$db", $user, $pass)or die("接続失敗");
74
- $d -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
75
- $d -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false);
76
89
 
90
+ // SQLの準備して、それを$stmt変数に定義
91
+ $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (?,?)");
92
+
93
+ // トランザクション開始
77
- print "接続成功<BR>";
94
+ $stmt->beginTransaction();
78
-
95
+
79
- //プレースホルダへ実際の値を設定する
96
+ // プレースホルダへ実際の値を設定する
80
- $stmt->bind_param('1', $yourname);
97
+ $stmt->bindParam('name', $name);
81
- $stmt->bind_param('2', $yourold);
98
+ $stmt->bindParam('old', $old);
82
- $yourname = $_POST['yourname'];
99
+
83
- &yourold = $_POST['yourold']
84
-
85
- //プリペアドステートメント
86
- $stmt = $mysqli->prepare("INSERT INTO db_boy (name,old) VALUES (?,?)");
87
-
88
- $i_name = (string)filter_input(INPUT_POST, $name);
89
- $i_old = (string)filter_input(INPUT_POST, $old);
90
-
91
- //$stmt->bindValue(1, $i_name);
92
- //$stmt->bindValue(2, $i_old);
93
-
94
100
  // SQL実行
95
- if($stmt->execute()){
101
+ $stmt->execute(array($name, $old));
96
- echo htmlspecialchars($yourname, ENT_QUOTES, 'UTF-8')."さんで登録いたしました。";
97
- }else{
98
- echo $stmt->errno . $stmt->error;
99
- }
100
-
101
- //ステートメント切断
102
- $stmt->close();
103
102
 
103
+ // コミット
104
+ $stmt->commit();
105
+
106
+ echo "登録完了";
107
+
108
+ // データベース切断
109
+ $pdo->close();
110
+
111
+ } catch (Exception $e) {
112
+ $stmt->rollBack();
113
+ echo "失敗しました。" . $e->getMessage();
114
+ exit;
104
115
  }
105
116
  }
106
-
107
- // データベース切断
108
- $mysqli->close();
109
-
110
117
  ?>
111
118
  ```
112
119
  DB操作(値は固定):database3.php