move_uploaded_file无效,但没有错误

时间:2016-04-23 04:38:55

标签: php image-uploading

我的代码一直存在问题,特别是move_uploaded_file。我更改了文件夹,我将图片的权限保存到777,以确保它不是权限问题。我还阅读了一本关于如何使用w3schools.com的move_uploaded_file的php手册。我已经没有关于如何使用php将我的图像上传到文件夹的想法。请帮忙。

以下是使用move_uploeaded_file的代码部分:

<?php
    if (@$_GET['action'] == "ci"){
        echo "<form action='account.php?action=ci' method='POST' enctype='multipart/form-data'><br />
        Available file extention: <stong>.PNG .JPG .JPEG</stong><br /><br />
        <input type='file' name='image' /><br />
        <input type='submit' name='change_pic' value='Change' /><br />
        </form>";
        if (isset($_POST['change_pic'])) {
            $errors = array();
            $allowed_e = array('png', 'jpg', 'jpeg');

            $file_name = $_FILES['image']['name'];
            $file_e = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
            $file_s = $_FILES['image']['size'];
            $file_tmp = $_FILES['image']['tmp_name'];

            if(in_array($file_e, $allowed_e) === false) {
                $errors[] = 'This file extension is not allowed.';
            }

            if ($file_s > 2097152) {
                $errors[] = 'File size must be under 2MB';
            }

            if (empty($errors)) {
                move_uploaded_file($file_tmp, '../images/'.$file_name);
                $image_up = '../images/'.$file_name;
                $check = mysqli_query($connect, "SELECT * FROM users WHERE usename='".@$_SESSION['username']."'");
                $rows = mysqli_num_rows($check);

                while($row = mysqli_fetch_assoc($check)) {
                    $db_image = $row['profile_pic'];
                }
                if($query = mysqli_query($connect, "UPDATE users SET profile_pic = '".$image_up."' WHERE username='".$_SESSION['username']."'"))
                    echo "You have successfuly changed your profile picture!";
        } else {
                foreach($errors as $error) {
                    echo $error, '<br />';
                }
            }
        }
    }
?>

1 个答案:

答案 0 :(得分:1)

这是代码的最后一块,稍有重写。 move_uploaded_file返回一个布尔值,因此我们可以通过设置变量$ result来测试它是真还是假:

        if (empty($errors)) {
            $image_up = 'images/'.$file_name;
            $result = move_uploaded_file($file_tmp, $image_up);

            if($result){
                //this line had a typo usename -> username
                //Also, you should change this over to using parameters and binding values ASAP. This leaves you open to hacking.
                $check = mysqli_query($connect, "SELECT * FROM users WHERE username='".@$_SESSION['username']."'");
                $rows = mysqli_num_rows($check);

                while($row = mysqli_fetch_assoc($check)) {
                    $db_image = $row['profile_pic'];
                }
                $q = "UPDATE users SET profile_pic = '".$image_up."' WHERE username='".$_SESSION['username']."'";
                if($query = mysqli_query($connect, $q)){
                    echo "You have successfuly changed your profile picture!";
                    }
            } else {
                echo "Upload failed.";
            }
    } else {
            foreach($errors as $error) {
                echo $error, '<br />';
            }
        }
    }
}