查看: 778|回复: 6
|
请求救.PHP - login 的error
[复制链接]
|
|
不知道是什么问题?出现以下的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);
}
?> |
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 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;
?>
请问大大,这是什么问题呢?谢谢你. |
|
|
|
|
|
|
|
发表于 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, 什么时候不需要. |
|
|
|
|
|
|
| |
本周最热论坛帖子
|