使用ajax进行文件上传和数据插入

Posted

技术标签:

【中文标题】使用ajax进行文件上传和数据插入【英文标题】:file uploading and data insertion using ajax 【发布时间】:2015-09-15 13:29:31 【问题描述】:

我的问题是,当我在没有文件上传的情况下将数据发送到 mysql 数据库时,它已成功插入到数据库中,但是当我使用插入数据和文件上传时它不起作用,并且 post.js 文件没有接收到数据

success:function(data)

   alert(data);

post.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AdPortal</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="container">
        <div class="header">
        </div>
        <div class="nav">
            <ul class="nav_link">
                <div class="nav_link_div"><a href="http://localhost/adportal/index.html"><li class="nav_link_list">HOME</li></a></div>
                <div class="nav_link_div"><a href="#"><li class="nav_link_list">POST AD</li></a></div>
                <div class="nav_link_div"><a href="#"><li class="nav_link_list">CONTACT US</li></a></div>
                <div class="nav_link_div"><a href="#"><li class="nav_link_list">ABOUT</li></a></div>
            </ul>
        </div>
        <div class="post_table">

            <form method="post" enctype="multipart/form-data">  
                <table>
                    <tr>
                        <td>
                            Ad Title of Post:
                        </td>
                        <td>
                            <input type="text" id="ad_title">
                        </td>
                    </tr>


                    <tr>
                        <td>
                            Price:  
                        </td>
                        <td>
                            <input type="text" id="price">
                        </td>
                    </tr>

                    <tr>
                        <td>
                            Model:
                        </td>
                        <td>
                            <input type="text" id="model">
                        </td>
                    </tr>

                        <!-- <td>
                            <input type="button" id="upload" value="Upload" />
                        </td> -->
                    </tr>
                    <tr>
                        <td>
                            Ad description:
                        </td>
                        <td>
                            <textarea rows="5" cols="21" id="description"></textarea>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Name:
                        </td>
                        <td>
                            <input type="text" id="name">
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Email:
                        </td>
                        <td>
                            <input type="text" id="email">
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Phone:
                        </td>
                        <td>
                            <input type="text" id="phone">
                        </td>
                    </tr>
                    <tr/>
                    <td>
                        City:
                    </td>
                    <td>
                        <input type="text" id="city">
                    </td>
                </tr>
                <tr>
                    <td>Add Image</td>
                    <td>
                        <input id="file" type="file" />
                    </td>
                    <tr>
                        <td></td>
                        <td>
                            <button type="submit" id="ad_btn">Submit Post</button>
                        </td>
                    </tr>
                </table>
            </form>
        </div>
    </div>
    <script src="js/jquery.js"></script>
    <script src="js/post.js"></script>

</body>
</html>

post.js

$(document).ready(function()
    $("#ad_btn").on('click', function()


        var title  = $("#ad_title").val();
        var price  = $("#price").val();
        var model = $("#model").val();
        var description = $("#description").val();
        var name  = $("#name").val();
        var email = $("#email").val();
        var phone= $("#phone").val();
        var city= $("#city").val();


        var file_data = $('#file').prop('files')[0];   
        var form_data = new FormData();                  
        form_data.append('file', file_data);



        $.ajax(
            url:'php/post.php',
            type:'POST',
            data:form_data,

            success:function(data)
            
                alert(data);
            
        );

    );
);

post.php

<?php
require_once 'database.php';
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
if (0 < $_FILES['file']['error']) 
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
 else 




echo "done";
$id = NULL;
$title = $_POST['title'];
$price = $_POST['price'];
$model = $_POST['model'];
$description = $_POST['description'];
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$city = $_POST['city'];



$stmt = $dbh->prepare("INSERT INTO posts VALUES (?,?,?,?,?,?,?,?,?)");
$stmt->execute(array($id,$title, $price, $model, $description,  $name, $email, $phone, $city));

【问题讨论】:

您是否尝试过此问题中列出的步骤:***.com/questions/2320069/jquery-ajax-file-upload? 为了更好的解释你也可以访问这个链接***.com/questions/5392344/… 你正在执行一个数组!?这可能吗? 顺便说一句,不要向数据库发送文件INTO,将其保存在您的服务器上并在您的数据库中放置指向该文件的指针,否则数据库稍后会变得很大开。 通过将其他数据附加到form_data 来传递其他数据,例如form_data.append('name','value') 【参考方案1】:

试试:

$(document).ready(function()
    $("#ad_btn").on('click', function()


        var title  = $("#ad_title").val();
        var price  = $("#price").val();
        var model = $("#model").val();
        var description = $("#description").val();
        var name  = $("#name").val();
        var email = $("#email").val();
        var phone= $("#phone").val();
        var city= $("#city").val();


        var file_data = $('#file').prop('files')[0];   
        var form_data = new FormData();                  
        form_data.append('file', file_data);



        $.ajax(
            url:'php/post.php',
            type:'POST',
            data: "title":title,"price":price,"model":model,"description":description,"name":name,"email":email,"phone":phone,"city":city,"form_data",form_data,

            success:function(data)
            
                alert(data);
            
        );

    );
);

【讨论】:

以上是关于使用ajax进行文件上传和数据插入的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax 和 PHP 上传音频文件

ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据

AJAX多文件上传

使用 FormData 和 jQuery 上传 Ajax 大文件无法发布数据

是否可以使用 Ajax 进行文件上传?

使用 Ajax 以一种形式上传数据和文件?