2013-03-31 37 views
0

我有一個switch語句,它決定了上傳的圖像的文件類型,作爲我的應用程序中的頭像使用,但它似乎有點故障,只要它允許成功註冊,無論是否存在允許的文件類型,並且沒有錯誤消息正在返回。提交的文件類型不被允許。用於個人資料圖片上傳的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文件的結果,但是在登錄到配置文件時,上傳的資料照片未示出。我在考慮代碼拒絕文件類型,而不是將它存儲在數據庫中,但仍在處理註冊,而不是取消它,這是它應該做的。

回答

1

你將不得不設置$extfalse,而不是「」,因爲這是不假的if語句。

default: $ext = false; break; 

或者你是否$ext不是一個空字符串:

if ($ext != '') { 

防止當一個無效的文件類型上傳你必須把裏面的if($ext != '') { /*Put code at the end of if*/}

$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*/ }。否則,如果存在有效的文件類型,則無關緊要。

+0

嗨,謝謝你的幫助!不幸的是,你的解決方案似乎都沒有工作。 除了上傳的頭像之外,應用程序已成功提交註冊,因此該支票顯然工作正常,但如果上傳的文件類型無效,則註冊不應繼續進行。 –

+0

不知道我是否得到了你,但看看我的更新。 –

+0

工作完美,非常感謝您的幫助! –

0

有時,$ _FILES ['profile-image'] ['type']的內容未設置。例如,如果您從cURL或套接字提交文件。 我會嘗試加載MIME類型,自己從$ _FILES [ '輪廓像'] [ 'tmp_name的值']

編輯:

我也注意到這樣的結構:

if ($_FILES) { .... } 

應該有最好使用

if (isset($_FILES[key])){ .... } 
相關問題