我的网站上有一个文件上传功能,在提交帖子后立即执行。
唯一的问题是,如果在提交帖子后文件上传出错,例如文件太大,帖子仍然会被提交。
目前,如果文件上传失败,我必须删除插入的帖子,但我认为这可能是更好的解决方案。
代码看起来像这样:
$query=$con->query('INSERT INTO `posts` (`user`,`comment`) VALUES("'.$user->id.'","'.$comment.'")'); //Submit post
$postID = $con->insert_id; //This variable is needed for the file upload
if (empty($error)){ //proceed with file upload
//.....
if (empty($error))
$con->query('DELETE FROM `posts` WHERE `id` = "'.$postID.'" LIMIT 1'); //Delete post if file error
}else{
$con->query('UPDATE `posts` SET `image` =".$imageID." WHERE `id` = "'.$postID.'" LIMIT 1'); //
}
答案 0 :(得分:0)
根据您的使用情况,您可以在插入前调用START TRANSACTION
,在成功时调用COMMIT
,或在出错时调用ROLLBACK
。
正如durbnpoisn指出的那样,你应该检查你的SQL注入查询。
答案 1 :(得分:0)
唯一的问题是,如果文件出错 在提交帖子后上传,例如文件也是如此 很大,这个帖子仍然会被提交。
是的,无论是否有错误,都会一直提交表格。 这里更好的解决方案是将您的任务转变为小任务。所以在单词中 - 如果没有错误,请将图像路径写入表中。
将这些单词转换为代码会导致类似这样的内容:
<?php
// If there were not errors during form submission
// As you might know 0 means there are absolutely no errors
if ($_FILES['field_name']['error']) == 0) {
$db->insert(....);
$id = $db->getLastId();
$uploader->upload($_FILES, $id);
} else {
// Just display errors and don't do anything here
}
这样你绝对保证你的东西会被插入到一个表中,以防绝对没有错误,所以根本不需要另外的查询。