2016-10-04 9 views
3

私は自分の情報を入力してファイルをアップロードできるフォームを含むhtmlページを作成しています。すべての情報はMySQLデータベースに挿入されます。PHPスクリプトからの情報の保存

Javascriptでは、XMLHttpRequestを使用してサーバーにファイルを送信し、「upload.php」を使用して名前を変更して(アップロードされた名前を避けるために)アップロードディレクトリに移動します。
ユーザーエクスペリエンス向上のため、フォーム全体を送信する前にこれを行います。

私の質問は:(submit.phpの)フォーム提出で新しいファイル名(upload.phpで定義)を使用するにはどうすればいいですか?
"submit.php"では、まず "user"テーブルにユーザー情報を挿入し、 "ファイル"テーブルにファイル名を挿入する "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

シンプルで、まだファイル名を持っている原因:、DBトランザクションを開始スケルトンレコード(レコードを作成するために必要な最低限)を挿入し、その挿入IDを取得し、IDがあなたのファイル名を構築することを使用ファイルの操作が完了したらレコードを更新するかトランザクションをコミットします。 –

+0

ファイル名をDBに挿入すると、ファイル挿入IDは必要ありませんが、ユーザーはIDを外部キーとして挿入します。問題は私がファイルの操作/挿入を行うときですが、まだフォーム全体を送信した後にユーザーの挿入が届かないということです.dbトランザクションも最小限に抑えたいと思っています。とにかくおかげです。 –

+0

同じものが成立します。プレースホルダーのユーザーレコードを作成して、ユーザーIDを取得できるようにします。プレースホルダーのファイルレコードに添付することができます。あなたが後で必要とするのは、破棄されたスケルトンを殺すための手直りスクリプトです。そうすれば、部分的にDBを埋めることはできません。この場合、 –

答えて

1

固有のファイル名についてはを参照してください。

しかし、ファイル名をいくつかの配列にプッシュして、リクエスト後の結果としてそれらのファイル名を返すことができ、いくつかの入力フィールドに戻すことができます。あなたはaxiosのように、AJAX要求のための簡単なライブラリを使用することを検討したい場合は、単に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; 
    } 
} 

以下のコードにこの行を追加し、応答を取得するために

。これは、ブラウザ用のHTTPクライアントをベースにしていることを約束しています。本当に使いやすく、時間と労力を節約できます。

これは1つのアプローチですが、$_SESSIONも使用できると思います。これは完全に有効です。私の推測では、あなたがこの時点でログインしているユーザれていないので、次のように私の考えは次のとおりです。

  • $_SESSION

  • 使用デシベル取引にファイル名入れ - @Marc Bが示唆したように - に
    ユーザーとファイルを接続

  • エラーがちょうど、$ _SESSIONからファイル名を削除していないいくつかあった場合、単に(おそらく何が悪かったのか、いくつかの情報を持つ)フォームに戻ってユーザーをリダイレクトし、この方法があった場合彼はreuploaする必要はありませんDファイル、あなたが$_SESSION

+0

答えをありがとう。しかし、 "upload.php"はjavascriptのXMLHttpRequest APIで呼び出されますが、どうすれば投稿リクエストの結果を得ることができますか? –

+0

私はこの情報を含む私の答えを変更しました。 –

+0

"xhr.responseText"はまさに私が必要としていたものです。私はPHPセッションでも掘り下げて、どちらを使うかを見ていきます。ご協力いただきありがとうございます。 –

関連する問題