2016-07-22 10 views
0

アバターをアップロードしてデフォルトの 'avatar1.jpg'を保持したくないときは、同じエラーメッセージが表示され続けます。 "無効なファイルタイプ!"何が間違っていますか? アバターをアップロードするとうまくいきます。 "(する$ user-> uploadAvatarは()){...}場合は、" 設定するデフォルトのアバターをPHPでアップロード

このコードは、のfunctions.php

public function uploadAvatar(){ 
     $allowedExts = array("gif", "jpeg", "jpg", "png"); 
     $temp = explode(".", $_FILES["avatar"]["name"]); 
     $extension = end($temp); 
     if ((($_FILES["avatar"]["type"] == "image/gif") 
       || ($_FILES["avatar"]["type"] == "image/jpeg") 
       || ($_FILES["avatar"]["type"] == "image/jpg") 
       || ($_FILES["avatar"]["type"] == "image/pjpeg") 
       || ($_FILES["avatar"]["type"] == "image/x-png") 
       || ($_FILES["avatar"]["type"] == "image/png")) 
       && ($_FILES["avatar"]["size"] < 1000000) 
       && in_array($extension, $allowedExts)) { 
      if ($_FILES["avatar"]["error"] > 0) { 
       redirect('register.php', $_FILES["avatar"]["error"], 'error'); 
      } else { 
       if (file_exists("images/avatars/" . $_FILES["avatar"]["name"])) { 
        redirect('register.php', 'File already exists', 'error'); 
       } else { 
        move_uploaded_file($_FILES["avatar"]["tmp_name"], 
        "images/avatars/" . $_FILES["avatar"]["name"]); 

        return true; 
       } 
      } 

     } 

     else { 
      redirect('register.php', 'Invalid File Type!', 'error'); 
     } 
    } 

このコードは、関数を取得しているにとどまる機能です何もアップロードされていない場合、デフォルトイメージ。

if(isset($_POST['register-input'])){ 
    //Create Data Array 
    $data = array(); 
    $data['name'] = $_POST['name']; 
    $data['email'] = $_POST['email']; 
    $data['username'] = $_POST['username']; 
    $data['password'] = md5($_POST['password']); 
    $data['password2'] = md5($_POST['password2']); 
    $data['about'] = $_POST['about']; 
    $data['last_activity'] = date("Y-m-d H:i:s"); 

    //Required Fields 
    $field_array = array('name','email','username','password','password2'); 

     if($validate->isRequired($field_array)){ 
      if($validate->isValidEmail($data['email'])){ 
       if($validate->passwordsMatch($data['password'],$data['password2'])){ 
         //Upload Avatar Image 
         if($user->uploadAvatar()){ 
          $data['avatar'] = $_FILES["avatar"]["name"]; 
         } else{ 

          $data['avatar'] = 'avatar1.jpg'; 
         } 

         //Register User 
         if($user->register($data)){ 
          redirect('index.php', 'You are registered and can now log in', 'success'); 
         } else { 
          redirect('index.php', 'Something went wrong with registration', 'error'); 
         } 
       } else { 
        redirect('register.php', 'Your passwords did not match', 'error'); 
       } 
      } else { 
       redirect('register.php', 'Please use a valid email address', 'error'); 
      } 
     } else { 
      redirect('register.php', 'Please fill in all required fields', 'error'); 
     } 

} 
+0

ダニーあなたは自分のコードを試したと言いますが、アップロードがなかった場合は機能しません。私の解答では、スクリプトの実行パスは '$ data ['avatar'] = 'avatar1.jpg''パスに入りますか?どのようなエラーが出ますか? – BeetleJuice

+0

このエラーは実際には発生していますが、機能に含まれています。 else { リダイレクト( 'register.php'、 '無効なファイルタイプ'、 'エラー'); } } – Danny

+0

機能の冒頭にコードブロックを配置しましたか? (メインスクリプトの始まりではない)。もしそうなら、ファイルをアップロードしていないときに 'print_r($ _ FILES ['avatar'])'を実行すると何が表示されますか? – BeetleJuice

答えて

0

あなたが使用することができます。

    if($user->uploadAvatar()){ 
         $data['avatar'] = $_FILES["avatar"]["name"]; 
        } else{ 

         $file =  'avatar1.jpg'; 

         // Open the file to get existing content 
         $data = file_get_contents($file); 

        // New file 
         $new = 'new_name.jpg'; 

        // Write the contents back to a new file 
         file_put_contents($new, $data); 
        } 
+0

「C:\ wamp \ www \ .... jpg」は真剣に?なぜハードコードパス? – Justinas

+1

@Justinasこれはサンプルで、アップロードの意味をファイル – Ehsan

+0

からアップロードするには、uploadavatar()関数に何か問題があるはずです。エラーテキストがそこから来ているからです。どう思いますか? – Danny

1

$_FILES["avatar"]["type"]をチェックするときは、必ずnull == "image/gif" || null == "image/jpeg"...偽を受けるよりも、あなたは、avatarファイルをアップロードしていない場合。

まずチェックあなたはif (!empty($_FILES['avatar']))


サイドノートを行うことによって、このファイルを持っている場合は、このコードを変更することができますの上部に

in_array($FILES['avatar']['type'], ["image/gif", "image/jpeg", "image/pjpeg", "image/x-png", "image/png"]) 
0

($_FILES["avatar"]["type"] == "image/gif") 
    || ($_FILES["avatar"]["type"] == "image/jpeg") 
    || ($_FILES["avatar"]["type"] == "image/jpg") 
    || ($_FILES["avatar"]["type"] == "image/pjpeg") 
    || ($_FILES["avatar"]["type"] == "image/x-png") 
    || ($_FILES["avatar"]["type"] == "image/png") 

uploadAvatarの場合は、作業を開始する前に処理するファイルがあります。これらの行で関数を開始してください。

if(empty($_FILES['avatar']) || 
    !file_exists($_FILES['avatar']['tmp_name']) || 
    !is_uploaded_file($_FILES['avatar']['tmp_name']) 
) return false; 
関連する問題