作者anawak (...)
看板PHP
标题Re: [请益] php後台登入问题
时间Wed Jul 31 23:12:55 2013
※ 引述《tingjk (此为必填栏位)》之铭言:
: 至於大家说的header()前面不能有东西这个事情我很苦恼,因为前面就是判断帐号密码
: 的程式码,把header上面讯息所说的38行移到前面也没用(而且逻辑好像也怪怪的)
哪里逻辑怪?
判断帐号密码或是去资料库捞资料的 php 程式码,
写在最开始的地方很常见。
像你 admin.php 那个
已经先出现 DOCTYPE, html, head,
然後才开始 php 程式码
<?php
session_start();
if(!isset($_SESSION['U_NAME'])){
header("Location:index.html");
}
?>
其实这一段应该要放在最前面才对。
一开始判断没有U_NAME就应该重新导向了。
前面输出的那些 html 码都是多余的。
echo_login.php 这支档案也是一样。
都已输出 DOCTYPE, html, head, body
才开始判断帐号密码,然後才送出 header。
这是错的。
大家说的没错,header之前不能送出其它资讯。
准备好要停留在某一页了,不转址了,开始要送出资讯了,
再给它 DOCTYPE, html, head, body。
PHP是伺服器端语言,HTML, Javascript 是客户端语言。
PHP在网页走出伺服器大门之前,要先把资料准备好,然後送出。
接下来才是 HTML, Javascript 接手。
所以如果一开始帐号密判断有问题,PHP 就会直接发出转址的要求。
但是你却先送出 DOCTYPE, html, head, body,
你先宣告某一页要开始了,然後才做帐号密码的判断,
然後又要用 PHP 的 header 转址。这样的流程才是有问题。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.214.220
1F:推 a60301:推PHP Code 放前面,HTML放後面 08/01 12:41
2F:→ RedMapleWing:我比较想推直接切开,不用codeigniter用smarty也好 08/02 01:09
3F:→ twsphere:smarty +1 .. 08/02 10:31
4F:推 windwofswold:session_start也是得放最前面喔 08/04 12:03
5F:→ tingjk:因为我不太懂php,但还是谢谢各位的解释>< 有好心人拯救我 08/07 20:40
6F:→ tingjk:了,所以现在问题从无法登入变成资料库连线错误了ˊ>ˋ 08/07 20:40
7F:→ tingjk:谢谢an大的解释!我学了很多~ 08/07 20:41
8F:推 tingjk:补推一个 =) 08/10 03:44
※ 编辑: anawak 来自: 114.45.88.249 (08/16 00:59)
9F:推 Notte:推一个 07/08 22:13