2016-07-22 16 views
0

Es hält mich immer die gleiche Fehlermeldung, wenn ich nicht einen Avatar hochladen und einen Standard 'avatar1.jpg' behalten möchte. "Ungültiger Dateityp!" Was könnte falsch sein? Wenn ich einen Avatar hochlade, funktioniert es gut.Hochladen von Standard-Avataren mit PHP

Dieser Code ist die Funktion, die in der functions.php bleibt

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'); 
     } 
    } 

Dieser Code die Funktion wird immer "if ($ user-> uploadAvatar()) {...}" einrichten ein Standardbild, wenn nichts hochgeladen wird.

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

Danny Sie sagten, Sie haben versucht, meinen Code und es würde nicht funktionieren, wenn es keinen Upload gab. Betritt der Skriptausführungspfad mit meiner Lösung den '$ data ['avatar'] = 'avatar1.jpg'-Pfad? Welchen Fehler bekommst du? – BeetleJuice

+0

Ich bekomme diesen Fehler eigentlich, es liegt in der Funktion. else { Umleitung ('register.php', 'Ungültiger Dateityp!', 'Fehler'); } } – Danny

+0

hast du meinen Codeblock ganz am Anfang der Funktion platziert? (nicht der Anfang des Hauptskriptes). Wenn ja, was erscheint, wenn Sie 'print_r ($ _ FILES ['avatar'])' am Anfang dieser Funktion ausführen, wenn Sie keine Datei hochgeladen haben? – BeetleJuice

Antwort

0

können Sie:

    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'' ernst? Warum Code-Pfad? – Justinas

+1

@Justinas das ist Beispiel, um Bedeutung Upload von Datei zu übermitteln – Ehsan

+0

Ich denke, dass es etwas falsch in der Funktion uploadavatar() sein muss. Weil der Fehlertext von dort kommt. Was denken Sie? – Danny

1

Wenn Sie avatar Datei nicht laden, als wenn für $_FILES["avatar"]["type"] Überprüfung Sie immer falsch null == "image/gif" || null == "image/jpeg"... erhalten.

Prüfen Sie zuerst, wenn Sie diese Datei von if (!empty($_FILES['avatar']))


Exkurs tun Sie diesen Code ändern können:

($_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") 

zu

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

An der Spitze uploadAvatar, müssen Sie überprüfen, ob Es gibt eine zu bearbeitende Datei, bevor Sie mit der Arbeit beginnen. Starten Sie die Funktion mit diesen Zeilen