2012-02-20 83 views
0

如果我輸入的文本,其中訪問者應輸入自己的網址我想禁止某些前綴

<form name="frm" method="post" action="addlink.php"> 
url : <input type="text" name="url" id="url"> 
<button type="submit" class="options green">add</button> 
</form> 

和addlink.php這樣的代碼

$url = $_POST['url']; 
$sql = "INSERT INTO $table_urls (url) VALUES ('$url')"; 
mysql_query($sql, $conn) or die(mysql_error()); 

我想禁止例如WWW。 something.com/anything所以如果訪問者輸入任何URL有www.something.com/else - www.something.com/elsething ..等等

它檢測something.com並給出錯誤,如

<?PHP if(XXXXXXXX){ 
echo "somthing.com is not allowed"; 
}else{ 
$sql = "INSERT INTO $table_urls (url) VALUES ('$url')"; 
mysql_query($sql, $conn) or die(mysql_error()); 
} 

如果是什麼!我想說,如果$url有任何東西,然後給不允許!

+6

** WARNING **你代碼對SQL注入攻擊大量開放。如果你堅持使用'mysql_query',你至少需要利用['mysql_real_escape_string'](http://php.net/manual/en/function.mysql-real-escape-string.php)來轉義你的值在查詢中使用它們。你可以更好地將自己升級到['PDO'](http://us2.php.net/manual/en/class.pdo.php),並使用準備語句而不是'mysql *'擴展。 – rdlowrey 2012-02-20 02:14:41

+0

@rdlowrey謝謝,但這是簡單的例子,但在實際的例子中肯定我會使用mysql_real_escape_string。 – 2012-02-20 02:18:05

+2

在過去的十年中使用舊版的mysql函數後,我第二次提到了@rdlowrey的PDO建議。 – summea 2012-02-20 02:25:34

回答

1

您可以使用PHP的功能,preg_match()找到精確匹配:

if (preg_match('/something.com/i', $url) > 0) { 
    // Your error message here 
} 

欲瞭解更多有關使用該功能,您可以點擊這裏:http://php.net/manual/en/function.preg-match.php

+0

作品完美,感謝您的想法,我會讀它 – 2012-02-20 02:40:17

1

我想要同樣的東西。我在VB中做過,但在這裏檢查是否有幫助 Extract words from a string and verify whether or not they exist in a database in VB

只是在空格處分割單詞並驗證數據庫中是否存在該值。如果是這樣,則用****或任何你想要的,用過濾詞來代替,使用一個StringBuilder,它將追加每個單詞只有當該單詞包含禁止的值時,它將追加****並且你的原始字符串將被返回。

0
$parsed_url=parse_url($url);  
if (strtolower($parsed_url['host']) == 'www.something.com' || strtolower($parsed_url['host']) == 'something.com') 
{ 
    $error=true; 
} 
+0

謝謝但是如果它是www.something.com/anything/something,我需要任何以something.com開頭的網址都是不允許的。 – 2012-02-20 02:23:25

+0

我編輯了我的答案,並希望如果這些downvotes會被收回。謝謝。 :-) – TecBrat 2012-02-20 02:33:37