2014-03-31 78 views
1

我在使用此代码时收到语法错误,我想要登录脚本仅在用户未登录但收到错误时才显示在第4行的开头:如果用户未登录,则回显登录脚本

<?php 
if($_SESSION['loggedin'] != TRUE){ 

echo "Already a member?&nbsp; 
<form id=\"loginform\" method=\"post\" action="$_SERVER['PHP_SELF'];" 
<label for=\"username\"> Email Address:</label> 
<input type=\"text\" name=\"liusername\"/> 
<br> 
<label for=\"password\"> Password:</label> 
<input type=\"text\" name=\"lipassword\" id=\"password\" /> 
</div> 
<div class=\"submit\"> 
<input name=\"lisubmit\" type=\"submit\" value=\"submit\"> 
</div>\n"; 

}else{ 
echo 
"<a href = logout.php>Log out</A>\n"; 
?> 
} 
+1

将'session_start();'添加到顶部。 –

+0

我在页面顶部有这个,上面有一些其他的脚本 – user3480862

+2

你在'action ='之后通过使用非转义的'''结束了你的字符串值......一般来说,你不应该使用echo来输出大的部分大多是静态的HTML代码 - 最好离开PHP解析器,直接编写HTML代码,并且只在必要时使用PHP。而且由于$ _SERVER ['PHP_SELF']'的未处理输出是XSS漏洞 - 最好只是 – CBroe

回答

1

将表格开头部分更改为以下内容。这应该使代码工作:

<form id=\"loginform\" method=\"post\" action='".$_SERVER['PHP_SELF']."'> 

并从其他{}中取出'?>'。让我知道如果它没有帮助。

+0

这个工作原理如果您只想将表单发送到当前页面。 ,谢谢 – user3480862

+1

@ user3480862将此答案标记为正确并解决问题;) – Farzad

0

您的echo是不正确的。

试试这个代码:

<?php 
if($_SESSION['loggedin'] != TRUE){ 

echo "Already a member?&nbsp; 
<form id=\"loginform\" method=\"post\" action=".$_SERVER['PHP_SELF'];" 
<label for=\"username\"> Email Address:</label> 
<input type=\"text\" name=\"liusername\"/> 
<br> 
<label for=\"password\"> Password:</label> 
<input type=\"text\" name=\"lipassword\" id=\"password\" /> 
</div> 
<div class=\"submit\"> 
<input name=\"lisubmit\" type=\"submit\" value=\"submit\"> 
</div>\n"; 

}else{ 
echo 
"<a href = logout.php>Log out</A>\n"; 
?> 
} 
+1

使用单引号时,换行符字符(\ n)不会被解释,您必须将它们删除 – Gwenc37

+0

@ Gwenc37 Tnx,固定。 – Farzad

0

在PHP方面闭架不:

}else{ 
echo "<a href = logout.php>Log out</A>\n"; 
?> 
} 

应该

echo "<a href = logout.php>Log out</A>\n"; 
} 
?> 

此外,已经提到,错可变串联

"$_SERVER['PHP_SELF'];" 

必须

" . $_SERVER['PHP_SELF'] . " 

会议尚未开始

session_start(); // Before http body, before $_SESSION usage 

除此之外,你不应该把(PHP)的逻辑和(HTML)标记在同一个文件/上下文。