当我提交类别搜索表单时,我希望它在DisplayMealsCont.php中运行php代码,然后使用更新的会话变量返回main.php。但是当我尝试放入一个Header("Location:../View/Main.php")时;在DisplayMealsCont.php中,它陷入了重定向循环。
main.php
<?php
require_once("../Controller/DisplayMealsCont.php");
session_start();
$category = "All";
if(isset($_SESSION['table'])){
$table = $_SESSION['table'];
}
if(isset($_SESSION['Category'])){
$category = $_SESSION['Category'];
if($category == "All"){
$category = " ";
}
}
?>
<?php
if (is_array($table)) {
foreach($table as $item) {
?>
<td align="centre"> <?= $item['Meal_Name'] ?> </td>
<td align="centre"> <?= $item['Description'] ?> </td>
<td align="centre"> <?= $item['Image'] ?> </td>
<td align="centre"> <?= $item['Category'] ?> </td>
<td align="centre"> <?= $item['Quantity'] ?> </td>
<td align="centre"> £ <?= $item['Price'] ?> </td>
<tr>
<?php
}
}
?>
</table>
<form method="post" action="../Controller/DisplayMealsCont.php">
Category: <br />
<select name="Category">
<option value="All">All</option>
<option value="Main">Main</option>
<option value="Drink">Drinks</option>
</select> <br />
<input type="submit" name="categorysubmit" value="Search" />
</form>
DisplayMealModel.php
<?php
require_once("../Model/config.php");
class DisplayMeals
{
public $dbConnection;
public function __construct(){
$db= new database();
$connect=$db->getdatabase();
$this->dbConnection = $connect;
}
public function MainMeals($category){
$_SESSION['test'] = $category;
$stmt = $this->dbConnection->prepare("SELECT * from meal WHERE Category LIKE '$category%'");
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>
DisplayMealCont.php
<?php
require("../Model/DisplayMealModel.php");
$newMeal = new DisplayMeals();
if(!isset($category)){
$category = "main";
}
if(isset($_SESSION['Category'])){
$category = $_SESSION['Category'];
}
$table = $newMeal-> MainMeals($category);
$_SESSION['table'] = $table;
?>
我不明白为什么其中的header()会导致重定向循环,但你试过添加die()吗;在header()之后?
这是一个很好的做法,如果它起作用,它可能会揭示问题的原因。除此之外,如果您发布带有循环头的代码,这样我们就可以看到了,这将有所帮助。