MySQL查询没有在foreach中循环

时间:2014-05-13 12:09:48

标签: php

我有一个上传文件的表单,但是如果当前文件已存在于数据库中,则此脚本也应该更新当前文件。这就是它停止的地方。脚本中的一切正常,除了最后的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.";
        }
    }
}

1 个答案:

答案 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]