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

回答編集履歴

2

追記

2017/02/25 14:01

投稿

退会済みユーザー
answer CHANGED
@@ -3,6 +3,7 @@
3
3
  0. SQLインジェクションの脆弱性があります。
4
4
  0. XSS脆弱性があります。
5
5
  0. HTML構造が正しくありません。
6
+ 0. DBにHTMLを格納すると、後々面倒なことになります。
6
7
 
7
8
  #修正コードサンプル
8
9
 

1

追記

2017/02/25 14:01

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,108 @@
2
2
  0. `htmlspecialchars` を利用してはいけないところで利用しています。
3
3
  0. SQLインジェクションの脆弱性があります。
4
4
  0. XSS脆弱性があります。
5
- 0. HTML構造が正しくありません。
5
+ 0. HTML構造が正しくありません。
6
+
7
+ #修正コードサンプル
8
+
9
+ ```php
10
+ <?php
11
+ // エラーを強制的に表示する。
12
+ // 開発中は必ず記述すべき。
13
+ // エラーメッセージなしに、デバッグなんてできません。
14
+ ini_set('display_errors', true);
15
+ error_reporting(E_ALL);
16
+
17
+ function h($string)
18
+ {
19
+ return htmlspecialchars($string, ENT_QUOTES, 'utf-8');
20
+ }
21
+
22
+ try {
23
+
24
+ // 投稿 を押したとき
25
+ if ('POST' === filter_input(INPUT_SERVER, 'REQUEST_METHOD')) {
26
+
27
+ $title = filter_input(INPUT_POST, 'title');
28
+ $content = filter_input(INPUT_POST, 'content');
29
+ $upfile = $_FILES["upfile"];
30
+
31
+ // エラーを格納する配列
32
+ $err = [];
33
+
34
+ // タイトル入力チェック
35
+ if ('' === $title) {
36
+ $err[] = 'タイトルがありません。';
37
+ }
38
+
39
+ // 内容入力チェック
40
+ if ('' === $content) {
41
+ $err[] = '本文がありません。';
42
+ }
43
+
44
+ // ファイルアップロード失敗
45
+ if ($upfile['error'] > 0) {
46
+ $err[] = '画像をアップロードしてください。';
47
+ }
48
+
49
+ // エラーがないとき
50
+ if (count($err) === 0) {
51
+
52
+ $fileName = sha1($upfile["tmp_name"]);
53
+ move_uploaded_file($upfile["tmp_name"], "Image/$fileName.png");
54
+
55
+ $dsn = 'mysql:host=localhost;dbname=sample;charset=utf-8';
56
+ $username = '';
57
+ $password = '';
58
+
59
+ // DBエラーを例外でスローする設定(必須)
60
+ $options = [
61
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
62
+ ];
63
+ $pdo = new PDO($dsn, $username, $password, $options);
64
+
65
+ $sql = 'INSERT INTO `post` (title, eyecatch, content) VALUES (?, ?, ?)';
66
+ $stmt = $pdo->prepare($sql);
67
+ $params = [
68
+ $title
69
+ , $fileName
70
+ , $content
71
+ ];
72
+ $stmt->execute($params);
73
+ }
74
+ }
75
+ } catch (Exception $ex) {
76
+ $err[] = $ex->getMessage();
77
+ }
78
+ ?>
79
+ <!DOCTYPE HTML>
80
+ <html lang="ja">
81
+ <head>
82
+ <meta charset="UTF-8">
83
+ <title></title>
84
+ </head>
85
+ <body>
86
+ <div>
87
+ <h2>記事投稿</h2>
88
+
89
+ <form method="post" action="ActivityReportTransmission.php" enctype="multipart/form-data">
90
+
91
+ <label for="title">題名</label>
92
+ <input type="text" name="title" id="title" size="40" value="<?= h($title); ?>">
93
+
94
+ <label for="upfile">アイキャッチ</label>
95
+ <input type="file" name="upfile" id="upfile">
96
+
97
+ <label for="content">本文</label>
98
+ <textarea name="content" id="content" rows="8" cols="40"><?= h($content); ?></textarea>
99
+
100
+ <input name="submit" type="submit" value="投稿">
101
+
102
+ <?php foreach ($err as $e): ?>
103
+ <p><?= h($e); ?></p>
104
+ <?php endforeach; ?>
105
+ </form>
106
+ </div>
107
+ </body>
108
+ </html>
109
+ ```