Para o primeiro erro, o array errors está fora do foreah, então você não limpa o erro para cada arquivo, e a consulta a inserir está fora do if que verifica os erros, portanto, é sempre executado
Para o segundo erro o mesmo, a consulta é executada sempre é preciso verificar se o arquivo foi carregado.
<?php
include_once('connect.php');
if(isset($_FILES['files'])){
$filesErrors = 0;
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
// MOved errors inside the foreach to clear it each loop
$errors = array();
// Check file is uploaded
if ($_FILES['files']['error'][$key] == UPLOAD_ERR_NO_FILE){
// Continue with the next file
continue;
}
$file_name = $key.$_FILES['files']['name'][$key];
$file_size = $_FILES['files']['size'][$key];
$file_type = $_FILES['files']['type'][$key];
if($file_type == "image/gif"){
$sExt = ".gif";
} elseif($file_type == "image/jpeg" || $file_type == "image/pjpeg"){
$sExt = ".jpg";
} elseif($file_type == "image/png" || $file_type == "image/x-png"){
$sExt = ".png";
}
if (!in_array($sExt, array('.gif','.jpg','.png'))) {
$errors[] = "Image types alowed are (.gif, .jpg, .png) only!";
}
$file_tmp = $_FILES['files']['tmp_name'][$key];
$file_type = $_FILES['files']['type'][$key];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
if(empty($errors) == true){
$desired_dir = "user_data";
// Execute query inside the errors check
$query = "INSERT into offers_pics (`offer_id`,`pic_name`,`pic_type`) VALUES ('$user_id','$file_name','$file_type'); ";
$result = mysqli_query($link,$query);
if(is_dir($desired_dir) == false){
mkdir("$desired_dir", 0700); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name) == false){
move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
}else{ // rename the file if another one exist
$new_dir = "$desired_dir/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
}else{
$filesErrors++;
print_r($errors);
}
}
if ($filesErrors == 0){
echo 'Success';
}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="files[]"> <br/>
<input type="file" name="files[]"> <br/>
<input type="file" name="files[]"> <br/>
<input type="file" name="files[]"> <br/>
<input type="file" name="files[]" > <br/><br/>
<input type="submit"/>
</form>