我有一个上传文件的表单,但是如果当前文件已存在于数据库中,则此脚本也应该更新当前文件。这就是它停止的地方。脚本中的一切正常,除了最后的if / else,如果我将包括。它全部在foreach循环中,因为有多个文件可以上传。它位于" move_uploaded_file"它失败了。
它上传所有文件,但只上传数据库中的一行,也忽略添加更多。
我之前从未尝试过这样的方法,所以我试着寻找答案,但找不到我需要的东西。我可能错过了一些明显的东西......
foreach ($_FILES['ufile']['name'] as $f => $name)
switch ($f) {
case '0':
$type = '1';
break;
case '1':
$type = '2';
break;
case '2':
$type = '3';
break;
case '3':
$type = '4';
break;
default:
$type = false;
break;
}
$allowedExts = array(
'pdf',
'doc',
'docx'
);
$extension = end(explode(".", $name));
if ($_FILES['ufile']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['ufile']['error'][$f] == 0) {
if ($_FILES['ufile']['size'][$f] > $max_file_size) {
$errors[] = "Some errormessage.";
continue; // Skip large files
}
elseif(!in_array($extension, $allowedExts )){
$errors[] = "Some errormessage.";
continue; // Skip invalid file formats
}
elseif($type == false){
$errors[] = "Some errormessage.";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["ufile"]["tmp_name"][$f], $path.$name))
$qGetFil = $mysqli->prepare("SELECT * FROM moter_filer WHERE mote_id=?");
$qGetFil->bind_param('s', $_GET['id']);
$qGetFil->execute();
$rGetResults = $qGetFil->get_result();
$rGetFil = $rGetResults->fetch_assoc();
$rGetNewRow = $rGetResults->num_rows;
if($rGetNewRow > '0' && $type == $rGetFil['type']){
unlink($_SERVER['DOCUMENT_ROOT'] . '/filer/' . $rGetFil['fil']);
$stmt = $mysqli->prepare("UPDATE moter_filer SET fil= ? WHERE mote_id= ? AND type= ?");
$stmt->bind_param('sss', $name, $_GET['id'], $type);
$stmt->execute();
$stmt->close();
}elseif($rGetNewRow == '0'){
$stmt = $mysqli->prepare("INSERT INTO moter_filer(type,mote_id, fil) VALUES (?,?,?)");
$stmt->bind_param('sss', $type, $_GET['id'], $name);
$stmt->execute();
$stmt->close();
}
$success[] = "Some sccessmessage.";
}
}
}
答案 0 :(得分:0)
我这一行:
if(move_uploaded_file($_FILES["ufile"]["tmp_name"][$f], $path.$name))
Ther不是花括号,因此仅当move_upload_file返回true时才执行查询。 问题是即使move_upload_file失败也会执行其余的行 因为它们超出了if条件:
$rGetFil = $qGetFil->fetch_array();
$rGetNewRow = $qGetFiler->num_rows;
你也在从文件名中读取扩展名而不是使用mime类型"输入"里面的价值:
$_FILES['ufile']['type'][$f]