我之前尝试过解释这个问题,但这很奇怪。
我有一个依赖于数据库变量的页面,可以在页面上进行更改。每次运行页面上的代码时都会得到这个。但是,在更改变量后立即访问此页面时,它不会刷新。
所以我做了一些调试并将时间输出到屏幕上。因此,当我在页面上更改变量时,它会重定向到另一个页面。我通过索引页面上的href链接进入。时间还在以前。为什么每次加载页面时都不刷新PHP代码?
<?php
session_start();
require($_SERVER['DOCUMENT_ROOT']."/testing/ticketsystem/server/databaseconfig.php");
$username = $_SESSION['username'];
$clientstatus = $_SESSION['status'];
$id = $_GET['id'];
function statusBadge($status)
{
switch($status)
{
case "user":
return $status = "<span class='badge badge-user badge-pill badge-default'>User</span>";
break;
case "admin":
return $status = "<span class='badge badge-user badge-pill badge-success'>Admin</span>";
break;
case !$status:
return $status = "<span class='badge badge-user badge-pill badge-danger'>Error</span>";
break;
}
}
?>
<!doctype html>
<html>
<?php $pagetitle = "Ticket System"; require($_SERVER['DOCUMENT_ROOT']."/testing/ticketsystem/includes/head.php"); ?>
<?php require($_SERVER['DOCUMENT_ROOT']."/testing/ticketsystem/includes/navbar.php"); ?>
<body>
<?php
$sql = "SELECT * FROM tickets WHERE id = '$id'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0)
{
while ($row = mysqli_fetch_assoc($result))
{
$active = $row['active'];
echo (date("H-i-s",time()));
echo $active;
$ticketnav = "<ul class='nav nav-pills nav-justified'><li class='nav-item'><a class='nav-link' href='../../admin.php'>Go Back</a></li><li class='nav-item dropdown'><a class='nav-link dropdown-toggle' data-toggle='dropdown' href='#'>Admin Actions</a><div class='dropdown-menu'><a class='dropdown-item' href='activeticket.php?id=$id&active=1'>Close Ticket</a><a class='dropdown-item' href='activeticket.php?id=$id&active=0'>Open Ticket</a></div></li></ul>";
if($active == 0)
{
$ticketreply = "<div class='card'><div class='card-header'><p>Reply</p></div><div class='card-block'><form method='post' action='replyticket.php?id=$id'><div class='form-group'><label class='mr-sm-2' for='message'>Message</label><textarea name='message' class='form-control' rows='4'></textarea></div><button class='btn btn-success' type='submit'>Reply to this Ticket</button></form></div></div>";
}
elseif($active == 1)
{
!$ticketreply;
}
$subject = $row['subject'];
$department = $row['department'];
$message = $row['message'];
$created = $row['created'];
$userid = $row['userid'];
$createdformat = date('d-m-Y H:i:s', strtotime($created));
$tickethead = "<div class='card'><div class='card-header''><p>Support Ticket - #$id</p></div><div class='card-block'><p>Subject: $subject</p><p>Department: $department</p><p>Date: $createdformat</p></div></div>";
$sql3 = "SELECT * FROM users WHERE id = '$userid'";
$result3 = mysqli_query($conn, $sql3);
while ($row3 = mysqli_fetch_assoc($result3))
{
$username2 = $row3['username'];
$messagestatus = $row3['status'];
$ticketinital = "<div class='card'> <div class='card-header'><p><strong>Initial Message</strong></p><p>$username2 - " . statusBadge($messagestatus) . "</p><p>Date: $createdformat</p></div><div class='card-block'><p>Message: $message</p></div></div>";
}
}
echo $ticketnav;
echo $tickethead;
echo $ticketreply;
echo $ticketinital;
$sql = "SELECT * FROM comments WHERE ticketid = '$id' ORDER BY created DESC";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0)
{
while ($row = mysqli_fetch_assoc($result))
{
$userid = $row['userid'];
$message = $row['message'];
$created = $row['created'];
$createdformat = date('d-m-Y H:i:s', strtotime($created));
$sql2 = "SELECT * FROM users WHERE id = '$userid'";
$result2 = mysqli_query($conn, $sql2);
while ($row2 = mysqli_fetch_assoc($result2))
{
$username2 = $row2['username'];
$commentstatus = $row2['status'];
$ticketcomment = "<div class='card'><div class='card-header'><p>$username2 - ". statusBadge($commentstatus) ."</p><p>Date: $createdformat</p></div><div class='card-block'><p>Message: $message</p></div></div>";
echo $ticketcomment;
}
}
}
}
?>
</body>
</html>
答案 0 :(得分:1)
听起来像浏览器上的缓存问题。您始终可以尝试使用标头来阻止缓存:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
(我确定现在有更好的方法可以做到这一点,请随时谷歌找到正确的方法来实现这一目标。)
或者,添加&#34;?rand =&#34;更改数据库ID时链接回的URL - 浏览器通常会尝试重新获取页面,因为随机ID可能已更改:)