2013-09-29 50 views
0

我的網站允許用戶將聲音文件上傳到服務器。一個目錄(如用戶名)在用戶註冊時創建。使用會話變量在PHP中創建目錄

mkdir("speaking/uploads/".$myusername,0777); 

當用戶想要登錄:

$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$_SESSION['myusername'] = $myusername; 

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pass='$mypassword'"; 
$result=mysql_query($sql); 

$count=mysql_num_rows($result); 

if($count==1){ 

header("location:index.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 

我要上傳的文件去他的文件夾,但這些文件轉移到上傳目錄。

<?php 

$uploads_dir = './uploads/'.$_SESSION['myusername']; 

if($_FILES['Filedata']['error'] == 0){ 
    if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploads_dir.$_FILES['Filedata']['name'])){ 
     echo 'ok'; 
     exit(); 
    } 
} 
echo 'error'; 
exit(); 
?> 

請問該怎麼辦? 有沒有更好的和安全的想法做到這一點?

+0

永遠不要將從用戶收到的數據放入數據庫unsanitized。至少這樣做:$ myusername = mysql_real_escape_string($ _ POST ['myusername']); – Jaroslav

+0

或者使用mysqli或PDO考慮mysql是**棄用**。 – MisterBla

+0

謝謝,我有這個,但總結的代碼不寫在這裏。 – Amir

回答

0

你忘了加上在session_start,這將是空,以便that`s爲什麼它的父文件夾上傳所以您的代碼更改爲:

<?php 
session_start();//start the session first 
$uploads_dir = './uploads/'.$_SESSION['myusername']; 

if($_FILES['Filedata']['error'] == 0){ 
    if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploads_dir.$_FILES['Filedata']['name'])){ 
     echo 'ok'; 
     exit(); 
    } 
} 
echo 'error'; 
exit(); 
?> 
+0

我添加session_start();但仍然上傳到_uploads_目錄。 – Amir

+0

添加這兩個腳本後,使用數據庫查詢PDO –

+0

我做到了這一點,但仍然... – Amir

0

好像你在這裏缺少session_start()

<?php 
    // H E R E ! 
    session_start(); 

    $uploads_dir = './uploads/'.$_SESSION['myusername']; 

此外,使用文件夾名稱由用戶輸入($_POST['myusername'])得到的是一個非常糟糕的主意,如果unsanitized喜歡它是在這裏!

+0

好吧,我的意思是什麼是最好的主意,做到這一點? – Amir