質問編集履歴
2
database2.phpを修正しました。
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
|
-
|
69
|
+
if (isset($_POST["yourname"])) {
|
70
|
+
$name=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]);
|
71
|
+
|
72
|
+
}
|
74
|
-
|
73
|
+
if (is_null($name)) {
|
74
|
+
|
75
75
|
}else {
|
76
|
-
|
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
|
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 ($
|
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
|
-
$
|
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(
|
132
|
+
$stmt->execute();
|
102
|
-
|
133
|
+
|
103
134
|
// コミット
|
104
|
-
$
|
135
|
+
$pdo->commit();
|
105
|
-
|
136
|
+
|
106
137
|
echo "登録完了";
|
107
|
-
|
138
|
+
|
108
139
|
// データベース切断
|
140
|
+
$stmt = null;
|
109
|
-
$pdo
|
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を修正しました。
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', '
|
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']
|
71
|
+
if (!isset($_POST['yourname'], $_POST['yourold']){
|
72
|
+
// ポストのデータを変数にセット
|
73
|
+
$name = $_POST['yourname'];
|
74
|
+
$old = $_POST['yourold'];
|
75
|
+
}else {
|
60
76
|
echo "名前・年齢が入力されていません。";
|
77
|
+
}
|
78
|
+
|
61
|
-
|
79
|
+
try{
|
62
|
-
|
63
|
-
// データベース
|
80
|
+
// データベースに接続
|
64
|
-
try {
|
65
|
-
|
81
|
+
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options);
|
82
|
+
|
66
|
-
|
83
|
+
// 接続確認
|
67
|
-
|
84
|
+
if ($PDO) {
|
85
|
+
//echo "データベースに接続しています"
|
86
|
+
} else {
|
68
|
-
|
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
|
-
|
94
|
+
$stmt->beginTransaction();
|
78
|
-
|
95
|
+
|
79
|
-
//プレースホルダへ実際の値を設定する
|
96
|
+
// プレースホルダへ実際の値を設定する
|
80
|
-
$stmt->
|
97
|
+
$stmt->bindParam('name', $name);
|
81
|
-
$stmt->
|
98
|
+
$stmt->bindParam('old', $old);
|
82
|
-
|
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
|
-
|
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
|