2013-10-07 91 views
-1

我試圖將用戶輸入的公司傳遞到路徑中以確定顯示的內容。我已將公司提交到表單所在的頁面,並將其作爲內容顯示的路徑。如果是新公司名稱,我想包含mkdir。如何將變量傳遞到PHP中的文件路徑

$path = '(uploadedFiles/($_POST['companyName']))'; 
$dirs = scandir($path); 

不知道爲什麼,但我現在得到一個未定義的索引錯誤。這裏是一個要求輸入名稱的部分是在頁面名爲admin.php的上

print '<form action="admin.php" method="POST">'.PHP_EOL; 
      print' <h4> Enter the name of the company the new uploads belong to.</h4>'; 
      print' <label class="control-label" `for="companyName">companyName</label>';` 
      print'  <input type="text" name="" id="companyName" placeholder="Enter Comapny Name ">'; 
      print'  <button type="submit" class="btn">Enter</button>'; 
      print' </div>'; 
+2

請不要將unsanitized用戶數據傳遞給文件路徑等。他們很容易被惡意用戶操縱。 –

+3

請首先學習一些語法_basics_。 http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing – CBroe

+0

感謝您的鼓勵。我剛開始學習PHP,是的,當我的手指滑入Shift鍵時我有一個錯字。我會繼續努力。 –

回答

1

的最佳方式(Zend的代碼風格指南)是Concat的是這樣一個很壞很壞的壞主意:

$path = 'uploadedFiles/' . $_POST['companyName']; // works with double- 
                // and single-quotes 

但需要警告:接受用戶輸入,未經驗證的系統可能會導致黑客攻擊。

另一種方法是這樣的:

$path = "uploadedFiles/{$_POST['companyName']}"; // double-quotes only 
+0

謝謝你的作品。有權訪問的人員將擁有管理權限。所以他們將不得不通過驗證過程。 –

0

在這裏你去:

$companynamedir = $_POST['companyName']; 

$path = "uploadedFiles/" . $companynamedir; 

$dirs = scandir($path); 
+1

我可以問爲什麼浪費內存通過分配額外的無用變量'$ companynamedir'? – DanFromGermany

+0

@DanFromGermany - 「浪費記憶」? ..你能指定有多少內存被浪費了。如果需要對POST變量進行檢查,則可能會在該處添加額外的內存。 – Daniel

+0

它對於大數據或長時間運行的腳本沒有垃圾回收器有一些缺點,如果你有很多額外的變量,它會使代碼變得不可讀。但最後一點你完全正確! – DanFromGermany

0

您應該使用雙引號來處理變量,變量是$ _POST,而不是$ -POST。

$path = "uploadedFiles/{$_POST['companyName']}"; 

當然,這是使用這裏的POST變量

+0

downvote的原因? – aynber

+0

解析錯誤:語法錯誤,意外的T_ENCAPSED_AND_WHITESPACE,期望T_STRING或T_VARIABLE或T_NUM_STRING – DanFromGermany

+0

哦。對。咄。忘了把變量括起來。 – aynber

0

添加到錯誤之前說的($ _ POST,而不是$ -POST;混合引號和雙引號),你可以重複變量爲使用大括號的字符串:

$path = "uploadedFiles/{$_POST['companyName']}"; 
0
$path = 'uploadedFiles/'. $_POST['companyName'] ; 
if (!file_exists($path) { 
    mkdir($path, 0775, true); 
    } 
$dirs = scandir($path); 

我希望幫助。

+0

至少要解釋-1,如果你打算這樣做。 – Faruq

+0

1)第一個路徑分配不起作用(path中的parantheses,也不會插入$ _POST ['companyName'];單引號,它不是一個簡單的變量,因此您需要將它放在{}中) 。 2)mkdir似乎很愚蠢,因爲你正在重新構建你已經嘗試存儲在$ path中的路徑3)隨機創建一個777目錄是一個等待發生的安全噩夢。 。 。 – ernie

+0

path是if語句之前的字符串。沒有驗證其存在作爲一個文件夾。其次,沒有人解決製作問題所要求的目錄。通過使用函數mkdir刪除人們提到的仲裁代碼執行的所有問題。用你的代碼清理代碼。註釋。 – Faruq