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

質問編集履歴

2

修正

2019/05/13 22:35

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  PHPエントリーフォーム入力(index.php)、確認ボタン押下
4
4
  >(confirm.php遷移)送信内容確認、送信ボタン押下→送信完了
5
5
 
6
- 入力内容にphpバリデーションをかけたうえで、
6
+ 画像ファイルにphpバリデーションをかけたうえで、
7
7
  データベースにPDO接続→mysqlサーバーに記録
8
8
  この段階まで構築できたのですが、
9
9
  設定した6つのフィールドのうち、
@@ -15,9 +15,122 @@
15
15
 
16
16
  ![イメージ説明](c8b56688d14f320c0ceff0cd8592dad6.png)
17
17
  ![イメージ説明](7ada93b1736891af6ce1f3e186c46c19.png)
18
- ![イメージ説明](927a154bea1ea8e3dedc17c9ae38fb1a.png)
18
+
19
+
19
20
  ```php
20
21
  【confirm.php】
22
+
23
+ $page_flag = 0;
24
+
25
+ if( !empty($_POST['confirm']) ) {
26
+ $page_flag = 1;
27
+
28
+
29
+ function validation(){
30
+
31
+ try {
32
+
33
+ if (!isset($_FILES['upfile']['error']) || !is_int($_FILES['upfile']['error'])) {
34
+ throw new RuntimeException('パラメータが不正です');
35
+ }
36
+
37
+ switch ($_FILES['upfile']['error']) {
38
+ case UPLOAD_ERR_OK: // OK
39
+ break;
40
+ case UPLOAD_ERR_NO_FILE: // ファイル未選択
41
+ throw new RuntimeException('ファイルが選択されていません');
42
+ case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過
43
+ case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 (設定した場合のみ)
44
+ throw new RuntimeException('ファイルサイズが大きすぎます');
45
+ default:
46
+ throw new RuntimeException('その他のエラーが発生しました');
47
+ }
48
+
49
+
50
+ if ($_FILES['upfile']['size'] > 1000000) {
51
+ throw new RuntimeException('ファイルサイズが大きすぎます');
52
+ }
53
+
54
+
55
+ if (!$ext = array_search(
56
+ mime_content_type($_FILES['upfile']['tmp_name']),
57
+ array(
58
+ 'jpg' => 'image/jpeg',
59
+ ),
60
+ true
61
+ )) {
62
+ throw new RuntimeException('ファイル形式が不正です');
63
+ }
64
+
65
+ if (!move_uploaded_file(
66
+ $_FILES['upfile']['tmp_name'],
67
+ $path = sprintf('./files/%s.%s',
68
+ sha1_file($_FILES['upfile']['tmp_name']),
69
+ $ext
70
+ )
71
+ )) {
72
+ throw new RuntimeException('ファイル保存時にエラーが発生しました');
73
+ }
74
+
75
+ chmod($path, 0644);
76
+
77
+ return null;
78
+
79
+ } catch (RuntimeException $e) {
80
+
81
+ return $e->getMessage();
82
+
83
+ }
84
+
85
+ }
86
+
87
+
88
+ if (isset($_POST['job']) || is_array($_POST['job'])) {
89
+ $your_job = implode("、", $_POST["job"]);
90
+ }
91
+ } elseif( !empty($_POST['submit']) ) {
92
+ $page_flag = 2;
93
+
94
+ //データベース接続
95
+ define('DB_DATABASE', 'xxxxxxx_db');
96
+ define('DB_USERNAME', 'xxxxxx_user');
97
+ define('DB_PASSWORD', 'xxxxxx');
98
+ define('DB_DSN', 'mysql:host=mysqlxxx.xxxxxx.ne.jp;dbname=' . DB_DATABASE. ';charset=utf8');
99
+
100
+ try {
101
+ $pdo = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
102
+ $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
103
+ $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
104
+
105
+ } catch (PDOException $e) {
106
+ echo $e->getMessage();
107
+ exit;
108
+ }
109
+
110
+ try {
111
+ $pdo->beginTransaction();
112
+ $sql = "INSERT INTO engineer(no, name, job, mail, img_file, message) VALUES(?,?,?,?,?,?)";
113
+ $stmh = $pdo->prepare($sql);
114
+ $id = null;
115
+ $stmh->bindValue(1, $id, PDO::PARAM_INT);
116
+ $stmh->bindValue(2, h($_POST["name"]), PDO::PARAM_STR);
117
+ $stmh->bindValue(3, $your_job, PDO::PARAM_STR);
118
+ $stmh->bindValue(4, h($_POST["mail"]), PDO::PARAM_STR);
119
+ $stmh->bindValue(5, h($_FILES["upfile"]["name"]), PDO::PARAM_STR);
120
+ $stmh->bindValue(6, h($_POST["message"]), PDO::PARAM_STR);
121
+ $stmh->execute();
122
+ } catch (PDOException $e){
123
+ $pdo->rollBack();
124
+ echo "エラー:" . $e->getMessage();
125
+ }
126
+
127
+ //自動返信メール送信
128
+ require_once('mail.php');
129
+ }
130
+ ?>
131
+ ```
132
+ ```php
133
+ 【confirm.php】
21
134
  <div class="contact_form_wrapper px-3">
22
135
  <form class="confirm_form" action="" method="post">
23
136
  <input type="hidden" name="scroll_top" value="" class="st">

1

修正

2019/05/13 22:35

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,7 @@
11
11
 
12
12
  値を変数にした項目と、$_FILEの項目のようなんですが、
13
13
  考えられる原因や、修正が必要な箇所を教えていただきたいです。
14
+ (img_file(jpegファイル)は、保管場所までのパスとファイル名を入れたいです)
14
15
 
15
16
  ![イメージ説明](c8b56688d14f320c0ceff0cd8592dad6.png)
16
17
  ![イメージ説明](7ada93b1736891af6ce1f3e186c46c19.png)