Php ajax不带外键保存在数据库中
我有一个供用户注册的表单。这个表单有一个文件输入,当用户选择一个文件时,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
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,图片,上传地址
Makeuser\u id
字段可为空,image
列将保存上传图像的名称。成功上载iamges记录并将其添加到数据库后,将最后插入的ID保存在会话数组中。一旦用户提交表单,创建一条记录到用户表,抓取最后一条插入记录,检查会话数组中是否有任何数据,如果找到,循环遍历数组并按id选择这些图像记录并更新用户id
字段。这会解决你的问题
您还要求提供一种方法来删除用户未提交表单的图像。为此,可以运行cronjob/laravel任务调度程序。将删除图像并删除5分钟前(例如)上载的图像和user\u id
的记录的脚本仍然为空。您可以这样尝试-
因为用户可以有多个图像,这意味着它们之间的关系是一对多的。因此,如果使用图像
表,效果会更好
表:图像
列:id,用户id,图片,上传地址
Makeuser\u id
字段可为空,image
列将保存上传图像的名称。成功上载iamges记录并将其添加到数据库后,将最后插入的ID保存在会话数组中。一旦用户提交表单,创建一条记录到用户表,抓取最后一条插入记录,检查会话数组中是否有任何数据,如果找到,循环遍历数组并按id选择这些图像记录并更新用户id
字段。这会解决你的问题
您还要求提供一种方法来删除用户未提交表单的图像。为此,可以运行cronjob/laravel任务调度程序。一个脚本将删除5分钟前(例如)上载的图像并删除这些图像的记录,user\u id
仍然为空。到目前为止您绑定了什么?将照片保存在临时位置。移动到真实的地方,在提交时添加DB行,这可能是我会做的。最好不要让他们在注册前上传照片。起初,我想上传多个文件,只需一次输入即可预览它们。所以我决定通过ajax立即上传文件。现在我被卡住了。到目前为止你打了什么?把照片保存在临时的地方。移动到真实的地方,在提交时添加DB行,这可能是我会做的。最好不要让他们在注册前上传照片。起初,我想上传多个文件,只需一次输入即可预览它们。所以我决定通过ajax立即上传文件。现在我被卡住了。在重新开始之前,我真的想知道是否有解决办法。如果我通过ajax请求创建一个用户,那么用户可以在点击register之前关闭窗口。所以,随着时间的推移,我会在数据库中记录未注册用户的音调。理想情况下,您应该只存储已注册用户的照片和其他信息。只有在用户单击“注册”后,您才能提交照片和注册详细信息,因此用户退出时您不必担心。如果必须先获取照片,请注册用户并在用户表中创建一个名为status
的字段,并在上载照片时将其分配给temp
,并在用户注册后将其更改为registed
。您可以清除cron作业中的所有temp
条目。日分