2016-03-06 69 views
-1

我從url獲取用戶的mac。我想要做的是匹配,看看地址是否真實。因爲我將針對數據庫運行它,如果格式不正確,我不想運行它。php Mac地址檢查格式

這是我到目前爲止有:

if (isset($_GET['mac'])) { 
    if (strlen($_GET['mac']) == 18) { 
     $get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']); 
      if (preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', $_GET['mac']) == $get_mac_filtered) { 
       echo 'Got a mac match! '.$get_mac_filtered; 
      }else { 
       echo 'Sorry !='; 
      } 
}else {die();} } 

我猜問題是在某處這裏(preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', $_GET['mac']) == $get_mac_filtered),因爲它返回else

+0

如果你正在檢查對DB比賽無論如何,如果格式不正確,不會返回「false」嗎? –

+0

上述代碼有什麼問題? – andrewsi

+0

它會。但我寧願不打擾數據庫,直到我得到了格式右@OliverCharlesworth – Borsn

回答

0

刪除此行。它沒有任何用處:

$get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']); 

正如所寫,這代替了任何類似於有效MAC地址的東西......沒有任何東西。這幾乎不是你想要在這裏做的。

相反,在下一行中,preg_match()比較結果爲1(如果正則表達式匹配,則返回1和0,如果它沒有。)

+0

直接在數據庫中使用'&_GET'並不危險嗎? – Borsn

+0

如果我使用這樣的'$ get_mac_filtered = preg_replace('/ [^ a-fA-F0-9] /','',$ _ GET ['mac']);'它從地址中刪除':' 。 – Borsn

+1

@Borsn風險?如果您遵循最佳做法並使用參數化查詢,則不適用。無論如何,正則表達式會拒絕任何不需要的東西。 – duskwuff