在运行PHP脚本时遇到问题

时间:2017-03-31 22:13:02

标签: php mysql

我有一个HTML格式的表单,其中发布了两个值hostnameip_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 

2 个答案:

答案 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中已经建议的那样。请改为查看MySQLiPDO 准备好的陈述。这些实用程序提供了一种更清晰的方式来编写查询,也提供了一种更安全的机制来保护它们免受潜在风险的影响。

答案 1 :(得分:0)

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

请注意,此代码容易受到SQL injection

的攻击