从php脚本存储信息


Storing information from php script

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

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

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

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;

我会考虑对唯一文件名使用md5之类的东西。

然而,您可以将文件名推入某个数组,然后返回这些文件名,作为post请求的结果,并将它们放回某个输入字段。

要检索响应,只需将以下行添加到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 transactions -正如@Marc B建议的那样-连接文件到
    用户

  • 如果没有错误只是从$_SESSION中删除文件名,如果有一些,只是将用户重定向到表单(可能有一些信息出错),和这样他就不必重新加载文件,因为你的文件名仍然在$_SESSION