Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ajax不带外键保存在数据库中_Php_Mysql_Ajax_Laravel_Foreign Keys - Fatal编程技术网

Php ajax不带外键保存在数据库中

Php ajax不带外键保存在数据库中,php,mysql,ajax,laravel,foreign-keys,Php,Mysql,Ajax,Laravel,Foreign Keys,我有一个供用户注册的表单。这个表单有一个文件输入,当用户选择一个文件时,ajax会立即将图像上传到服务器的一个目录中。还有一个按钮将提交表单并将用户信息保存在数据库的user表中 每个用户可以有多个图像。在上传文件时,Ajax还将图像的地址保存在photos表中。此表有user\u id列。但由于点击提交按钮时将生成user\u id,并且用户尚未注册,因此我无法在photos表中填写user\u id列。提交整个表单时生成用户id 所以,当表单提交时,我应该通过将用户id添加到user\u i

我有一个供用户注册的表单。这个表单有一个文件输入,当用户选择一个文件时,ajax会立即将图像上传到服务器的一个目录中。还有一个按钮将提交表单并将用户信息保存在数据库的
user
表中

每个用户可以有多个图像。在上传文件时,Ajax还将图像的地址保存在
photos
表中。此表有
user\u id
列。但由于点击提交按钮时将生成
user\u id
,并且用户尚未注册,因此我无法在
photos
表中填写
user\u id
列。提交整个表单时生成用户id

所以,当表单提交时,我应该通过将用户id添加到
user\u id
列来更新
photos
表吗? 或者我必须使用ajax将照片保存在
临时照片
表中,然后在点击提交时将其保存在主照片表中并从临时表中删除

还是有其他办法


如果用户上传文件,但关闭窗口而不点击提交按钮,该怎么办?“我如何发现”窗口已关闭,注册已取消,因此我将删除图像?

您正在尝试解决您创建的问题。如果
user\u id
是要保存的照片的依赖项,请先保存用户。如果使用其他方法,则会使工作流过于复杂

因此,我建议您先注册用户,在会话中保存用户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());
 }
如果必须一起执行,则让ajax请求注册用户,然后将照片保存并将
用户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());
 }

您正在尝试解决您创建的问题。如果
user\u id
是要保存的照片的依赖项,请先保存用户。如果使用其他方法,则会使工作流过于复杂

因此,我建议您先注册用户,在会话中保存用户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());
 }
如果必须一起执行,则让ajax请求注册用户,然后将照片保存并将
用户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());
 }
你可以这样试试-

因为用户可以有多个图像,这意味着它们之间的关系是一对多的。因此,如果使用
图像
表,效果会更好

表:图像

列:
id,用户id,图片,上传地址

Make
user\u id
字段可为空,
image
列将保存上传图像的名称。成功上载iamges记录并将其添加到数据库后,将最后插入的ID保存在会话数组中。一旦用户提交表单,创建一条记录到用户表,抓取最后一条插入记录,检查会话数组中是否有任何数据,如果找到,循环遍历数组并按id选择这些图像记录并更新
用户id
字段。这会解决你的问题

您还要求提供一种方法来删除用户未提交表单的图像。为此,可以运行cronjob/laravel任务调度程序。将删除图像并删除5分钟前(例如)上载的图像和
user\u id
的记录的脚本仍然为空。

您可以这样尝试-

因为用户可以有多个图像,这意味着它们之间的关系是一对多的。因此,如果使用
图像
表,效果会更好

表:图像

列:
id,用户id,图片,上传地址

Make
user\u id
字段可为空,
image
列将保存上传图像的名称。成功上载iamges记录并将其添加到数据库后,将最后插入的ID保存在会话数组中。一旦用户提交表单,创建一条记录到用户表,抓取最后一条插入记录,检查会话数组中是否有任何数据,如果找到,循环遍历数组并按id选择这些图像记录并更新
用户id
字段。这会解决你的问题


您还要求提供一种方法来删除用户未提交表单的图像。为此,可以运行cronjob/laravel任务调度程序。一个脚本将删除5分钟前(例如)上载的图像并删除这些图像的记录,
user\u id
仍然为空。

到目前为止您绑定了什么?将照片保存在临时位置。移动到真实的地方,在提交时添加DB行,这可能是我会做的。最好不要让他们在注册前上传照片。起初,我想上传多个文件,只需一次输入即可预览它们。所以我决定通过ajax立即上传文件。现在我被卡住了。到目前为止你打了什么?把照片保存在临时的地方。移动到真实的地方,在提交时添加DB行,这可能是我会做的。最好不要让他们在注册前上传照片。起初,我想上传多个文件,只需一次输入即可预览它们。所以我决定通过ajax立即上传文件。现在我被卡住了。在重新开始之前,我真的想知道是否有解决办法。如果我通过ajax请求创建一个用户,那么用户可以在点击register之前关闭窗口。所以,随着时间的推移,我会在数据库中记录未注册用户的音调。理想情况下,您应该只存储已注册用户的照片和其他信息。只有在用户单击“注册”后,您才能提交照片和注册详细信息,因此用户退出时您不必担心。如果必须先获取照片,请注册用户并在用户表中创建一个名为
status
的字段,并在上载照片时将其分配给
temp
,并在用户注册后将其更改为
registed
。您可以清除cron作业中的所有
temp
条目。日分