2014-03-03 62 views
-1

你好,所以這裏是我有一個登錄/註冊系統的問題,當用戶創建他的賬戶時,一個新的文件夾被創建與他放置用戶名相同的名稱,所以如果用戶名是test123 a文件夾test123被創建。現在的問題是我不知道如何將用戶上傳的文件上傳到他的目錄。在註冊甚至上傳文件後,必須登錄inc用戶。移動上傳的文件到登錄的用戶文件夾

這裏是upload.php的

<?php 
if($_POST[submit]) { 
    $name = $_FILES['upload']['name']; 
    $temp = $_FILES['upload']['tmp_name']; 
    $type = $_FILES['upload']['type']; 
    $size = $_FILES['upload']['size']; 

    if($size <= 5000000){ 

     move_uploaded_file($temp,"userfiles/$name"); 
     echo "File: $name was uploaded!"; 

    } else{ 
     echo "Wrong size!"; 
    } 
} else { 
    header("Location: mojprofil.php"); 
} 
?> 

所以actualy在文件夾中的move_uploaded_file($temp, "userfiles/$name");userfiles存在對寄存器

和這裏每個用戶文件夾是register.php:

<?php 

require_once 'core/init.php'; 



if(input::exists()) { 
    if(Token::check(Input::get('token'))) { 
     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array(
       'required' => true, 
       'min' => 2, 
       'max' => 20, 
       'unique' => 'users' 
      ), 
      'password' => array(
       'required' => true, 
       'min' => 6 
      ), 
      'password_again' => array(
       'required' => true, 
       'matches' => 'password' 
      ), 
       'name' => array(
       'required' => true, 
       'min' => 2, 
       'max' => 50 
      ) 
     )); 

     if($validation->passed()) { 
      $user = new User(); 

      $salt = Hash::salt(32); 


      try { 
       $user_dir = Input::get('username'); 

       $user->create(array(
        'username' => Input::get('username'), 
        'password' => Hash::make(Input::get('password'), $salt), 
        'salt' => $salt, 
        'name' => Input::get('name'), 
        'joined' => date('Y-m-d H:i:s'), 
        'group' => 1 
       )); 
       Session::flash('home', '<h3>Registracija uspešna!</h3>'); 
       mkdir(__DIR__.'/userfiles/'.$user_dir); 
       Redirect::to('mojprofil.php'); 

      } catch (Exception $e) { 
       die($e->getMessage()); 
      } 
     } else { 
      foreach($validation->errors() as $error) { 
       echo $error, '<br>'; 
      } 
     } 
    } 
} 

?> 

回答

0

以我的經驗,我一直使用完整的服務器路徑設置上傳路徑到任何給定的direc保守黨。

因此,不是這樣的:

move_uploaded_file($temp,"userfiles/$name"); 

試試這個: ... $ tmp_filename = $ _FILES [ 'yourFile] [' tmp_name的值']

move_uploaded_file($tmp_filename,'/your/full/server/path/userfiles/'.$name); 

另外,如果你的用戶有要登錄,我假設你可能會跟蹤他們的用戶ID或某種會話變量中唯一的東西。 如果您正在根據_FILES變量設置目錄名稱,我認爲您可能會冒着獲取與用戶標識/用戶名不匹配的文件夾名稱的風險。

在我看來,最好先從某種查詢中獲取用戶名,以確保一切都匹配。例如:

$username = get_user($_SESSION['user_id'); // returns user data -> id, username etc... 

move_uploaded_file($tmp_filename,'/your/full/server/path/userfiles/'.$username); 

這將使你是這樣的:

/public_html/foo/bar/userfiles/username/ 
+0

'致命錯誤:調用未定義的函數get_user()在第11行上的upload.php這就是我得到什麼時,當我喜歡你說 – user3375194

+0

是的,你將不得不寫這種方法。這不是本地功能。不知何故,你應該查看用戶登錄/創建一個帳戶。 我會創建用戶帳戶,驗證用戶是在數據庫中捕獲的,然後轉過身來創建目錄。這樣你就可以確定你正在使用一個有效的用戶。 – Damon

+0

好的,謝謝你會盡力做到這一點 – user3375194

0

這是非常,非常粗糙,但這些方針的東西:

$user_data = array(); 
$user_data['username'] = $_POST['username']; 
... 
... 
// Logic to clean data before insert into DB. 

$user = create_user($user_data); // Return username, id or something unique. 
if ($user) { // This contains username or false 
    // Create directory with returned username then upload file 
    ... 
    ... 
    // Logic to prep the file for upload 
    move_uploaded_file($tmp_filename,'/your/full/server/path/userfiles/'.$user); 
} 
相關問題