佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 779|回复: 6

请求救.PHP - login 的error

[复制链接]
发表于 5-8-2006 01:52 AM | 显示全部楼层 |阅读模式
不知道是什么问题?出现以下的message:


Notice: Undefined index: user_name in c:\program files\easyphp1-8\www\cinema\login.php on line 13

Notice: Undefined index: password1 in c:\program files\easyphp1-8\www\cinema\login.php on line 14

Notice: Undefined index: user_name in c:\program files\easyphp1-8\www\cinema\login_funcs.inc.php on line 27

请问以下的code有什么问题?如果successful login,应该link到index.php,但不OK的.各位大大救救我.
login.php
<?php


  include_once("login_funcs.inc.php");


if ($LOGGED_IN = user_isloggedin()) {
      user_logout();
      $_COOKIE['user_name'] = '';
      unset($LOGGED_IN);
}

  if (strlen($_POST['user_name']) <='8' &&
strlen($_POST['password1']) <='12') {
  $feedback = user_login();
}else {
  $feedback = 'ERROR -- Username and password are too long';
}
if ($feedback == 1) {
  header ("Location:index.php");
}else {
   $feedback = 'ERROR ';
}



$php_self = $_SERVER['PHP_SELF'];

$login_form = <<<EOLOGINFORM
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#FOF8FF" ALIGN=center VALIGN=top WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=left VALIGN=top WIDTH=83%>


<P CLASS="bold">LOGIN</P>
<FORM ACTION="$php_self" METHOD="POST">
<P CLASS="bold">Username<BR>
<INPUT TYPE="TEXT" NAME="user_name" VALUE="" SIZE="10"
MAXLENGTH="15"></P>
<P CLASS="bold">Password<BR>
<INPUT TYPE="password" NAME="password1" VALUE="" SIZE="10"
MAXLENGTH="15"></P>
<P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE='Login' ></P>
</FORM>
</TD>
</TR>
</TABLE>
EOLOGINFORM;
echo $login_form;

?>


login_funcs.inc
<?php
include("dbfinfo.inc.php");
mysql_connect("localhost",$username,$password);
@mysql_select_db($database) or die (" Unable to select  database");


$LOGGED_IN = false;
unset($LOGGED_IN);

function user_isloggedin() {


if (isSet($LOGGED_IN)) {
     return $LOGGED_IN;
}
if (isSet($_COOKIE["user_name"])) {
           return true;
          }else {
          return false;
          }

}


function user_login() {

if (!$_POST['user_name'] || !$_POST['password1']) {
   echo "ERROR -- Mising username or password";
}else {
  $password1 = md5($_POST['password1']);
  $user_name = ($_POST['user_name']);
  $query = "SELECT user_name
                 FROM user
                 WHERE user_name ='$user_name'";
  $result = mysql_query($query);
  if (!$result || mysql_num_rows($result) < 1) {
    echo "ERROR -- User not found or password incorrect";
  }
}
}



function user_logout() {
  setcookie('user_name','',(time()+2592000),'/','',0);

}

?>
回复

使用道具 举报


ADVERTISEMENT

发表于 5-8-2006 06:09 AM | 显示全部楼层
user_login() 在成功登入后需要return一个1。
上面那三个notcie跟这个没有关系,那是因为在没有POST的情况下$_POST['user_name']和$_POST['passwd1']是undefined的,之前应该用一个isset去validate。
回复

使用道具 举报

 楼主| 发表于 5-8-2006 10:21 AM | 显示全部楼层

回复 #2 苦瓜汤 的帖子

谢谢大大.我再试看下.
回复

使用道具 举报

 楼主| 发表于 5-8-2006 08:27 PM | 显示全部楼层

回复 #3 小今 的帖子

user_login() 在成功登入后需要return一个1。是不是以下这样呢.
但就是不行???

if ($feedback == 1) {

  header ("Location:index.php");
}else {
   $feedback = 'ERROR ';
}
每当keyin username 和password 它还是回到login 的form 而不是 index.php..
请大大highlight下那部分的code要改呢?谢谢...
回复

使用道具 举报

发表于 5-8-2006 09:07 PM | 显示全部楼层
在你login成功后,
也就是说
$query = "SELECT user_name FROM user WHERE user_name ='$user_name'";
这里如果对的话就
$feedback == 1
不是的话就
echo "ERROR -- User not found or password incorrect";

还有

if ($feedback == 1) {        《------???

  header ("Location:index.php");
}else {
   $feedback = 'ERROR ';   《----你这个错了为何上面也有一个feedback的?
}


因该是这样的。
if ($feedback == 1) {                     
  header ("Location:index.php");
}else {
   echo "Error Username or Password Wrong";   
}

[ 本帖最后由 红发 于 5-8-2006 09:09 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 5-8-2006 10:15 PM | 显示全部楼层

回复 #5 红发 的帖子

这样可以吗?但出现以下message:
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\cinema\login_funcs.inc.php:57) in c:\program files\easyphp1-8\www\cinema\login_funcs.inc.php on line 40


login_funcs.inc

<?php
include("dbfinfo.inc.php");
mysql_connect("localhost",$username,$password);
@mysql_select_db($database) or die (" Unable to select  database");


$LOGGED_IN = false;
unset($LOGGED_IN);

function user_isloggedin() {


if (isSet($LOGGED_IN)) {
     return $LOGGED_IN;
}
if (isSet($_COOKIE["user_name"])) {
           return true;
          }else {
          return false;
          }

}


function user_login() {

if (!$_POST['user_name'] || !$_POST['password1']) {
   echo "ERROR -- Mising username or password";
}else {
  $password1 = md5($_POST['password1']);
  $user_name = ($_POST['user_name']);
  $query = "SELECT user_name
                 FROM user
                 WHERE user_name ='$user_name'";
  $result = mysql_query($query);
  if (mysql_num_rows($result) != 1){
     echo "Error Username or Password Wrong";
  }else {

     header ("Location:index.php");
  }

}
}



function user_logout() {
  setcookie('user_name','',(time()+2592000),'/','',0);

}

?>

login
<?php


  include_once("login_funcs.inc.php");


if ($LOGGED_IN = user_isloggedin()) {
      user_logout();
      $_COOKIE['user_name'] = '';
      unset($LOGGED_IN);
}

  if (strlen($_POST['user_name']) <='8' &&
strlen($_POST['password1']) <='12') {

  $feedback = user_login();
}else {
  $feedback = 'ERROR -- Username and password are too long';
}




$php_self = $_SERVER['PHP_SELF'];

$login_form = <<<EOLOGINFORM
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#FOF8FF" ALIGN=center VALIGN=top WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=left VALIGN=top WIDTH=83%>


<P CLASS="bold">LOGIN</P>
<FORM ACTION="$php_self" METHOD="POST">
<P CLASS="bold">Username<BR>
<INPUT TYPE="TEXT" NAME="user_name" VALUE="" SIZE="10"
MAXLENGTH="15"></P>
<P CLASS="bold">Password<BR>
<INPUT TYPE="password" NAME="password1" VALUE="" SIZE="10"
MAXLENGTH="15"></P>
<P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE='Login' ></P>
</FORM>
</TD>
</TR>
</TABLE>
EOLOGINFORM;
echo $login_form;

?>

请问大大,这是什么问题呢?谢谢你.
回复

使用道具 举报

Follow Us
发表于 6-8-2006 02:25 AM | 显示全部楼层
你的 isSet 大小写错误, 应该是 isset
另外, 每一个 $_POST 都应该先用 isset 检查.

你的 code 设计有点问题. 我建议你先放一个 hidden field:

<input type="hidden" name="LOGIN_NOW" value="TRUE">

然后在你的 code 里, 主要执行 login 的 code 这样写:

if (isset($_POST["LOGIN_NOW"]) && $_POST["LOGIN_NOW"] == "TRUE") {

  // 所有执行 login 的 code

}


此做法的目的是告诉你的 code, 什么时候需要执行 login, 什么时候不需要.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-11-2024 05:33 AM , Processed in 0.124223 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表