Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysqli_查询在if-elseif语句的一部分工作,但在另一部分不工作_Php_Mysqli - Fatal编程技术网

Php Mysqli_查询在if-elseif语句的一部分工作,但在另一部分不工作

Php Mysqli_查询在if-elseif语句的一部分工作,但在另一部分不工作,php,mysqli,Php,Mysqli,我正在为我正在学习的一门课制作一个事件列表页面。这是我第一次使用PHP 我想根据从下拉列表中选择的类别显示事件的筛选列表。如果从DDL中选择了“所有事件”,我还希望显示事件的完整列表。我有一个if-elseif语句,它将根据查询字符串中的类别值更改sql查询 我看到的具体错误是,当选择“所有事件”时,缺少事件列表。if-else的echo语句起作用,它显示了$category、$month和$year的正确值。缺少的是包含事件列表的表 注意:我已经测试了这个查询,并确认它确实可以提取所有事件的列

我正在为我正在学习的一门课制作一个事件列表页面。这是我第一次使用PHP

我想根据从下拉列表中选择的类别显示事件的筛选列表。如果从DDL中选择了“所有事件”,我还希望显示事件的完整列表。我有一个if-elseif语句,它将根据查询字符串中的类别值更改sql查询

我看到的具体错误是,当选择“所有事件”时,缺少事件列表。if-else的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>";

}
if(!empty($category)){
$catresult=mysqli\u查询($con,”
选择cal_events.event_id,
cal_events.title,
日期格式(cal_dates.DATE,“%M%D%Y”)作为格式化的日期,
MONTHNAME(“$month”)作为month的名称
从cal_事件
左连接校准日期
在cal_events.event_id=cal_dates.event上
其中cal_events.categories='$category'
年份(日期)=‘年’
月份(日期)=‘月份’
按cal_dates.date、cal_events.title、cal_events.event_id)分组;
echo“$类别
每年$monthName$的活动


日期 事件 "; }
这是不起作用的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>";

}
elseif($category=='All'){
$catresult=mysqli\u查询($con,”
选择cal_events.event_id,
cal_events.title,
日期格式(cal_dates.DATE,“%M%D%Y”)作为格式化的日期,
MONTHNAME(“$month”)作为month的名称
从cal_事件
左连接校准日期
在cal_events.event_id=cal_dates.event上
其中年份(日期)=“$YEAR”
月份(日期)=‘月份’
按cal_dates.date、cal_events.title、cal_events.event_id)分组;
echo“$类别
每年$monthName$的活动


日期 事件 "; }
这是显示事件列表的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>";
//显示事件列表
while($row=mysqli\u fetch\u数组($catresult))
{
回声“;
回显“$row['formatted_date']”;
回声“;
回声“;
}
回声“;

您的
如果/elseif
逻辑不是相互排斥的:

if(!empty($category)){
  //...
}
elseif($category=='All'){
  //...
}
如果
$category
值为
'ALL'
,则第一个
If
块仍将执行。因此,在任何情况下,
elseif
块都不会执行

你可以改变你的条件,甚至只是在第一张支票上再加一张支票。比如:

if(!empty($category) && $category!='All'){

但关键是,您的
if
elseif
块必须是整个可能性集合中完全不同的子集。如果执行第一个块,则根据定义第二个块不会执行。

如果/elseif逻辑不是互斥的:

if(!empty($category)){
  //...
}
elseif($category=='All'){
  //...
}
如果
$category
值为
'ALL'
,则第一个
If
块仍将执行。因此,在任何情况下,
elseif
块都不会执行

你可以改变你的条件,甚至只是在第一张支票上再加一张支票。比如:

if(!empty($category) && $category!='All'){

但关键是,您的
if
elseif
块必须是整个可能性集合中完全不同的子集。如果执行第一个块,则根据定义第二个块不会执行。

这不是
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.
}
有多种其他流可用于定义相同的行为,例如:


如果要专门检查多个类别值,也可以尝试使用



.

这不是
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.
}
有多种其他流可用于定义相同的行为,例如:


如果要专门检查多个类别值,也可以尝试使用



.

dahh比我快了一分钟!哎呀!我试试这个。我最初把它写成一个if-else,类别值完全为空(这也不起作用)!谢谢你的快速回答!我仍然想弄明白为什么几乎完全相同的代码块(使用if-else,而不是if-elseif)不能处理空的类别querystrng值,但您现在解决了我的问题。dahhh比我快了一分钟!哎呀!我试试这个。我最初把它写成一个if-else,类别值完全为空(这也不起作用)!谢谢你的快速回答!我仍然想弄明白为什么几乎完全相同的代码块(使用if-else,而不是if-elseif)不能处理空的类别querystrng值,但您现在解决了我的问题。这就成功了。我在发帖前稍微修改了代码后,把问题的措辞弄错了。我最初把它作为IF-ELSE语句,这就成功了。我在发帖前稍微修改了代码后,把问题的措辞弄错了。我最初将此作为IF-ELSE语句。