从php脚本

时间:2016-10-04 17:13:18

标签: javascript php

我正在开发一个html页面,其中包含一个允许用户输入信息和上传文件的表单。所有信息都将插入Mysql数据库中。

在Javascript中,我使用XMLHttpRequest将文件发送到服务器,使用“upload.php”重命名(以避免重复名称)并将其移动到上传目录中。
为了更好的用户体验,这将在提交整个表单之前完成。

我的问题是:我如何存储新的文件名(在upload.php中定义),以便在表单提交“submit.php”中使用它们? 原因是在“submit.php”中,我首先在“user”表中插入用户信息,然后选择将在“files”表中插入文件名的“user_id”(自动增量)。

php会话可以成为一种方法吗?有另一种方式吗?谢谢你的帮助

HTML:

<form action="submit.php" method="post" id="submitform">
<div>
<--!user info part1-->
</div>
<div id="filesContainer" class="eltContainer">
    <input type="file" id="filesList" multiple>
</div>
<div>
<--!user info part2-->
</div>

的javascript:

var fd = new FormData()
var xhr = new XMLHttpRequest()
for (var i=0,nb = fichiers.length; i<nb; i++) {
    var fichier = fichiers[i]
    fd.append(fichier.name,fichier)
}
xhr.open('POST', 'upload.php', true)

upload.php:

<?php 
foreach($_FILES as $file){
    $filename = date('Y') . date('m') . date('d') . date('H') . date('i') . basename($_FILES[$file]['name']);
    move_uploaded_file( $file['tmp_name'],"../upload_dir/" .$filename);  
    }
exit;

1 个答案:

答案 0 :(得分:1)

我会考虑使用类似md5的内容来获取唯一的文件名。

尽管如此,您可以将文件名推送到某个数组中,然后返回这些文件名,作为发布请求的结果,并将它们放回到某个输入字段中。

要检索回复,只需将此行添加到var allValues = from p in _pContext.Persons.Include("Items.Properties") where p.Id == currentPerson.Id from i in p.Items //This is a list that contains "Items" select i;

下面的代码中
open

如果您想考虑使用简单的库来处理AJAX请求,例如axios。它是基于承诺的浏览器HTTP客户端,使用起来非常简单,节省了您的时间和精力,因为您不必记住您刚才写的所有这些内容。

这是一种方法,但我认为你也可以使用xhr.onreadystatechange = function { // If the request completed and status is OK if (req.readyState == 4 && req.status == 200) { // keep in mind that fileNames here are JSON string // as you should call json_encode($arrayOfFilenames) // in your php script (upload.php) var fileNames = xhr.responseText; } } ,它完全有效。我的猜测是你此时没有登录用户,所以我的想法如下:

  • 将文件名放入$_SESSION

  • 使用数据库事务 - 如@Marc B建议的那样 - 用于连接文件 用户

  • 如果没有错误,只需从$ _SESSION中删除文件名,如果有的话,只需将用户重定向回表单(可能有一些信息出错了),这样他就不会必须重新上传文件,因为文件名仍在$_SESSION