質問編集履歴
7
タイトル変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
データ
|
1
|
+
DBへの接続はできているのに、データをDBに登録できない理由を教えて欲しいです。
|
test
CHANGED
File without changes
|
6
追記項目の削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -124,27 +124,6 @@
|
|
124
124
|
|
125
125
|
|
126
126
|
|
127
|
-
**追記**
|
128
|
-
コメントを参考にして実行時でもエラー表示が出ないかを確認するため、以下のコードをdbconnect.phpに書きましたが、具体的な解決策は分かりませんでした。
|
129
|
-
```php
|
130
|
-
<?php
|
131
|
-
try {
|
132
|
-
$pdo = new PDO(
|
133
|
-
'mysql:dbname=mydb;host=localhost;charset=utf8',
|
134
|
-
'root',
|
135
|
-
'root',
|
136
|
-
[
|
137
|
-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
138
|
-
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
139
|
-
]
|
140
|
-
);
|
141
|
-
} catch (PDOException $e) {
|
142
|
-
exit($e->getMessage());
|
143
|
-
}
|
144
|
-
?>
|
145
|
-
```
|
146
|
-
|
147
|
-
|
148
127
|
**開発環境**
|
149
128
|
使っているPC : Mac
|
150
129
|
開発言語 :PHP7
|
5
質問文の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,15 +1,4 @@
|
|
1
1
|
**質問内容**
|
2
|
-
dbconnect.phpでデータベースへの接続を確認しました。
|
3
|
-
```php
|
4
|
-
<?php
|
5
|
-
try {
|
6
|
-
$db =new PDO('mysql:dbname =mydb;host=localhost','root','root');
|
7
|
-
} catch (PDOException $e) {
|
8
|
-
echo 'DB接続エラー'.$e->getMessage();
|
9
|
-
}
|
10
|
-
?>
|
11
|
-
```
|
12
|
-
|
13
2
|
check.phpにて、index.phpより受け取ったデータを確認し、データベースへ投稿しようとしています。
|
14
3
|
|
15
4
|
```php
|
@@ -39,8 +28,6 @@
|
|
39
28
|
$error['rewrite'] = true;
|
40
29
|
}
|
41
30
|
?>
|
42
|
-
|
43
|
-
|
44
31
|
|
45
32
|
<p>次のフォームを入力してください</p>
|
46
33
|
<form action="index.php" method="post" enctype="multipart/form-data">
|
@@ -116,8 +103,24 @@
|
|
116
103
|
```
|
117
104
|
↑check.php
|
118
105
|
|
106
|
+
|
107
|
+
|
108
|
+
dbconnect.phpでデータベースへの接続を確認しました。
|
109
|
+
```php
|
110
|
+
<?php
|
111
|
+
try {
|
112
|
+
$db =new PDO('mysql:dbname =mydb;host=localhost','root','root');
|
113
|
+
} catch (PDOException $e) {
|
114
|
+
echo 'DB接続エラー'.$e->getMessage();
|
115
|
+
}
|
116
|
+
?>
|
117
|
+
```
|
118
|
+
|
119
119
|
check.phpの画面で登録ボタンを押しても、データベースへの接続エラーは出ませんでしたが、データ内容を登録できませんでした。
|
120
120
|
解決策があればご教示お願いいたします。
|
121
|
+
|
122
|
+
データベースのテーブル名、画像も添付いたします
|
123
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-27/a1eb624a-c668-4b92-ba53-d5f94dbe6200.png)
|
121
124
|
|
122
125
|
|
123
126
|
|
4
質問文の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -136,12 +136,8 @@
|
|
136
136
|
]
|
137
137
|
);
|
138
138
|
} catch (PDOException $e) {
|
139
|
-
|
140
|
-
header('Content-Type: text/plain; charset=UTF8', true, 500);
|
141
139
|
exit($e->getMessage());
|
142
140
|
}
|
143
|
-
|
144
|
-
header('Content-Type: text/html; charset=utf8');
|
145
141
|
?>
|
146
142
|
```
|
147
143
|
|
3
質問文の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,77 +1,150 @@
|
|
1
1
|
**質問内容**
|
2
|
-
|
2
|
+
dbconnect.phpでデータベースへの接続を確認しました。
|
3
|
+
```php
|
4
|
+
<?php
|
5
|
+
try {
|
6
|
+
$db =new PDO('mysql:dbname =mydb;host=localhost','root','root');
|
7
|
+
} catch (PDOException $e) {
|
3
|
-
|
8
|
+
echo 'DB接続エラー'.$e->getMessage();
|
9
|
+
}
|
10
|
+
?>
|
11
|
+
```
|
4
12
|
|
5
|
-
現状を説明させていただきます。
|
6
|
-
1、最初に以下のような画面が出てきます。(1時間以内にログインの記録がなければログイン画面から)
|
7
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-25/f58044b2-ff5f-47e9-a8c1-d65bc897b431.png)
|
8
|
-
|
13
|
+
check.phpにて、index.phpより受け取ったデータを確認し、データベースへ投稿しようとしています。
|
9
|
-
3、1の画面が再度出てきます。phpmyadminで確認するとmessageにデータが入っていませんでした。
|
10
14
|
|
11
|
-
|
12
|
-
**データベースの情報**
|
13
|
-
|
14
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-25/41170ecb-28f8-417c-b08a-a8809b873ed3.png)
|
15
|
-
|
16
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-25/3b0dd204-f8bc-4409-8bd1-6e9f1486bd04.png)
|
17
|
-
idは共にプライマリーキー、オートインクリメントになっています。
|
18
|
-
|
19
|
-
**書いたプログラミング**
|
20
|
-
```
|
15
|
+
```php
|
21
16
|
<?php
|
22
17
|
session_start();
|
23
|
-
require('dbconnect.php');
|
24
|
-
//データベースへの接続。正常にできています。
|
25
18
|
|
26
|
-
if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) {
|
27
|
-
|
19
|
+
if (!empty($_POST)) {
|
28
|
-
$_S
|
20
|
+
if ($_POST['name']=='') {
|
21
|
+
$error['name']='blank';
|
22
|
+
}
|
23
|
+
if ($_POST['email']=='') {
|
24
|
+
$error['email']='blank';
|
25
|
+
}
|
26
|
+
if ($_POST['password']=='') {
|
27
|
+
$error['password']='blank';
|
28
|
+
}
|
29
29
|
|
30
|
-
$members =$db->prepare('SELECT * FROM members WHERE id=?');
|
31
|
-
$members ->execute(array($_SESSION['id']));
|
32
|
-
$member = $members->fetch();
|
33
|
-
}else {
|
34
|
-
//ログインしていない状態
|
35
|
-
header('Location: login.php');exit();
|
36
|
-
}
|
37
|
-
|
38
|
-
|
39
|
-
//投稿を記録する
|
40
|
-
if (
|
30
|
+
if (empty($error)) {
|
41
|
-
if ($_POST['message'] !='') {
|
42
|
-
$message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, created=NOW()');
|
43
|
-
$message ->execute(array(
|
44
|
-
|
31
|
+
$_SESSION['join']=$_POST;
|
45
|
-
$_POST['message']
|
46
|
-
));
|
47
|
-
header('Location:
|
32
|
+
header('Location: check.php');
|
48
33
|
exit();
|
49
34
|
}
|
50
35
|
}
|
36
|
+
|
37
|
+
if ($_REQUEST['action']=='rewrite') {
|
38
|
+
$_POST=$_SESSION['join'];
|
39
|
+
$error['rewrite'] = true;
|
40
|
+
}
|
51
41
|
?>
|
52
42
|
|
53
|
-
<!DOCTYPE html>
|
54
43
|
|
44
|
+
|
45
|
+
<p>次のフォームを入力してください</p>
|
55
|
-
<form
|
46
|
+
<form action="index.php" method="post" enctype="multipart/form-data">
|
56
47
|
<dl>
|
57
|
-
<dt><
|
48
|
+
<dt>名前<span class="required">必須</span></dt>
|
49
|
+
<dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES); ?>"/>
|
50
|
+
<?php if ($error['name']=='blank'): ?>
|
51
|
+
<p>名前を入力してください</p>
|
52
|
+
<?php endif; ?>
|
53
|
+
</dd>
|
54
|
+
|
55
|
+
<dt>メールアドレス<span class="required">必須</span></dt>
|
56
|
+
<dd><input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>">
|
57
|
+
<?php if ($error['email']=='blank'): ?>
|
58
|
+
<p>メールアドレスを入力してください</p>
|
59
|
+
<?php endif; ?>
|
60
|
+
</dd>
|
61
|
+
|
62
|
+
<dt>パスワード<span class="required">必須</span></dt>
|
63
|
+
<dd><input type="text" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>">
|
64
|
+
<?php if ($error['password']=='blank'): ?>
|
65
|
+
<p>パスワードを入力してください</p>
|
66
|
+
<?php endif; ?>
|
67
|
+
</dd>
|
68
|
+
</dl>
|
69
|
+
<input type="submit" value="入力内容を確認する">
|
70
|
+
</form>
|
71
|
+
```
|
72
|
+
↑index.php
|
73
|
+
```php
|
74
|
+
<?php
|
75
|
+
session_start();
|
76
|
+
require('../dbconnect.php');
|
77
|
+
|
78
|
+
if (!isset($_SESSION['join'])) {
|
79
|
+
header('Location :index.php');
|
80
|
+
exit();
|
81
|
+
}
|
82
|
+
|
83
|
+
if (!empty($_POST)) {
|
84
|
+
$statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, created=NOW()');
|
85
|
+
echo $ret = $statement->execute(array(
|
86
|
+
$_SESSION['join']['name'],
|
87
|
+
$_SESSION['join']['email'],
|
88
|
+
$_SESSION['join']['password']
|
89
|
+
));
|
90
|
+
unset($_SESSION['join']);
|
91
|
+
|
92
|
+
header('Location: thanks.php');
|
93
|
+
exit();
|
94
|
+
}
|
95
|
+
?>
|
96
|
+
|
97
|
+
<form action="" method="post">
|
98
|
+
<input type="hidden" name="action" value="submit"/>
|
99
|
+
<dl>
|
100
|
+
<dt>名前</dt>
|
58
101
|
<dd>
|
102
|
+
<?php echo htmlspecialchars($_SESSION['join']['name'],ENT_QUOTES);?>
|
103
|
+
</dd>
|
104
|
+
<dt>メールアドレス</dt>
|
105
|
+
<dd>
|
106
|
+
<?php echo htmlspecialchars($_SESSION['join']['email'],ENT_QUOTES); ?>
|
107
|
+
</dd>
|
108
|
+
<dt>パスワード</dt>
|
109
|
+
<dd>
|
59
|
-
<te
|
110
|
+
<?php echo htmlspecialchars($_SESSION['join']['password'],ENT_QUOTES); ?>
|
60
111
|
</dd>
|
61
112
|
</dl>
|
62
113
|
<div>
|
63
|
-
<input type="submit"
|
114
|
+
<a href="index.php?action=rewrite">書き直す</a>|<input type="submit" value="登録する">
|
64
115
|
</div>
|
116
|
+
```
|
65
|
-
|
117
|
+
↑check.php
|
66
118
|
|
119
|
+
check.phpの画面で登録ボタンを押しても、データベースへの接続エラーは出ませんでしたが、データ内容を登録できませんでした。
|
120
|
+
解決策があればご教示お願いいたします。
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
**追記**
|
125
|
+
コメントを参考にして実行時でもエラー表示が出ないかを確認するため、以下のコードをdbconnect.phpに書きましたが、具体的な解決策は分かりませんでした。
|
126
|
+
```php
|
127
|
+
<?php
|
128
|
+
try {
|
129
|
+
$pdo = new PDO(
|
130
|
+
'mysql:dbname=mydb;host=localhost;charset=utf8',
|
131
|
+
'root',
|
132
|
+
'root',
|
133
|
+
[
|
134
|
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
135
|
+
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
136
|
+
]
|
137
|
+
);
|
138
|
+
} catch (PDOException $e) {
|
139
|
+
|
140
|
+
header('Content-Type: text/plain; charset=UTF8', true, 500);
|
141
|
+
exit($e->getMessage());
|
142
|
+
}
|
143
|
+
|
144
|
+
header('Content-Type: text/html; charset=utf8');
|
145
|
+
?>
|
67
146
|
```
|
68
147
|
|
69
|
-
|
70
|
-
**確認したこと**
|
71
|
-
テーブル名:membersのデータを受けれているかの確認をするため、DOCTYPE html以降の
|
72
|
-
<?php echo htmlspecialchars($member['name'],ENT_QUOTES);?>
|
73
|
-
でnameを受け取れているかの確認をしました。
|
74
|
-
その結果、登録名である「サイトウ」が表示されていました。
|
75
148
|
|
76
149
|
**開発環境**
|
77
150
|
使っているPC : Mac
|
2
タイトルの不備を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
データベースに投稿内容を登録
|
1
|
+
データベースに投稿内容を登録したい
|
test
CHANGED
File without changes
|
1
タイトルの不備を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
データベースに投稿内容を
|
1
|
+
データベースに投稿内容を登録
|
test
CHANGED
File without changes
|