在php中通过多个文本框过滤数据
我有五个文本框,它们与我的sql数据库中自己的字段相关联。我想做的是根据用户在文本框中输入的内容从mysql数据库中获取数据。下面是我的HTML编码在php中通过多个文本框过滤数据,php,html,Php,Html,我有五个文本框,它们与我的sql数据库中自己的字段相关联。我想做的是根据用户在文本框中输入的内容从mysql数据库中获取数据。下面是我的HTML编码 <html> <form method="POST" action="t14.php"> Device IP<input type="text" name="D_ip" size="7%"/><br/> Devi
<html>
<form method="POST" action="t14.php">
Device IP<input type="text" name="D_ip" size="7%"/><br/>
Device Name<input type="text" name="name" size="22%" /><br/>
Interface<input type="text" name="state" size="22%"/> <br/>
<input type="submit" name="submit" value="Filter"/>
</form>
</html>
我想通过匹配文本框中的所有字段文本来检索数据。如果任何文本框为空,则应跳过。我尝试了以下php编码。但它不起作用。任何人都知道原因是什么
<html>
<?php
$servername = "localhost";
$username = "root";
$password = "901230358v";
$dbname = "my";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['submit'])){
$name = (!empty($_POST['D_ip']) ? mysql_real_escape_string($_POST['D_ip']) : false);
$total_marks = (!empty($_POST['name']) ? mysql_real_escape_string($_POST['name']) : false);
$rank = (!empty($_POST['state']) ? mysql_real_escape_string($_POST['state']) : false);
$sql = "SELECT * FROM 'details' WHERE 1=1";
if($name){
$sql.=" AND 'IP' = ".$name;
}
if($total_marks){
$sql.=" AND 'Name' = ".$total_marks;
}
if($rank){
$sql.=" AND 'State' = ".$rank;
}
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "ip: " . $row["IP"]. " - Name: " . $row["Name"]. " -State: " . $row["State"]. "<br>";
}
}
else {
echo "0 results";
}
$conn->close();
}
?>
</html>
你的报价有问题。表名和列名不应被引用。如果需要,也可以将它们放在反勾中,因为它们包含特殊字符或保留字。字符串值必须被引用 您还混合了API—如果您使用的是mysqli,那么必须使用mysqli\u real\u escape\u字符串,而不是mysql\u real\u escape\u字符串
你的逻辑是正确的,问题在于引号。不要在列名周围加引号,在字符串值周围加引号。谢谢您的回复。但它仍然不起作用。所有方式都显示0结果您是指我下面答案中的代码,还是您试图根据注释自行修复?我尝试过使用您的代码。但是它给出了这个错误消息致命错误:调用未定义的方法mysqli::mysql\u real\u escape\u string方法名的开头没有mysql\u。它只是一个真正的_escape_字符串。当我删除mysql时,它会显示以下错误消息,结果为0。注意:尝试获取非object的属性,这意味着您在查询中遇到错误。添加我刚才添加到答案中的or die,以便您看到SQL错误。
if(isset($_POST['submit'])){
$name = (!empty($_POST['D_ip']) ? $conn->real_escape_string($_POST['D_ip']) : false);
$total_marks = (!empty($_POST['name']) ? $conn->real_escape_string($_POST['name']) : false);
$rank = (!empty($_POST['state']) ? $conn->real_escape_string($_POST['state']) : false);
$sql = "SELECT * FROM details WHERE 1=1";
if($name){
$sql.=" AND IP = '".$name."'";
}
if($total_marks){
$sql.=" AND Name = '".$total_marks."'";
}
if($rank){
$sql.=" AND `State` = '".$rank."'";
}
$result = $conn->query($sql) or die ($conn->error);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "ip: " . $row["IP"]. " - Name: " . $row["Name"]. " -State: " . $row["State"]. "<br>";
}
}
else {
echo "0 results";
}
$conn->close();
}