2016-05-03 76 views
0

我使用這種形式:如何保護inputfield用PHP

<form class="sfmform" action="" method="post"> 
    <input type="text" name="dirname" /> 
    <input type="submit" class="Button Primary" name="mkdir" value="Makedir" /> 
</form> 

這是php如何處理形式:

<?php 
    if ($_POST['mkdir']) { 
     $DirectoryName = $_POST['dirname']; 
     mkdir($dir . '/' . $DirectoryName, 0777, true); 
    } 
?> 

現在我要保護的形式:只有字符az,AZ和0-9被允許輸入。 如何使用php保護此文件

+0

嘿傑克,通常你需要使用正則表達式(簡稱:正則表達式)。我會reccoment尋找到php文檔http://php.net/manual/en/function.preg-match.php –

+0

可能重複的[PHP的 - 正則表達式只允許字母和數字](http://stackoverflow.com/問題/ 4345621/php-regex-to-allow-letters-and-numbers-only) –

+0

在PHP中使用正則表達式,像'$ DirectoryName = preg_replace(「/ [^ A-Za-z0-9] /」, '',$ _POST ['dirname']);' - 正則表達式不是我的強項,但我認爲這應該起作用。 – Qirel

回答

1

首先,通過可通過網絡訪問的表單創建文件/目錄非常危險。

想問你,你能夠例如使用preg_replace

$DirectoryName = preg_replace('#[^a-z0-9]#i', '', $_POST['dirname']); 

這將替換除了A-Z和0-9一無所有的所有字符。 (i表示不區分大小寫,所以也是A-Z)。

而且不要忘記檢查,如果目錄已經存在......

0

這一切都取決於您是否希望在發佈表單後驗證數據,然後正則表達式解決方案是否合適,或者如果要防止用戶輸入無效字符首先(這需要某種客戶端JavaScript)。 你可以(也可能應該)結合這兩種方法。

1

這將是:

if(preg_match('/[^a-z\s]/i',$stringabc)) 

任何東西,但字母(az),空間(\ S,意思任何類型的空白)。這返回一個布爾值。

中,也允許號:

if(preg_match('/[^0-9a-z\s-]/i',$stringabc))