我如何在 PHP 中只包含具有特定状态的票证

问题描述 投票:0回答:2

我有两个文件。在

table.php
中,我实现了从数据库检索的数据的显示逻辑。我在
index.php
中的目标是包含
table.php
,同时根据工单的状态(特别是状态为“OPEN”的工单)选择性过滤工单。

我尝试修改

table.php
中的sql查询并像这样包含在
index.php
include table.php=?status=Open;
但这实际上在产生错误时不起作用。

我该如何处理这个问题?是否可以像我尝试过的那样修改 include ?

这是

table.php
代码:

<?php

include 'menu.php';
include 'connection.php';

// Retrieve user's location using functions from location.php
require_once 'location.php';
$locationName = $locations[$n];

// Set default sorting parameters
$order = isset($_GET['order']) ? $_GET['order'] : 'title';
$sort = isset($_GET['sort']) && ($_GET['sort'] === 'DESC' || $_GET['sort'] === 'ASC') ? $_GET['sort'] : 'ASC';

// Toggle sorting direction
$newSort = ($sort === 'ASC') ? 'DESC' : 'ASC';

// Retrieve status filter
$statusFilter = isset($_GET['status']) ? $_GET['status'] : null;

// Query to retrieve all tickets from the database
$resultSet = $conn->query("SELECT * FROM tickets ORDER BY $order $sort");

// Filter tickets to include only those with status 'Open'
$statusFilter = 'Open'; // Set the status filter to 'Open' for open tickets
$sql = "SELECT * FROM tickets WHERE status = '$statusFilter'";

// Check if user is logged in
if (isset($_SESSION['loggedin'])) {
    // User is logged in, retrieve department ID
    $departmentID = $_SESSION['department_id'];
    if ($departmentID == 0) {
        // Retrieve tickets for admin user
        $sql = "SELECT tickets.id_ticket, tickets.name, tickets.location, tickets.priority, departments.department_name, tickets.title, tickets.creation_date, tickets.status, tickets.update_date, COUNT(files.file_id) AS FileCount
                FROM tickets
                INNER JOIN departments ON tickets.department_id = departments.department_id
                LEFT JOIN files ON tickets.id_ticket = files.ticket_id
                WHERE tickets.hidden = 0
                GROUP BY tickets.id_ticket
                ORDER BY tickets.title ASC";

    } else {
        // Retrieve tickets for non-admin user
        $sql = "SELECT tickets.id_ticket, tickets.name, tickets.location, tickets.priority, departments.department_name, tickets.title, tickets.creation_date, tickets.status, tickets.update_date, COUNT(files.file_id) AS FileCount
                FROM tickets
                INNER JOIN departments ON tickets.department_id = departments.department_id
                LEFT JOIN files ON tickets.id_ticket = files.ticket_id
                WHERE tickets.department_id = $departmentID AND tickets.hidden = 0
                GROUP BY tickets.id_ticket
                ORDER BY $order $sort";
    }
} else {
    // User is not logged in, retrieve tickets by location only
    $sql = "SELECT tickets.id_ticket, tickets.name, tickets.location, tickets.priority, departments.department_name, tickets.title, tickets.creation_date, tickets.status, tickets.update_date, COUNT(files.file_id) AS FileCount
            FROM tickets
            INNER JOIN departments ON tickets.department_id = departments.department_id
            LEFT JOIN files ON tickets.id_ticket = files.ticket_id
            WHERE tickets.location = '$locationName' AND tickets.hidden = 0
            GROUP BY tickets.id_ticket
            ORDER BY $order $sort";
}

// Execute SQL query
$result = $conn->query($sql);
...
?>

代码

index.php

 <body>
        <?php

        $statusFilter = 'Open';

        include 'ticket_table.php?status=' . $statusFilter;
        ?>
php mysql
2个回答
1
投票

一个快速的解决方案是使用

file_get_contents()
检索页面内容:

$content = file_get_contents('ticket_table.php?status=' . $statusFilter);
echo $content ;

另一个解决方案(从长远来看可能更好)是将视图逻辑放在单独的文件/类中,并让

index.php
table.php
都调用这个独特的资源。

index.php:

require_once('DataViewer.php');
$content = (new DataViewer($statusFiler))->render();
echo $content ;

表.php:

require_once('DataViewer.php');
/* stuff with $_GET variables */
$content = (new DataViewer($statusFilter))->render();
echo $content ;

0
投票

将查询字符串传递给包含不起作用。你可以这样做:

index.php

<h1>INDEX 1</h1>
<?php
$_REQUEST['status'] = 'Open';

 include('table.php');
 ?>

表.php

<?php

echo $_REQUEST['status'];
© www.soinside.com 2019 - 2024. All rights reserved.