我正在为我正在上课的活动列表页面工作。这是我第一次使用PHP之一。
我想根据从下拉列表中选择的类别显示已过滤的事件列表。我还想显示一个完整的事件列表,如果'所有事件'从DDL中选择。我有一个if-elseif语句,它将根据查询字符串中的类别值更改sql查询。
我看到的具体错误是,所有活动'被选中。 if-else DOES的echo语句工作,它显示$ category,$ month和$ year的正确值。缺少的是包含事件列表的表。
注意:我已经测试了查询,并确认它确实可以提取所有事件的列表。我也尝试使用空的$ category值而不做任何更改。
这是起作用的IF声明:
if(!empty($category)){
$catresult = mysqli_query($con,"
SELECT cal_events.event_id,
cal_events.title,
DATE_FORMAT(cal_dates.date, '%M %D %Y') AS formatted_date,
MONTHNAME('$month') AS NameOfMonth
FROM cal_events
LEFT JOIN cal_dates
ON cal_events.event_id = cal_dates.event
WHERE cal_events.categories = '$category'
AND YEAR(date) = '$year'
AND MONTH(date) = '$month'
GROUP BY cal_dates.date, cal_events.title, cal_events.event_id");
echo "<h2>$category</h2>
<h3>Events for $monthName, $year</h3>
<br /><br />
<table align='center'>
<tr>
<th>Date</th>
<th>Event</th>
<th></th>
</tr>";
}
这是不起作用的ELSEIF语句:
elseif($category=='All'){
$catresult = mysqli_query($con,"
SELECT cal_events.event_id,
cal_events.title,
DATE_FORMAT(cal_dates.date, '%M %D %Y') AS formatted_date,
MONTHNAME('$month') AS NameOfMonth
FROM cal_events
LEFT JOIN cal_dates
ON cal_events.event_id = cal_dates.event
WHERE YEAR(date) = '$year'
AND MONTH(date) = '$month'
GROUP BY cal_dates.date, cal_events.title, cal_events.event_id");
echo "<h2>$category</h2>
<h3>Events for $monthName, $year</h3>
<br /><br />
<table align='center'>
<tr>
<th>Date</th>
<th>Event</th>
<th></th>
</tr>";
}
这是显示事件列表的while循环:
//Displays the list of events
while($row = mysqli_fetch_array($catresult))
{
echo "<tr>";
echo "<td>" . $row['formatted_date'] . "</td>";
echo "<td><a href='detail.php?id=".$row['event_id']."' target='_blank'>" .
$row['title'] . "</a></td>";
echo "</tr>";
}
echo "</table>";
答案 0 :(得分:2)
您的if/elseif
逻辑不是互斥的:
if(!empty($category)){
//...
}
elseif($category=='All'){
//...
}
如果$category
值为'ALL'
,则第一个 if
块仍将执行。因此,elseif
阻止永远不会执行。
您可以切换条件,甚至只需在第一个条件中添加额外的支票。类似的东西:
if(!empty($category) && $category!='All'){
但关键是你的if
和elseif
块必须是完全不同的可能性子集。如果第一个块执行,则第二个块按定义赢得
答案 1 :(得分:0)
这不是elseif
的工作方式。如果第一个条件为真(它始终为category='all'
),那么第二个条件将永远不会被测试。
if(something){
// This runs if something is true.
}
elseif(something else){
// This runs only if the first if is false and the elseif is true
}
else
// This only runs if none of the preceding conditions equate to true.
}
因此请调整语法;
if(!empty($category) && $category !== "All"){
...
}
elseif($category == "All"){
...
}
else {
// no category set.
}
可以使用各种其他流程来定义相同的行为,例如:
if(!empty($category) )
if($category == "All"){
... //category is All
}
else {
... //category is not All
}
}
else {
// category is empty.
}
如果您想要专门检查多个类别值,也可以尝试使用Switch Statements。