以下の流れでお問い合わせフォームを作っています。
PHPエントリーフォーム入力(index.php)、確認ボタン押下
>(confirm.php遷移)送信内容確認、送信ボタン押下→送信完了
画像ファイルにphpバリデーションをかけたうえで、
データベースにPDO接続→mysqlサーバーに記録
この段階まで構築できたのですが、
設定した6つのフィールドのうち、
no/job/img_file の3つの値がNULLになってしまいます。
値を変数にした項目と、$_FILEの項目のようなんですが、
考えられる原因や、修正が必要な箇所を教えていただきたいです。
(img_file(jpegファイル)は、保管場所までのパスとファイル名を入れたいです)
php
1【confirm.php】 2 3$page_flag = 0; 4 5if( !empty($_POST['confirm']) ) { 6 $page_flag = 1; 7 8 9function validation(){ 10 11 try { 12 13 if (!isset($_FILES['upfile']['error']) || !is_int($_FILES['upfile']['error'])) { 14 throw new RuntimeException('パラメータが不正です'); 15 } 16 17 switch ($_FILES['upfile']['error']) { 18 case UPLOAD_ERR_OK: // OK 19 break; 20 case UPLOAD_ERR_NO_FILE: // ファイル未選択 21 throw new RuntimeException('ファイルが選択されていません'); 22 case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過 23 case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 (設定した場合のみ) 24 throw new RuntimeException('ファイルサイズが大きすぎます'); 25 default: 26 throw new RuntimeException('その他のエラーが発生しました'); 27 } 28 29 30 if ($_FILES['upfile']['size'] > 1000000) { 31 throw new RuntimeException('ファイルサイズが大きすぎます'); 32 } 33 34 35 if (!$ext = array_search( 36 mime_content_type($_FILES['upfile']['tmp_name']), 37 array( 38 'jpg' => 'image/jpeg', 39 ), 40 true 41 )) { 42 throw new RuntimeException('ファイル形式が不正です'); 43 } 44 45 if (!move_uploaded_file( 46 $_FILES['upfile']['tmp_name'], 47 $path = sprintf('./files/%s.%s', 48 sha1_file($_FILES['upfile']['tmp_name']), 49 $ext 50 ) 51 )) { 52 throw new RuntimeException('ファイル保存時にエラーが発生しました'); 53 } 54 55 chmod($path, 0644); 56 57 return null; 58 59 } catch (RuntimeException $e) { 60 61 return $e->getMessage(); 62 63 } 64 65} 66 67 68 if (isset($_POST['job']) || is_array($_POST['job'])) { 69 $your_job = implode("、", $_POST["job"]); 70 } 71} elseif( !empty($_POST['submit']) ) { 72 $page_flag = 2; 73 74 //データベース接続 75 define('DB_DATABASE', 'xxxxxxx_db'); 76 define('DB_USERNAME', 'xxxxxx_user'); 77 define('DB_PASSWORD', 'xxxxxx'); 78 define('DB_DSN', 'mysql:host=mysqlxxx.xxxxxx.ne.jp;dbname=' . DB_DATABASE. ';charset=utf8'); 79 80 try { 81 $pdo = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 82 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 83 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 84 85 } catch (PDOException $e) { 86 echo $e->getMessage(); 87 exit; 88 } 89 90 try { 91 $pdo->beginTransaction(); 92 $sql = "INSERT INTO engineer(no, name, job, mail, img_file, message) VALUES(?,?,?,?,?,?)"; 93 $stmh = $pdo->prepare($sql); 94 $id = null; 95 $stmh->bindValue(1, $id, PDO::PARAM_INT); 96 $stmh->bindValue(2, h($_POST["name"]), PDO::PARAM_STR); 97 $stmh->bindValue(3, $your_job, PDO::PARAM_STR); 98 $stmh->bindValue(4, h($_POST["mail"]), PDO::PARAM_STR); 99 $stmh->bindValue(5, h($_FILES["upfile"]["name"]), PDO::PARAM_STR); 100 $stmh->bindValue(6, h($_POST["message"]), PDO::PARAM_STR); 101 $stmh->execute(); 102 } catch (PDOException $e){ 103 $pdo->rollBack(); 104 echo "エラー:" . $e->getMessage(); 105 } 106 107 //自動返信メール送信 108 require_once('mail.php'); 109} 110?>
php
1【confirm.php】 2 <div class="contact_form_wrapper px-3"> 3 <form class="confirm_form" action="" method="post"> 4 <input type="hidden" name="scroll_top" value="" class="st"> 5 6 <div class="form_flex"> 7 <div class="form_titles"> 8 お名前 9 </div> 10 <div class="confirm_item"> 11 <p><?php echo h($_POST["name"]); ?></p> 12 </div> 13 </div> 14 15 <div class="form_flex"> 16 <div class="form_titles"> 17 ご職業 18 </div> 19 <div> 20 <p class="confirm_item"><?php echo $your_job; ?></p> 21 </div> 22 </div> 23 24 <div class="form_flex"> 25 <div class="form_titles"> 26 メールアドレス 27 </div> 28 <div> 29 <p class="confirm_item"><?php echo h($_POST["mail"]); ?></p> 30 </div> 31 </div> 32 33 <div class="form_flex"> 34 <div class="form_titles"> 35 添付ファイル 36 </div> 37 <div> 38 <p class="confirm_item"><?php echo h($_FILES["upfile"]["name"]). " "; echo round(h($_FILES["upfile"]["size"])/1000) . "KB"; ?><br /> 39 <span id="error_msg"><?= validation() ?></span></p> 40 </div> 41 </div> 42 43 <div class="form_flex"> 44 <div class="form_titles"> 45 その他 46 </div> 47 <div> 48 <p class="confirm_item"><?php echo nl2br(h($_POST["message"])); ?></p> 49 </div> 50 </div> 51 52 <div class="btn_wrapper"> 53 <p class="submit" id="submit"> 54 <input type="submit" name="submit" value="送信する" /> 55 </p> 56 <p class="goback"> 57 <button type="button" onclick=history.back() name="goback" value="もどる" />もどる</button> 58 </p> 59 </div> 60 <input type="hidden" name="name" value="<?php echo h($_POST["name"]); ?>"> 61 <input type="hidden" name="job" value="<?php echo $your_job; ?>"> 62 <input type="hidden" name="mail" value="<?php echo h($_POST["mail"]); ?>"> 63 <input type="hidden" name="upfile" value="<?php echo h($_FILES["upfile"]["name"]); ?>"> 64 <input type="hidden" name="message" value="<?php echo h($_POST["message"]); ?>"> 65 <input type="hidden" name="recaptchaResponse" id="recaptchaResponse"> 66 </form> 67 </div>