【问题标题】:SWITCH statement for profile picture uploads用于上传个人资料图片的 SWITCH 语句
【发布时间】:2013-03-31 11:26:06
【问题描述】:

我有一个 switch 语句,它确定上传的图像的文件类型以在我的应用程序中用作头像,但它似乎有点错误,因为它允许成功注册,无论是否存在允许的文件类型与否,并且不会返回任何错误消息。提交的文件类型不被允许。

$submit = $_POST['submit'];

if ($submit == 'Sign up!') {
    require_once("db_connect.php");
    $submit = clean_string($_POST['submit']);
    $first_name = clean_string($_POST['first-name']);
    $last_name = clean_string($_POST['last-name']);
    $email = clean_string($_POST['email']);
    $password = clean_string($_POST['password']);
    $confirm_password = clean_string($_POST['confirm-password']);

    //Output variables
    $register_bad_message = '';
    $register_good_message = '';

    require_once($_SERVER['DOCUMENT_ROOT'] . '/recaptcha/recaptchalib.php');
    $privatekey = "6Ldbd8ASAAAAAFz8VT29H5w4WLNjsbI-mFY2QkaC";
    $resp = recaptcha_check_answer ($privatekey,
                                    $_SERVER["REMOTE_ADDR"],
                                    $_POST["recaptcha_challenge_field"],
                                    $_POST["recaptcha_response_field"]);
    if (!$resp->is_valid) {
        $errMessage = $resp->error;
        $register_bad_message = '<div class="alert alert-error">The reCAPTCHA you entered wasn\'t correct. Please try again.</div>';?>
        <script>
            $('a.account-register').trigger('click');
        </script><?php
    } else {
        if ($first_name&&$last_name&&$email&&$password&&$confirm_password) {
            if ($password == $confirm_password) {
                if (strlen($password) > 25 || strlen($password) < 6) {
                    $register_bad_message = '<div class="alert alert-error">Please enter a password between 6 and 25 characters.</div>';?>
                    <script>
                        $('a.account-register').trigger('click');
                    </script><?php
                } else {
                    if($db_server) {
                        $first_name = clean_string($first_name);
                        $last_name = clean_string($last_name);
                        $email = clean_string($email);
                        $password = clean_string($password);
                        mysql_select_db($db_database);

                        $taken = mysql_query("SELECT email FROM users WHERE email='$email'");
                        $count = mysql_num_rows($taken);
                        if ($count > 0) {
                            $register_bad_message = '<div class="alert alert-error">The email you have entered is already associated with a Screening account. Please choose another.</div>';?>
                            <script>
                                $('a.account-register').trigger('click');
                            </script><?php
                        } else {
                            if ($_FILES) {
                                //Put file properties into variables
                                $file_name = $_FILES['profile-image']['name'];
                                $file_size = $_FILES['profile-image']['size'];
                                $file_tmp_name = $_FILES['profile-image']['tmp_name'];


                                //Determine filetype
                                switch ($_FILES['profile-image']['type']) {
                                    case 'image/jpeg': $ext = "jpg"; break;
                                    case 'image/png': $ext = "png"; break;
                                    default: $ext = ''; break;
                                }

                                if ($ext) {
                                    //Check filesize
                                    if ($file_size < 5242880) {
                                        //Process file - resize, clean up filename and move to safe location
                                        $image = new SimpleImage();
                                        $image->load($file_tmp_name);
                                        $image->resizeToWidth(250);
                                        $image->save($file_tmp_name);


                                        $n = "$file_name";
                                        $n = ereg_replace("[^A-Za-z0-9.]", "", $n);
                                        $n = strtolower($n);
                                        $n = "avatars/$n";
                                        move_uploaded_file($file_tmp_name, $n);
                                    } else {
                                        $register_bad_message = '<div class="alert alert-error">Please ensure your chosen file is less than 5MB.</div>';?>
                                        <script>
                                            $('a.account-register').trigger('click');
                                        </script><?php
                                    }
                                } else if (!empty($ext)) {
                                    $register_bad_message = '<div class="alert alert-error">Please ensure your image is of filetype .jpg or.png.</div>';?>
                                    <script>
                                        $('a.account-register').trigger('click');
                                    </script><?php
                                }
                            }
                            $password = md5($password);
                            $query = "INSERT INTO users (first_name, last_name, email, password, image) VALUES ('$first_name', '$last_name', '$email', '$password', '$n')";
                            mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
                            $register_good_message = '<div class="alert alert-success">Registration successful!</div>';?>
                            <script>
                                $('a.account-register').trigger('click');
                            </script><?php
                        }
                    } else {
                        $register_bad_message = '<div class="alert alert-error">Error: could not connect to the database.</div>';?>
                        <script>
                            $('a.account-register').trigger('click');
                        </script><?php
                    }
                    require_once("db_close.php");
                }
            } else {
                $register_bad_message = '<div class="alert alert-error">Passwords failed to match. Please try again.</div>';?>
                <script>
                    $('a.account-register').trigger('click');
                </script><?php
            }
        } else {
            $register_bad_message = '<div class="alert alert-error">Please fill in all fields before continuing.</div>';?>
            <script>
                $('a.account-register').trigger('click');
            </script><?php
        }
    }
}

例如,上传 .GIF 文件不会出现错误并显示“注册成功”消息,但登录个人资料时,不会显示上传的个人资料照片。我在想代码拒绝了文件类型并且没有将它存储在数据库中,但仍在处理注册,而不是取消它,这是它应该做的。

【问题讨论】:

    标签: php mysql database switch-statement avatar


    【解决方案1】:

    您必须将 $ext 设置为 false 而不是 '' 因为这对于 if 语句来说不是假的。

    default: $ext = false; break;
    

    或者您检查$ext 是否不是空字符串:

    if ($ext != '') {
    

    为了防止在上传无效文件类型时进行注册,您必须输入

    $password = md5($password);
    $query = "INSERT INTO users (first_name, last_name, email, password, image) VALUES ('$first_name', '$last_name', '$email', '$password', '$n')";
    mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
    $register_good_message = '<div class="alert alert-success">Registration successful!</div>';?>
    <script>
    $('a.account-register').trigger('click');
    </script><?php
    

    if($ext != '') { /*Put code at the end of if*/}if($ext) { /*Put code at the end of if*/ } 的内部。否则,是否存在有效的文件类型无关紧要。

    【讨论】:

    • 您好,感谢您的帮助!不幸的是,您的解决方案似乎都不起作用。应用程序正在成功提交注册,除了上传的头像,因此检查显然工作正常,但如果上传了无效的文件类型,则注册不应继续。
    【解决方案2】:

    有时,$_FILES['profile-image']['type'] 的内容没有设置。例如,如果您从 cURL 或套接字提交文件。 我会尝试从 $_FILES['profile-image']['tmp_name']

    为自己加载 mime 类型

    编辑:

    我也注意到了这种结构:

      if ($_FILES) { .... }
    

    应该有更好用的

      if (isset($_FILES[key])){ .... }
    

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 2014-04-14
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2017-05-04
      • 2011-11-07
      • 2020-01-04
      相关资源
      最近更新 更多