
本文详解 PHP 中因未正确闭合 while 循环导致的 Parse error: syntax error, unexpected 'else' 错误,并提供清晰、易懂的修复方案,适用于初学者。
本文详解 php 中因未正确闭合 while 循环导致的 `parse error: syntax error, unexpected 'else'` 错误,并提供清晰、易懂的修复方案,适用于初学者。
在你提供的 2027.php 文件中,PHP 报错:
Parse error: syntax error, unexpected 'else' (T_ELSE) on line 300
这个错误的根本原因不是逻辑问题,而是语法结构不匹配——你在 if 语句内开启了 while 循环,却忘记用 } 或替代语法闭合它,导致 PHP 解析器在遇到 else 时,误以为 while 还没结束,从而报错。
? 错误定位(原代码关键问题)
if (mysqli_num_rows($resu)>0) {
while($regi=mysqli_fetch_array($resu)){ // ← 开启了 while { ... }
// ... 大量 HTML 和 PHP 混写 ...
} // ← ❌ 这里缺少闭合的 }
} else{ // ← PHP 认为 while 还没结束,所以 'else' 出现得不合语法!
注意:while(...){ 必须配对 };而你实际代码中 while 的右花括号被遗漏,else 就“悬空”在无效位置。
✅ 推荐修复方案:使用替代语法(更清晰、更适合混排 HTML)
对于大量 HTML 与 PHP 交织的模板代码(如你的页面结构),强烈推荐使用 PHP 的冒号语法(if: / while: / endif; / endwhile;)。它避免花括号嵌套混乱,大幅提升可读性与可维护性,尤其适合初学者。
以下是修正后的完整核心逻辑段(已整合进你的 HTML 结构中):
<?php $sqli = sprintf("SELECT * FROM eventos WHERE YEAR(data) = 2027");
$resu = mysqli_query($con, $sqli);
mysqli_set_charset($con, 'UTF8');
?><?php if (mysqli_num_rows($resu) > 0): ?>
<?php while ($regi = mysqli_fetch_array($resu)): ?><?php $sqli_consulta = sprintf("SELECT * FROM eventos WHERE id = %d", $regi['id']);
$resu_consulta = mysqli_query($con, $sqli_consulta);
$regi_consulta = mysqli_fetch_array($resu_consulta);
$linkk = '../eventoindividual.php?id=' . $regi_consulta['id'];
?><div class="col-sm-3 col-xs-6">
<article class="product-item"><div class="row">
<div class="col-sm-3">
<div class="product-overlay">
<div class="product-mask"></div>
<a href="<?php%20echo%20htmlspecialchars(%24linkk);%20?>" class="product-permalink"></a>
@@##@@" style="width:100%">
</div>
</div>
<div class="col-sm-9">
<div class="product-body">
<h3><?php echo htmlspecialchars($regi['nome']); ?></h3>
<br><span class="price">
<ins><span class="amount"><?php echo htmlspecialchars($regi['preco']); ?></span></ins>
</span>
<div class="buttons buttons-simple">
<a href="<?php%20echo%20htmlspecialchars(%24regi['linkbilheteira']);%20?>" class="btn btn-primary btn-sm add-to-cart">
<i class="fa fa-shopping-cart"></i>Comprar bilhetes
</a>
</div>
</div>
</div>
</div>
</article>
</div>
<?php endwhile; ?><?php else: ?><p>Nada!</p>
<?php endif; ?>
⚠️ 关键注意事项(务必遵守)
- 永远配对使用 if: + endif;、while: + endwhile; —— 这是替代语法的硬性规则;
- 删除所有冗余的 { 和 },否则会引发新的语法冲突;
- 安全加固:所有输出到 HTML 的变量请用 htmlspecialchars() 转义(如示例所示),防止 XSS 攻击;
- SQL 查询优化建议:当前代码对每条记录执行一次额外查询(N+1 问题)。理想做法是用单次 JOIN 查询获取全部所需数据,但对初学者,先确保功能正确再逐步优化;
- 数据库连接 $con 需已正确定义并启用,否则 mysqli_query 会失败(可在开头加 if (!$con) die('DB connection failed'); 快速验证)。
✅ 总结
这个 unexpected 'else' 错误本质是 PHP 语法结构断裂,而非业务逻辑错误。通过改用清晰的冒号语法替代花括号嵌套,并严格配对 if:/endif; 和 while:/endwhile;,即可彻底解决。同时加入基础安全转义,让你的代码既可运行,又更健壮。记住:模板中 PHP 控制结构,优先用 : 语法 —— 它专为 HTML 混排而生。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











