我遇到了一个非常奇怪的bug。给定相同的代码:
<?php session_start(); ?>
<?php if (!isset($_SESSION['email'])): ?>
<p><a href="admin_reg.php">Regsiter as admin</p>
<p><a href="student_reg.php">Register as student</p>
<p><a href="login.php">Log in</a></p>
<? else: ?>
<p><a href="logout.php">Log out</a></p>
<p><a href="group_create.php">Create group</a></p>
<p><a href="group_join.php">Join group</a></p>
<?php endif; ?>
我和我的小组成员在不同的机器上运行同一个项目(他们使用windows,我使用mac)。我们都在examplep中运行它,我得到了一个正常的结果:在身份验证之前,只显示前三个链接。但在他们的机器中,所有六个链接都显示在页面上,这是不可能的。我们的PHP版本也是一样的:5.6.1*
。你知道吗?提前感谢!
您的else正在使用短标记,这可能不是在所有服务器上都启用的。将其更改为使用完整的php标签:
<?php else: ?>
正如aynber所指出的,这很可能是由于您的短标签必须在php.ini中启用。
但是为什么不这样写代码呢?完全兼容,无论php配置如何。
<?php
session_start();
if (!isset($_SESSION['email'])){
echo '<p><a href="admin_reg.php">Regsiter as admin</p>',
'<p><a href="student_reg.php">Register as student</p>',
'<p><a href="admin_reg.php">Regsiter as admin</p>';
} else {
echo '<p><a href="logout.php">Log out</a></p>',
'<p><a href="group_create.php">Create group</a></p>',
'<p><a href="group_join.php">Join group</a></p>';
}
?>
还值得一提的是,相同的php代码在不同的操作系统上可能会产生不同的结果(除了服务器设置)。在Linux中,DB是区分大小写的,而在Windows中则不是。还应考虑路径位置。然后是32b与64b的整数大小,只是说这不是一个罕见的问题。
试试下面的代码:
<?php session_start(); ?>
<?php if (!isset($_SESSION['email'])){ ?>
<p><a href="admin_reg.php">Regsiter as admin</p>
<p><a href="student_reg.php">Register as student</p>
<p><a href="login.php">Log in</a></p>
<?php } else { ?>
<p><a href="logout.php">Log out</a></p>
<p><a href="group_create.php">Create group</a></p>
<p><a href="group_join.php">Join group</a></p>
<?php } ?>