Javascript 从php脚本存储信息

Javascript 从php脚本存储信息,javascript,php,Javascript,Php,我正在开发一个html页面,其中包含一个表单,允许用户输入信息并上传文件。所有信息都将插入Mysql数据库 在Javascript中,我使用XMLHttpRequest将文件发送到服务器,并使用“upload.php”重命名(以避免名称重复)并将其移动到上载目录中。 为了获得更好的用户体验,这将在提交整个表单之前完成 我的问题是:如何存储新的文件名(在upload.php中定义)以在表单提交“submit.php”中使用它们? 原因是,在“submit.php”中,我首先在“user”表中插入用

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

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

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

php会话是实现这一点的一种方法吗?还有别的办法吗?谢谢你的帮助

html:


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)
var fd=new FormData()
var xhr=newXMLHttpRequest()

对于(var i=0,nb= FICHist.Stand;i

),我会考虑使用类似于唯一文件名的东西。

然而,您可以将文件名推送到某个数组中,然后作为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请求库,例如,它是基于浏览器的基于HTTP的客户端,使用起来非常简单,节省了一些时间和精力,因为您不必记住您和我刚写的所有东西。 这是一种方法,但我认为您也可以使用

$\u SESSION
,它非常有效。我猜您目前还没有登录用户,因此我的想法如下:

  • 将文件名放入
    $\u会话

  • 使用db事务(如@Marc B建议的那样)将文件连接到
    使用者

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


简单:启动一个db事务,插入一个骨架记录(创建该记录所需的最小值),获取其插入ID,使用该ID构建文件名,然后在完成文件操作后更新记录/提交事务。在db中插入文件名时,我不需要文件插入ID,而是需要用户插入ID(作为外键)。问题是,当我进行文件操作/插入时,我还没有达到提交整个表单后的用户插入。我还想最小化数据库事务。谢谢。总之,同样的事情成立。创建一个占位符用户记录,以便您可以获得一个用户ID,然后可以将其附加到占位符文件记录,等等等等。a之后,您需要一个看门人脚本来杀死任何被丢弃的骨架,这样您就不会在数据库中填充片段。在这种情况下,我需要文件名或ID来将用户ID附加到占位符。问题仍然是,到目前为止,我如何存储文件信息?@BenS。注意,您的代码允许用户上载带有某种随意性的文件名称。如果我想上传
一些邪恶的.exe
,我可以,你只需预先在上面写上日期。这不好。此外,通过在文件名中发送
。/
,可以在文件系统中向上移动。这是非常危险的。使用UUID生成文件名,或者根据数据库中的ID命名文件。谢谢或者答案。但是在javascript的XMLHttpRequest API中调用了“upload.php”,那么我如何才能得到post请求的结果呢?我已经修改了我的答案,包括这些信息。“xhr.responseText”正是我所需要的。我还将继续在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;
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; 
  }
}