2016-10-04 65 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會話中挖掘並查看使用哪一個。謝謝你的幫助。 –