我有一个HTML格式的表单,其中发布了两个值hostname
和ip_address
。
<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>
如果我输入hostname / 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
答案 0 :(得分:1)
HTML:
您不能为HTML元素指定两个名称。我建议您使用两个字段或使用下拉/单选按钮以及表单字段,以便用户指定他们是输入hostname
还是ip_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>
此处的假设是,您希望用户在单个提交中输入 {b} {/ 1}}或hostname
作为输入。如果你想同时将它们中继到PHP,那么请摆脱ip_address
下拉列表并使用两个输入字段。
PHP:
检查select
中收到的内容并确定要使用的查询:
address_type
同样,如果您希望一次搜索两个字段,那么除了上面旁白中指出的HTML编辑外,您还必须在PHP变量中接收该值的值。第二个输入字段。然后请摆脱上面的$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' ";
}
- if
构造,并将单个组合查询编写为:
else
最后,请不要在任何PHP代码中使用$sql = "SELECT * FROM <tablename> WHERE HOSTNAME = '$value1' AND IP_ADDRESS = '$value2' ";
函数。他们长期被弃用,并且非常容易受到SQL注入攻击的影响,正如Daniel在his answer中已经建议的那样。请改为查看MySQLi和PDO 准备好的陈述。这些实用程序提供了一种更清晰的方式来编写查询,也提供了一种更安全的机制来保护它们免受潜在风险的影响。
答案 1 :(得分:0)
$hostname = $_POST['HOSTNAME'];
$ip = $_POST['IPADDRESS'];
$query = "SELECT * FROM <tablename> WHERE HOSTNAME='$hostname' AND IP_ADDRESS = '$ip'";
请注意,此代码容易受到SQL injection
的攻击