在php中通过多个文本框过滤数据

在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

我有五个文本框,它们与我的sql数据库中自己的字段相关联。我想做的是根据用户在文本框中输入的内容从mysql数据库中获取数据。下面是我的HTML编码

<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();
}