当前位置: 首页 > 知识库问答 >
问题:

在PHP中使用MySQL数据进行搜索和排序

欧阳安晏
2023-03-14

我在学习PHP,我创建了一个页面来用MySQL显示我的数据表。我想用这些数据进行分页、搜索和排序。

我写了一些条件来搜索和排序。但它不起作用。我的传呼似乎工作得很好。

<?php
        echo "<form action = 'Activiti_Data_Table_Detail.php' method = 'post'>";
        echo "<input type = 'text' name = 'valueToSearch' placeholder = 'Value to search'><br><br>";
        echo "<input type = 'submit' name = 'search' value = 'Filter'><br><br>";
        echo "<input type = 'submit' name = 'ASC' value = 'Ascending'><br><br>";
        echo "<input type = 'submit' name = 'DESC' value = 'Descending'><br><br>";

        echo "<table id = 'datatable' border='1'>";
        echo "<thead>";
        echo "<tr>";    
        echo "<th>ID_</th>";   
        echo "<th>PROC_INST_ID_</th>";    
        echo "<th>BUSINESS_KEY_</th>";
        echo "<th>PROC_DEF_ID_</th>";
        echo "<th>START_TIME_</th>";
        echo "<th>END_TIME_</th>";
        echo "<th>DURATION_</th>";
        echo "<th>START_USER_ID_</th>";
        echo "<th>START_ACT_ID_</th>";
        echo "<th>END_ACT_ID_</th>";
        echo "<th>SUPER_PROCESS_INSTANCE_ID_</th>";
        echo "<th>DELETE_REASON_</th>";
        echo "<th>TENANT_ID_</th>";
        echo "<th>NAME_</th>";
        echo "</tr>";
        echo "</thead>";

        //connect to database
        $con=mysqli_connect("localhost","root","123456","activiti") or die(mysqli_connect_errno());

        //define how many results per page
        $result_per_page = 10;

        //number of results stored in database
        $sql = "SELECT * FROM act_hi_procinst";
        $result = mysqli_query($con, $sql);
        $num_of_results = mysqli_num_rows($result); //225

        //determine number of total pages available
        $number_of_pages = ceil($num_of_results/$result_per_page);

        //determine current page is on
        if (!isset($_GET['page'])) {
            $page  = 1;
        } else {
            $page = $_GET['page'];
        }

        //determine the SQL LIMIT starting number for the result on the displaying page
        $this_page_first_result = ($page - 1) * $result_per_page;

        if(isset($_POST['search']) & isset($_POST['ASC'])){
            $valueToSearch = $_POST['valueToSearch'];

            $sql = "SELECT * FROM act_hi_procinst WHERE concat(ID_, PROC_INST_ID_, PROC_DEF_ID_, START_TIME_, END_TIME_, DURATION_) LIKE '%".$valueToSearch."%'
                    ORDER BY END_TIME_ ASC LIMIT" .$this_page_first_result . ',' . $result_per_page;

        } elseif (isset($_POST['search']) & isset($_POST['DESC'])) {
            $valueToSearch = $_POST['valueToSearch'];

            $sql = "SELECT * FROM act_hi_procinst WHERE concat(ID_, PROC_INST_ID_, PROC_DEF_ID_, START_TIME_, END_TIME_, DURATION_) LIKE '%".$valueToSearch."%'
                    ORDER BY END_TIME_ DESC LIMIT" .$this_page_first_result . ',' . $result_per_page;

        } elseif (isset($_POST['search'])) {
            $valueToSearch = $_POST['valueToSearch'];

            $sql = "SELECT * FROM act_hi_procinst WHERE concat(ID_, PROC_INST_ID_, PROC_DEF_ID_, START_TIME_, END_TIME_, DURATION_) LIKE '%".$valueToSearch."%'
                    LIMIT" .$this_page_first_result . ',' . $result_per_page;

        } elseif (isset($_POST['ASC'])) {
            $sql = "SELECT * FROM act_hi_procinst  ORDER BY END_TIME_ ASC LIMIT" .$this_page_first_result . ',' . $result_per_page;

        } elseif (isset($_POST['DESC'])) {
            $sql = "SELECT * FROM act_hi_procinst  ORDER BY END_TIME_ DESC LIMIT" .$this_page_first_result . ',' . $result_per_page;

        } else {
            $sql = "SELECT * FROM act_hi_procinst LIMIT" .$this_page_first_result . ',' . $result_per_page;

        }

        $result = mysqli_query($con, $sql);

        while ($row = mysqli_fetch_array($result)) {
            echo "<tbody>";
            echo "<tr>";

            echo "<td><a href='Data_Table_Detail.php' target='_blank'>" . $row['ID_'] . "</a></td>";
            echo "<td>" . $row['PROC_INST_ID_'] . "</td>";
            echo "<td>" . $row['BUSINESS_KEY_'] . "</td>";
            echo "<td>" . $row['PROC_DEF_ID_'] . "</td>";
            echo "<td>" . $row['START_TIME_'] . "</td>";
            echo "<td>" . $row['END_TIME_'] . "</td>";
            echo "<td>" . $row['DURATION_'] . "</td>";
            echo "<td>" . $row['START_USER_ID_'] . "</td>";
            echo "<td>" . $row['START_ACT_ID_'] . "</td>";
            echo "<td>" . $row['END_ACT_ID_'] . "</td>";
            echo "<td>" . $row['SUPER_PROCESS_INSTANCE_ID_'] . "</td>";
            echo "<td>" . $row['DELETE_REASON_'] . "</td>";
            echo "<td>" . $row['TENANT_ID_'] . "</td>";
            echo "<td>" . $row['NAME_'] . "</td>";

            echo "</tr>";
        }
        echo "</tbody>";
        echo "</table>";
        echo "</form>";

        //display the links to the page
        for($page = 1; $page <= $number_of_pages; $page++) {
            echo '<a href="Activiti_Data_Table_Detail.php?page=' . $page . '">' . $page . '</a> ';
        }

        mysqli_close($con);           
    ?>

当我运行它时,它说:警告:mysqli_fetch_array()期望参数1是mysqli_result。你能帮助我吗?非常感谢。

共有1个答案

吕德业
2023-03-14

尝试为此更改所有的ifs:

  $valueToSearch  = isset($_POST['search']) ? $_POST['valueToSearch'] : '';
  $orderBy        = isset($_POST['ASC']) ? 'ORDER BY END_TIME_ ASC' : (isset($_POST['DESC']) ? 'ORDER BY END_TIME_ DESC' : '');

  $sql = "SELECT * FROM act_hi_procinst WHERE concat(ID_, PROC_INST_ID_, PROC_DEF_ID_, START_TIME_, END_TIME_, DURATION_) LIKE '%".$valueToSearch."%' " . $orderBy . " LIMIT " . $this_page_first_result . ',' . $result_per_page;

 类似资料:
  • 我使用以下代码创建了一个数据表:- 主要的php-它包含调用数据表的脚本和从sql数据库获取数据的php脚本 和dtServerSideBasicScript。php-它是从sql server获取数据的脚本:- 现在,我必须应用数据表上方的Advanced filter部分,它可以是由以下字段组成的表单-姓名输入、年龄范围输入和性别选择输入字段。提交此表格时,相关搜索结果应显示在数据表中。

  • 问题内容: 我被要求对数组进行排序和搜索。对数组进行排序很简单,我的代码也起作用了,但是每当我尝试调用二进制搜索方法时,它就可以对数组中的第一个元素起作用,但是结果是“ -1” 我的完整代码如下: 问题答案: 您搞砸了二进制搜索间隔

  • 问题内容: 我知道如何进行常规的php mysql搜索并显示结果。但是,由于我要完成的工作的性质,我需要能够按相关性进行排序。让我更好地解释一下: 普通查询“ apple iphone应用程序”将使用%apple iphone application%搜索数据库,但是如果没有记录以该确切顺序显示该短语,则搜索将不会产生任何结果。 我基本上需要做的是分别搜索“ apple”,“ iphone”和“

  • 我被要求对数组进行排序和搜索。数组的排序很简单,我的代码有效,但是每当我尝试调用二叉搜索方法时,它都适用于数组中的第一个元素,但结果给了我“-1” 我的完整代码如下:

  • 我试图开发一个小网站,它从数据库中按设定的半径检索结果,并将其放在地图上。我使用谷歌地图api从那里获得lat和long搜索条件,将这些传递给我的php脚本,该脚本查询数据库并返回结果集作为JSON对象。 我在使用json向php发送lat和long时遇到了一个小问题。 我的主要问题是,我搜索数据库的sql似乎是错误的,因为它只检索数据库中的前10个结果。我希望它返回搜索点半径内的前10个结果。

  • 问题内容: 我需要编写一个方法,该方法采用2d数组’int [] [] m’和值’val’,并检查val是否以 O(n)的复杂度 在数组 中,而n定义为行数和m必须平方 可以用作我的方法的参数的数组必须为此方法返回true: (如果它返回true,那么该数组是按要求的) 该数组返回TRUE: 如果位于数组中,则我的方法应返回true ,如下所示: 问题答案: 有可能。矩阵是大小为 nxn的 方阵。