2016-12-14 5 views
0

私はユーザーがサインアップするためのフォームを持っています。このフォームにはファイル入力があり、ユーザーがファイルを選択すると、即座にajaxによってサーバーのディレクトリに画像がアップロードされます。フォームを送信し、ユーザ情報をデータベースのuserテーブルに保存するボタンもあります。ajax外部キーを持たないデータベースに保存

各ユーザーは複数の画像を持つことができます。ファイルがアップロードされると、Ajaxは画像のアドレスもphotosに保存します。この表はuser_id列です。送信ボタンが押されてユーザーがまだ登録されていない場合user_idが生成されるので、user_idの列をphotosの表に記入することはできません。ユーザーのIDはフォーム全体が送信されるときに生成されます。

user_id列にユーザーのIDを追加してフォームを送信すると、photosテーブルを更新する必要がありますか? または私は写真をajaxでtemporary_photosテーブルに保存する必要があります。サブミット時にメイン写真テーブルに保存して一時テーブルから削除しますか?

または別の方法がありますか?

ユーザーがファイルをアップロードしても、送信ボタンを押すことなくウィンドウを閉じるとどうなりますか?どのように私はウィンドウが閉じていると私は画像を削除するので、登録がキャンセルされて見つける?

+0

あなたはこれまで何を結んでいますか? –

+0

一時的な場所に写真を保存します。実際の場所に移動し、提出時にDB行を追加すると、私はおそらくやることです。 – apokryfos

+0

登録する前に写真をアップロードしない方が良いです。 – smoqadam

答えて

2

作成した問題を解決しようとしています。 user_idが写真を保存する依存関係にある場合は、まずユーザーを保存させてください。そうしないと、ワークフローが複雑になります。

だから、まずユーザーを登録し、セッションにユーザーIDを保存(またはユーザーをログイン)してから写真をアップロードすることをお勧めします。

一緒に行う必要がある場合は、ajaxリクエストでユーザーを登録させてから写真を保存し、user_idをセッション変数に保存します。次回に写真をアップロードすると、セッション変数からユーザーを取得して写真を保存できます。

function savePhoto(Request $input){ 
    if(Session::has('user_id'){ 
    $user = User::find(Session::get('user_id')); 
    } 
    else{ 
    $user = User::create($input->all()); 
    } 

    $user->photo->save($input->all()); 
} 
+0

私は実際にやり直す前に解決策があるかどうか知りたいと思っています。もし私がajaxリクエストでユーザーを作成すると、ユーザーはレジスターを押す前にウィンドウを閉じることができます。時間の経過とともにデータベースに登録されていないユーザーの声が聞こえます。 – Niloofar

+0

理想的には、登録されたユーザーのみの写真やその他の情報を保管するのが理想的です。ユーザーが登録をクリックした後でなければ、写真と登録の詳細を提出することはできません。したがって、ユーザーが元に戻ったときに心配する必要はありません。 写真を最初に取得する必要がある場合は、ユーザーを登録し、ユーザーテーブルに「status」というフィールドを作成し、写真をアップロードしているときに「temp」に割り当て、ユーザー登録後に「registered」に変更します。そして、あなたはcronジョブからすべての「temp」エントリをクリアすることができます。これもまたワークフローを複雑にしています。 –

+0

ありがとうございました。私はこれが最高の答えだと思います。私は[このウェブサイト](http://www.sheypoor.com/listing/new)で私が思いついたことの例を見つけましたが、それはペルシア語です。広告をオンラインにするウェブサイトです。左の列の+ボタンをクリックすると、広告やユーザーを登録せずにサーバーに画像を送信します – Niloofar

0

ユーザーが関係の間には多くの1つであることを意味し、複数のイメージを持つことができるので、これは

をway-試すことができます。したがって、imagesテーブルを使用する方が良いでしょう。

表:画像

列(複数可):id, user_id, image, uploaded_at

user_idフィールドがNULL可能であることを確認してimage列がアップロードした画像の名前を保存します。 iamgesレコードを正常にアップロードして追加すると、最後に挿入されたIDをセッション配列に保存します。ユーザーがフォームを送信したら、ユーザーテーブルへのレコードを作成し、最後のレコードを取得し、セッション配列にデータがあるかどうかを確認し、配列をループしてidでレコードを選択し、user_idフィールドを更新します。これはあなたの問題を解決します。

また、ユーザーがフォームを送信しなかったイメージを削除する方法も求めました。これを行うには、cronjob/laravelタスクschedularを実行することができます。 5分前にアップロードされた画像とuser_idにアップロードされた画像の画像を削除してレコードを削除するスクリプトは、まだnullです。

関連する問題