如何先验证多个文件,并仅在表单数据的其余部分有效时才将其添加到数据库中?



我在编写PHP和MySQL方面没有太多经验,因此正在寻求帮助。我想做以下事情:我有一个表单,用户可以在其中输入他们的联系方式,在表单的末尾有一个多文件上传按钮。现在,如果他们提交了表格,就会发生以下情况:首先,我想检查是否所有上传的文件都是有效的(文件类型是可以的(,如果这是真的,那么联系方式应该输入到db_Z的table_X中。然后,所有文件都应该被移动/上传到服务器,并且在db_Z的表_Y中,应该插入文件名、(我们称之为(事件ID以及上传的日期和时间,而事件ID是联系人详细信息条目ID的外键。

到目前为止,我拥有的代码已经接近尾声,但缺少最后一步。无论文件的验证结果如何,它都会将联系人详细信息添加到数据库中。

如果所有文件都有效,我如何更改它,使它只向数据库中添加一些内容?而且,无论上传了多少文件,它都只向数据库中添加一次联系人详细信息?

提前感谢

这是我的代码:

<?php
if(isset($_POST['submit'])){
$obs_fname = filter_input(INPUT_POST, 'firstname');
$obs_lname = filter_input(INPUT_POST, 'lastname');
$obs_address = filter_input(INPUT_POST, 'adresse');
// Include the database configuration file
include_once 'dbConfig.php';
$query = "INSERT INTO bear (obs_fname, obs_lname, obs_address)
values ('$obs_fname','$obs_lname','$obs_address')";
$result=$db->query($query);
// verify results
if(!$result) {
$message  = "ERROR SAVING POST : ".$db->error . "n";
$db->close();
echo ($message);
return false;
}
/**
* get the last inster id of the Post
**/
$post_id = $db->insert_id;
echo "Post id=".$post_id ."<br>n";
// File upload configuration
$targetDir = "uploads/";
$allowTypes = array('jpg','png','jpeg','gif');
if(isset($_FILES['files'])) {
foreach($_FILES['files']['name'] as $key => $name) {
$image_tmp = $_FILES['files']['tmp_name'][$key];
move_uploaded_file($image_tmp, './uploads/' . $name);
/**
* now insert the image with the post_id
**/
$query = "INSERT INTO images (eventID, file_name, uploaded_on)
VALUES ('$post_id', '$name', NOW())";
$result=$db->query($query);
// verify results
if(!$result) {
$message  = "ERROR INSERT IMAGE : ".$db->error . "n";
$db->close();
echo ($message);
return false;
}
}
}
header("Location: upload-complete.php");
}

您需要在服务器端使用MIME_content_type((或使用一个图像函数来验证MIME类型,如果它不是像getimagesize((这样的图像,则该函数将返回FALSE

你需要这样的函数+你需要验证大小$_FILES['files]['size]和文件扩展名$file_ext = strtolower(pathinfo($_FILES['files']['name'], PATHINFO_EXTENSION))

function validate_images($image_tmp){
foreach($_FILES['files']['tmp_name'] as $key => $name) { // you need the tmp_name here and not "name" name is the one was when the file was in the client computer, After the form sent, the file will be in `/tmp` on the server and that is where php is accessing it.
$image_tmp = $_FILES['files']['tmp_name'][$key];
if(strpos(mime_content_type($image_tmp),"image")){
return true;
}else{
return false;
}
}
if(validate_images($image_tmp)){
// do the rest
}else{
die("no no no");
}

另请查看此处w3school图片上传

相关内容

  • 没有找到相关文章

最新更新