phpとJS(Ajax)を用いてチャットアプリの作成をしています。
ネットに転がっているものを参考にしつつ作成をしています。
メッセージは反映され、表示できるのですが、
画像を送信する機能を作成していたところ、$_filesがからのまま渡っていてDBに送信できません。
どのようにすれば値が渡るか教えて欲しいです。
Ajaxのコードとformのコードを以下に貼ります。
enctype="multipart/form-data"は指定済みです。
form
1<form action="#" class="img_send" method="POST" enctype="multipart/form-data"> 2 <input type="text" name="outgoing_msg_id" value="省いています" hidden> 3 <input type="text" name="incoming_msg_id" value="省いています" hidden> 4 <input type="file" name="msg_img" id="filesend"> 5 6 <button type="button"><i class="fas fa-upload"></i></button> 7 </form>
js
1 2const form = document.querySelector(".img_send"), 3inputField = form.querySelector("input-field"), 4sendBtn = form.querySelector("button"); 5 6sendBtn.onclick = ()=>{ 7 let xhr = new XMLHttpRequest(); 8 xhr.open("POST","insert-img-chat.php", true); 9 xhr.onload = ()=>{ 10 if(xhr.readyState === XMLHttpRequest.DONE){ 11 if(xhr.status === 200){ 12 inputField3.value = ""; 13 scrollToBottom(); 14 } 15 } 16 } 17 let formData = new FormData(form); 18 xhr.send(formData); 19}
insert-img-chat.php↓
<?php session_start(); if(isset($_SESSION['user_unique_id'])){ require_once(ROOT_PATH .'Controllers/UserController.php'); $user = new UserController(); $user->InsertMsgImg(); } ?>
insert-img-chat.phpにおける$user->InsertMsgImg()の処理部分が以下です。
controller
1public function InsertMsgImg(){ 2 $users = $this->PrivateChatRoom->insert_msg_img(); 3 return $users; 4 }
public function insert_msg_img(){ if(isset($_POST['outgoing_msg_id'])){ $outgoing_msg_id = $_POST['outgoing_msg_id']; } if(isset($_POST['incoming_msg_id'])){ $incoming_msg_id = $_POST['incoming_msg_id']; } //画像送信 if($_FILES['msg_img']){ $msg_img_name = $_FILES['msg_img']['name']; $msg_img_type = $_FILES['msg_img']['type']; $msg_img_tmp_name = $_FILES['msg_img']['tmp_name']; $msg_img_explode = explode('.',$msg_img_name); $msg_img_txt = end($msg_img_explode); $extensions = ["png","jpag","jpg"]; if(in_array($msg_img_txt,$extensions) === true){ $time = time(); $new_img_name = $time.$msg_img_name; if(move_uploaded_file($msg_img_tmp_name,"img/".$new_img_name)){ $msg_img = $new_img_name; } } } if(!empty($msg_img)){ $sql = "INSERT INTO $this->table(outgoing_msg_id,incoming_msg_id,msg_img) VALUES(:outgoing_msg_id,:incoming_msg_id,:msg_img)"; $sth = $this->dbh->prepare($sql); } $this->dbh->beginTransaction(); try { $sth = $this->dbh->prepare($sql); $sth->bindParam(':outgoing_msg_id', $outgoing_msg_id, PDO::PARAM_INT); $sth->bindParam(':incoming_msg_id', $incoming_msg_id, PDO::PARAM_INT); $sth->bindParam(':msg_img', $msg_img, PDO::PARAM_STR); $result = $sth->execute(); $this->dbh->commit(); return $result; } catch (\PDOException $e) { echo '更新失敗'.$e->getMessage(); $this->dbh->rollBack(); exit(); } }
insert-img-chat.phpに遷移はデバックでできています。
insert-img-chat.php内でのSQL実行に際に$_filesの値が取得できません。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー