处理的页面index.php
index.php的参数tp
index.php?tp=login表示的处理登录的表单
index.php?tp= 或者index.php tp没有设置,那么就引入login.htm文件。
index.php?tp=logout的时候就处理退出。
index.php文件全部源码如下:<?php
$dir="../";
require $dir.'global.php';$tpl=$dir.tpl.'admin/';//../templates/new/admin/$pagetitle="管理员登录";
$pagekw="管理员登录";
$pagedesc="";$tp=$_GET[tp];/*
Array
(
    [name] => admin
    [psw] => admin
)
*/
switch($tp){
case '':
include $tpl.'login.htm';
break;
case 'login':
$name=trim($_POST[name]);
$psw=trim($_POST[psw]);
if($name=='' || $psw==''){
$msg='请先将表单填写完整';
$url='index.php';
echo jump_quick($url,$msg);
exit();
}
$psw=md5($psw);
$SQL="SELECT * FROM url_user a 
WHERE `name` LIKE '$name' AND `psw` LIKE '$psw'
LIMIT  0 , 1;";
$login=new sDB();
$row=$login->select($SQL);
if($row!=false){
$_ID=$row[id];
$_name=$row[name];
$_psw=$row[psw];
$_tp=$row[tp];//用户类型
$_lastlogin=$row[lastlogin];//上次登录时间
$_logincount=$row[logincount]+1;

//更新上次登录时间和登录次数
$SQL_up="UPDATE `url_user` 
SET `logincount` = `logintcount`+ 1 ,
`lastlogin` = UNIX_TIMESTAMP() 
WHERE `id` ='$_ID' 
LIMIT 1 ;";
$login->update($SQL_up);

$msg='登录成功!\\n下面进入控制面板';
$url='admincp.php';
$CookieTime=time()+3600*8;

setCookie('userID',$_ID,$CookieTime);
setCookie('userName',$_name,$CookieTime);
setCookie('userType',$_tp,$CookieTime);
setCookie('userLstlogin',$_lastlogin,$CookieTime);
/*session_start();
$_SESSION[admin]=array(
'ID'=>$_ID,
'name'=>$_name,
'tp'=>$_tp,
'lstlogin'=>$_lastlogin,
'logintcount'=>$_logincount
);
*/


}else{
$msg='登录失败!\\n用户或者密码错误!';
$url='index.php';
}
echo jump_quick($url,$msg);
break;
case 'logout':
break;
default:
include $tpl.'login.htm';
break;
}
?>
大家顺便评价一下我这样编程方法怎么样?如何编程才更好?

解决方案 »

  1.   

    setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie。和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这是协议限制)。这需要将本函数的调用放到任何输出之前,包括 <html> 和 <head> 标签以及任何空格。如果在调用 setcookie() 之前有任何输出,本函数将失败并返回 FALSE。如果 setcookie() 函数成功运行,将返回 TRUE。setcookie()函数调用之前不能有任何输出。
      

  2.   

    或者在最前面加一个ob_start()也可以。
      

  3.   

    还是不行的啊,
    我的里面在setCookie根本就没有输出的啊。
      

  4.   

    还是不行的啊,
    我的里面在setCookie根本就没有输出的啊。 
    ---------------------------------------
    还是不行的啊,
    我的里面在setCookie之前根本就没有输出的啊。 
      

  5.   

    你setcookie前面是不是有输出啊.. 
      

  6.   

    setCookie前面是没有任何输出的。我代码都粘贴出来 了。
      

  7.   

    用PHP的header 设置cookie比较好....设置完成 cookie后,如果马上跳转,会得不到cookie.
      

  8.   

    哦。那怎么弄啊。
    header。
      

  9.   

    setCookie('userID',$_ID,$CookieTime);
    从手册上看,你这个
    除了函数名要改成setcookie之外,最好变量名用“”。
    再就是你输出一下setcookie的返回值,虽然他不代表能否成功,但至少可以看他报不报错。
    还有就是,你如何认为自己失败了,你是怎么使用的,这里只有你设置的代码。
      

  10.   

    我是使用的print_r($_SESSION)来判断的是否设置了SESSION的。