2017-03-31 13 views
-1

我有一個HTML表單,它發佈了兩個值hostnameip_address運行PHP腳本時面臨的問題

<form action="demo-select.php" method="post" /> 
    <p>HOSTNAME/IPADDRESS: <input type="text" name="HOSTNAME" name="IP_ADDRESS" /></p> 
    <input type="submit" value="Submit" /> 
</form> 

如果我輸入主機名/ IP_ADDRESS並提交,它會帶我去demo-select.php腳本。

demo-select.php腳本中,我可以從我的MySQL數據庫獲得hostname的輸出。我應該如何獲得基於ip_address的輸出?

$value = $_POST['HOSTNAME']; 
$query = "SELECT * FROM <tablename> WHERE HOSTNAME='$value'"; 
$result = mysql_query($query); 

該腳本連接到MySQL數據庫並獲取基於主機名的輸出。我應該做些什麼修改才能獲得基於ip_address的輸出?

表列:

HOSTNAME 
IP_ADDRESS 
cpus 
MEMORY 
+2

我希望你的代碼不在開放的網絡上,因爲它可以打開SQL注入。 –

+0

**警告**:如果您只是在學習PHP,請不要使用['mysql_query'](http://php.net/manual/en/function.mysql-query.php)界面。這是非常可怕和危險的,它在PHP 7中被刪除了。[PDO的替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /)以及[PHP The Right Way](http://www.phptherightway.com/)等指南介紹了最佳實踐。你的用戶數據是**不是** [正確轉義](http://bobby-tables.com/php.html),並有[SQL注入漏洞](http://bobby-tables.com/),並且可以被利用。 – tadman

回答

0
$hostname = $_POST['HOSTNAME']; 
$ip = $_POST['IPADDRESS']; 
$query = "SELECT * FROM <tablename> WHERE HOSTNAME='$hostname' AND IP_ADDRESS = '$ip'"; 

注意,該代碼很容易受到SQL injection

+0

爲什麼發佈一個易受SQL注入攻擊的代碼,然後告訴他們它是? –

1

HTML:

您不能分配兩個名字到HTML元素。我建議你要麼使用兩個字段或使用下拉/單選按鈕與表單字段沿着用戶指定他們是否正在進入一個hostnameip_address

<form action="demo-select.php" method="post" /> 

    <select name="address_type"> 
     <option value="ip"> IP Address </option> 
     <option value="host"> Host Name </option> 
    </select> 

    <input type="text" name="host_name_or_address" /> 
    <input type="submit" value="Submit" /> 
</form> 

這裏的假設是,您希望用戶只需輸入即可在單個提交中輸入一個hostnameip_address。如果您希望同時將它們傳遞給PHP,請刪除select下拉列表,然後使用兩個輸入字段。

PHP:

檢查什麼在address_type被接收並確定相應使用的查詢:

$address_type = $_POST['address_type']; 
$value = $_POST['host_name_or_address']; 

if($address_type == "host"){ 
    // If looking for partial matches, use... WHERE HOSTNAME LIKE '%$value' 
    $sql = "SELECT * FROM <tablename> WHERE HOSTNAME = '$value' "; 
} 
else{ 
    $sql = "SELECT * FROM <tablename> WHERE IP_ADDRESS = '$value' "; 
} 

同樣,如果你想被搜索一次兩個字段,然後以及上面敘述中指出的HTML編輯,您必須在PHP變量中接收第二個輸入字段的值。

$sql = "SELECT * FROM <tablename> WHERE HOSTNAME = '$value1' AND IP_ADDRESS = '$value2' "; 



最後,請不要在任何PHP代碼使用mysql_*()功能:這裏上面else構建和寫單一,組合查詢 - 還那麼請擺脫if的。他們長期被棄用,並且非常容易受到SQL注入攻擊的影響,Daniel已經在his answer中建議過。請看看MySQLiPDO準備陳述改爲。這些實用程序提供了一種更清晰的方式來編寫您的查詢,也是一個更安全的機制,以防範他們的潛在風險。