2017-03-31 38 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准备陈述改为。这些实用程序提供了一种更清晰的方式来编写您的查询,也是一个更安全的机制,以防范他们的潜在风险。