2016-10-04 49 views
3

我工作在一个HTML页面,其中包含一个允许用户输入他们的信息和上传文件的表格。所有信息将被插入到Mysql数据库中。从php脚本存储信息

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

我的问题是:我如何存储新的文件名(在upload.php中定义)在表单提交“submit.php”中使用它们?
这样做的原因是,在“submit.php”中,我首先插入“用户”表中的用户信息,然后选择“文件”表中将用文件名插入的“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; 
+4

简单有文件名还是:启动一个数据库事务,插入一个模板记录(裸必要创造纪录最低),得到其插入ID,使用该ID来建立你的文件名,然后在完成文件操作后更新记录/提交事务。 –

+0

在DB中插入文件名时,我不需要文件插入ID,但用户插入ID(作为外键)。问题是当我做文件操作/插入我还没有达到用户插入至极后提交整个表单..我也想尽量减少数据库交易。无论如何感谢 –

+0

同样的事情成立。创建一个占位符用户记录,以便您可以获得一个用户ID,然后您可以将其附加到占位符文件记录,等等等等等等。所有你以后需要的是一个看门人的脚本来杀死任何被遗弃的骨骼,所以你不会用分数填充数据库。 –

回答

1

我会考虑使用像md5为独特的文件名。

不过,您可以将文件名推送到某个数组中,并且作为发送请求的结果返回这些文件名,并将它们放回到某个输入字段中。

检索响应只是这行添加到您的代码如下open

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; 
    } 
} 

如果您想考虑使用一个简单的库AJAX请求,比如axios。它是基于承诺的浏览器HTTP客户端,使用非常简单,并且节省了您一些时间和精力,因此您不必记住您和我刚写入的所有内容。

这是一种方法,但我认为你也可以使用$_SESSION,它是完全有效的。我的猜测是你没有在用户在这一点登录,所以我的想法是:

  • 把文件名到$_SESSION

  • 使用DB交易 - 如@Marc乙建议 - 以与
    用户连接文件

  • 如果没有错误,只是从$ _SESSION删除的文件名,如果有一些,只是将用户重定向回的形式(可能有一些信息是什么地方出了错),并这样他不需要重新布局d文件,因为你在$_SESSION

+0

感谢您的回答。但是在javascript中的XMLHttpRequest API中调用“upload.php”后,我怎么才能得到post请求的结果呢? –

+0

我修改了我的答案,包括这些信息。 –

+0

“xhr.responseText”正是我所需要的。我将继续在php会话中挖掘并查看使用哪一个。谢谢你的帮助。 –