我有两个文件。在
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;
?>
一个快速的解决方案是使用
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 ;
将查询字符串传递给包含不起作用。你可以这样做:
index.php
<h1>INDEX 1</h1>
<?php
$_REQUEST['status'] = 'Open';
include('table.php');
?>
表.php
<?php
echo $_REQUEST['status'];