jQuery.ajax()を用いて、画像とテキストデータを同時にアップロードしたいです。現状、テキスト入力、画像選択はできます。しかし、送信ボタンを押しても、postもされず、dbに保存もできてません。chromeにデベロッパツールには、エラーが出てこないです。
詳細↓
index.phpにて、画像とテキストを入力させ、ajaxでget_trip.phpにPOSTする。get_trip.phpは、受けとったデータをmysqlのDBに保存。load_trip.phpでsqlでselectし、index.phpで画像、テキストを表示です。function.phpは、db接続をしてます。DBは、テーブル名がtripsで,カラム詳細は,id,user_id,comment,image_name,image_content,image_type,image_size です。
画像ファイルのパスを一時的に保存したいです。
とりあえずの目的は、画像、テキストをDBに保存させる!!ことです。
php
1//index.php 2//関係あるところのみ 3 <div class="input_form"> 4 <div class="container mt-5"> 5 <div class="row"> 6 <div class="col-md-4 pt-4 pl-4"> 7 <form id="trip_data" method="post" enctype="multipart/form-data" > 8 <div class="form-group"> 9 <label>画像選択</label> 10 <input type="file" name = "image" accept=".jpg, .png" required> 11 </div> 12 <textarea class="comment"></textarea> 13 <button class="trip_button">Trip</button> 14 </form> 15 </div> 16 </div> 17 </div> 18 </div> 19 20<script> 21// ****************trip_buttonが押された時************************* 22 $(".trip_button").on("click", function(event){ 23 24 function file_upload(){ 25 // フォームデータを取得 26 var formdata = new FormData($('#trip_data').get(0)); 27 28 // POSTでアップロード 29 $.ajax({ 30 url : "get_trip.php", 31 type : "POST", 32 data : { 33 formdata, 34 "id": $(".list:first").data("list"), 35 "user_id": "<?php echo $_SESSION['user_id']; ?>", 36 "comment": $(".comment").val() 37 }, 38 cache : false, 39 contentType : false, 40 processData : false, 41 dataType : "json", 42 success: console.log('send!'); 43 }) 44 .done(function(data, textStatus, jqXHR){ 45 update(); 46 $(".comment").val(""); 47 }) 48 .fail(function(jqXHR, textStatus, errorThrown){ 49 fail_err_msg(XMLHttpRequest, textStatus, errorThrown); 50 }); 51 52 } 53 54 }); 55</script>
php
1//get_trip.php 2<?php 3 header("Content-type: application/json; charset=UTF-8"); 4 5 date_default_timezone_set("Asia/Tokyo"); 6 7 require("function.php"); 8 9 $sql = null; 10 $stmt = null; 11 12 $db = db_connect(); 13 14 $id = $_POST["id"]; 15 $user_id = $_POST["user_id"]; 16 $comment = $_POST["comment"]; 17 $datetime = new DateTime(); 18 $datetime = $datetime->format("Y-m-d H:i:s"); 19 20 if ($_SERVER['REQUEST_METHOD'] != 'POST') { 21 // 画像を取得 22 }else{ 23 // 画像を保存 24 if(!empty($_FILES['image']['name'])){ 25 $name = $_FILES['image']['name']; 26 $type = $_FILES['image']['type']; 27 $image_content = file_get_contents($_FILES['image']['tmp_name']); 28 $size = $_FILES['image']['size']; 29 30 $sql = "INSERT INTO trips(id,user_id,comment,image_name,image_type,image_content,image_size,created_at) 31 VALUES(null,?,?,:image_name,:image_type,:image_content,:image_size,?)"; 32 $stmt->$db->prepare($sql); 33 $stmt->bindValue(':image_name', $name, PDO::PARAM_STR); 34 $stmt->bindValue(':image_type', $type, PDO::PARAM_STR); 35 $stmt->bindValue(':image_content', $image_content, PDO::PARAM_STR); 36 $stmt->bindValue(':image_size', $size, PDO::PARAM_INT); 37 $stmt->execute( array($user_id, $comment,$image_content, $datetime) ); 38 } 39 40 unset($db); 41 header('Location:index.php'); 42 exit(); 43 } 44 45 unset($db); 46 47 ?> 48 49
get_trip.phpのSQL文が違うのか、while文のとこが、違うの、合ってたとしたら、index.phpのajaxのコードが違うか...
どこがどのように違うのかわかりません。どなたか助けてください。色んなサイトを参考にして書いたのですが、うまくいきません...
DBにデータが保存させできれば、あとは頑張れそうなのですが、そこができないです。
おそらく、補足情報が足りないと思いますので、質問してください。
回答がついた後に指摘を受けて修正したので、既存の回答とは相違があります
回答3件
あなたの回答
tips
プレビュー