修复赛事注册按钮显示异常:按注册时段单独判断按钮状态
问题修复:按单个赛事判断注册按钮状态
问题根源
- 未绑定当前赛事的日期变量:代码中使用的
$EventOpenDate和$EventCloseDate没有在foreach循环内从当前赛事对象$row中取值,导致所有赛事共用同一组日期判断条件。 - 日期判断逻辑错误:原条件
($currentDate >= $EventOpenDate) && ($EventCloseDate <= $currentDate)写反了,正确逻辑应为当前日期处于注册开启日期之后、截止日期之前。 - 缺少当前日期的定义:代码中未初始化
$currentDate变量,无法进行有效日期对比。
修复步骤
- 在查询数据库后、循环开始前,定义格式化后的当前日期(需与数据库中
EventOpenDate/EventCloseDate的格式一致,假设为Y-m-d):
$currentDate = date('Y-m-d');
- 在
foreach循环内部,每次获取当前赛事的注册起止日期:
$eventOpenDate = $row->EventOpenDate; $eventCloseDate = $row->EventCloseDate;
- 修正日期判断条件,确保当前日期在注册时段内才显示可点击按钮。
完整修改后的核心代码片段
<?php // Fetching Upcoming events user has NOT signed up for (all-events.php line 69 - Updated 6/25/2021) $isactive=1; $sql = "SELECT EventName, EventLocation, EventStartDate, EventEndDate, EventOpenDate, EventCloseDate, EventImage, id FROM tblevents WHERE NOT EXISTS (SELECT tblbookings.EventId, tblbookings.UserId FROM tblbookings WHERE tblbookings.EventId = tblevents.id AND tblbookings.UserId = $_SESSION[usrid]) AND IsActive=:isactive ORDER BY EventOpenDate DESC"; $query = $dbh -> prepare($sql); $query->bindParam(':isactive',$isactive,PDO::PARAM_STR); $query->execute(); $results=$query->fetchAll(PDO::FETCH_OBJ); $cnt=1; // 定义当前日期,格式与数据库日期一致 $currentDate = date('Y-m-d'); if($query->rowCount() > 0) { foreach($results as $row) { // 获取当前赛事的注册起止日期 $eventOpenDate = $row->EventOpenDate; $eventCloseDate = $row->EventCloseDate; ?> <div class="single-upcoming shadow-box"> <!-- 其他赛事信息代码保持不变 --> <div class="col-md-2 col-sm-3 col-xs-12"> <div class="venu-no"> <p>Location : <?php echo htmlentities($row->EventLocation);?></p> </div> </div> <?php // 修正后的日期判断逻辑 if ($currentDate >= $eventOpenDate && $currentDate <= $eventCloseDate){?> <div class="col-md-3 col-sm-4 col-xs-12"> <div class="upcoming-ticket text-center"> <a href="event-details.php?evntid=<?php echo htmlentities($row->id);?>" class="btn-def bnt-2 small">Registration</a> </div> </div> <?php }else{ ?> <div class="col-md-3 col-sm-4 col-xs-12"> <div class="upcoming-ticket text-center"> <a class="btn-def bnt-2 small">Registration not Open</a> </div> </div> <?php } ?> </div> <?php } } else { ?> <p>No Record Found - (Make sure you are logged in to see the events)</p> <?php } ?>
额外注意事项
- 确保数据库中
EventOpenDate和EventCloseDate的格式与$currentDate的格式完全一致(如均为Y-m-d),否则日期对比会失效。 - 原代码中
<a href="#"><?php echo htmlentities($row->EventName);?></a>可改为链接到赛事详情页,保持跳转逻辑一致:<a href="event-details.php?evntid=<?php echo htmlentities($row->id);?>"><?php echo htmlentities($row->EventName);?></a>
内容的提问来源于stack exchange,提问作者Russ
相关产品推荐
相关产品推荐

