回答編集履歴
4
加筆修正
answer
CHANGED
@@ -39,6 +39,7 @@
|
|
39
39
|
```
|
40
40
|
`!empty($_POST)`は横着がすぎるので、
|
41
41
|
本当にほしいPOST受信パラメータを使ってisset()で判定するべきかと。
|
42
|
+
[PHP isset, empty, is_null の違い早見表 - Qiita](https://qiita.com/shinichi-takii/items/00aed26f96cf6bb3fe62)
|
42
43
|
|
43
44
|
それと、この場面に至るまでに、ちゃんと$memberや$member['id']に値が入ってきているかも確認しないと。
|
44
45
|
$memberを抽出するのに使っている$_SESSION['id']に値を設定している箇所がないので、
|
3
見直し
answer
CHANGED
@@ -59,4 +59,18 @@
|
|
59
59
|
?>
|
60
60
|
```
|
61
61
|
で閉じていますが、もしもその記号のあとに改行コードとかあると、
|
62
|
-
不要な文字出力が生じて header() によるリダイレクトが利かなかったりするかもしれません。
|
62
|
+
不要な文字出力が生じて header() によるリダイレクトが利かなかったりするかもしれません。
|
63
|
+
|
64
|
+
```
|
65
|
+
//dbconnect.php
|
66
|
+
<?php
|
67
|
+
try {
|
68
|
+
$db = new PDO('mysql:dbname=mini_bbs;host=localhost;charset=utf8', 'root', 'root', [
|
69
|
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
70
|
+
PDO::ATTR_EMULATE_PREPARES => false,
|
71
|
+
]);
|
72
|
+
} catch (PDOException $e) {
|
73
|
+
echo 'DB接続エラー:' . $e->getMessage();
|
74
|
+
}
|
75
|
+
```
|
76
|
+
とかやってデータベース操作時のエラーを例外としてキャッチできるようにするのも忘れずに。
|
2
見直し
answer
CHANGED
@@ -19,16 +19,21 @@
|
|
19
19
|
//投稿を記録する
|
20
20
|
if (isset($_POST['message']) && isset($_POST['reply_post_id'])) {
|
21
21
|
if (($_POST['message'] != '') && (is_numeric($_POST['reply_post_id']))) {
|
22
|
+
try {
|
22
|
-
|
23
|
+
$db->beginTransaction();
|
23
|
-
|
24
|
+
$message = $db->prepare('INSERT INTO posts(member_id, message, reply_post_id, created) set member_id=?, message=?, reply_post_id=?, created=NOW()');
|
24
|
-
|
25
|
+
$message->execute(array(
|
25
|
-
|
26
|
+
$member['id'],
|
26
|
-
|
27
|
+
$_POST['message'],
|
27
|
-
|
28
|
+
$_POST['reply_post_id']
|
28
|
-
|
29
|
+
));
|
29
|
-
|
30
|
+
$db->commit();
|
30
31
|
|
31
|
-
|
32
|
+
header('Location: index.php'); exit(); // ←これがこれでいいかどうかは保留。
|
33
|
+
}
|
34
|
+
catch (PDOException e) {
|
35
|
+
echo e->getMessage(); // ←あくまで仮。
|
36
|
+
}
|
32
37
|
}
|
33
38
|
}
|
34
39
|
```
|
@@ -47,6 +52,7 @@
|
|
47
52
|
同じような理由で、SELECT文においても「*」で省略せずカラム名は抽出したいものすべて記述します。
|
48
53
|
|
49
54
|
念のため、beginTransaction()とcommit()も設けてデータベースへの反映を意図してみたり。
|
55
|
+
さらに念のために、try~catchで囲ってみたり。
|
50
56
|
|
51
57
|
また、dbconnect.phpの末尾で
|
52
58
|
```
|
1
見直し
answer
CHANGED
@@ -19,12 +19,14 @@
|
|
19
19
|
//投稿を記録する
|
20
20
|
if (isset($_POST['message']) && isset($_POST['reply_post_id'])) {
|
21
21
|
if (($_POST['message'] != '') && (is_numeric($_POST['reply_post_id']))) {
|
22
|
+
$db->beginTransaction();
|
22
23
|
$message = $db->prepare('INSERT INTO posts(member_id, message, reply_post_id, created) set member_id=?, message=?, reply_post_id=?, created=NOW()');
|
23
24
|
$message->execute(array(
|
24
25
|
$member['id'],
|
25
26
|
$_POST['message'],
|
26
27
|
$_POST['reply_post_id']
|
27
28
|
));
|
29
|
+
$db->commit();
|
28
30
|
|
29
31
|
header('Location: index.php'); exit(); // ←これがこれでいいかどうかは保留。
|
30
32
|
}
|
@@ -44,6 +46,8 @@
|
|
44
46
|
のちにテーブルが拡張されてカラムが追加されたりしたとき、エラーになるのを防ぐために。
|
45
47
|
同じような理由で、SELECT文においても「*」で省略せずカラム名は抽出したいものすべて記述します。
|
46
48
|
|
49
|
+
念のため、beginTransaction()とcommit()も設けてデータベースへの反映を意図してみたり。
|
50
|
+
|
47
51
|
また、dbconnect.phpの末尾で
|
48
52
|
```
|
49
53
|
?>
|