Php Html登录表单不起作用
好的,我有一个如下的登录表单:Php Html登录表单不起作用,php,html,Php,Html,好的,我有一个如下的登录表单: <form id="loginForm" name="loginForm" method="post" action="login-exec.php"> <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> <tr> <td width="112"><b>Login</b></td&
<form id="loginForm" name="loginForm" method="post" action="login-exec.php">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td width="112"><b>Login</b></td>
<td width="188"><input name="login" type="text" class="textfield" id="login" /></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input name="password" type="password" class="textfield" id="password" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Login" /></td>
</tr>
</table>
</form>
登录
密码
现在,这个表单位于名为members的目录中的一个页面上。当我把它放在主目录的一个页面上,并在尝试登录时将操作更改为“members/login exec.php”时,它只是刷新页面,但浏览器中的页面名称会更改为表单中发生的操作
伙计们,有什么办法让这一切顺利吗
编辑,下面是login-exec.php代码:
<?php
//Start session
session_start();
//Include database connection details
require_once('config.php');
//Array to store validation errors
$errmsg_arr = array();
//Validation error flag
$errflag = false;
//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database");
}
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
//Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);
//Input Validations
if($login == '') {
$errmsg_arr[] = 'Login ID missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-form.php");
exit();
}
//Create query
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) == 1) {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
session_write_close();
header("location: members.php");
exit();
}else {
//Login failed
header("location: login-failed.php");
exit();
}
}else {
die("Query failed");
}
?>
我觉得login-exec.php中有一些代码不正常。看看你是否能在那一页上找到1。如果它被调用;2.在哪一点上是保释
我的猜测是login-exec.php中的重定向认为它运行在错误的目录中。在我看来,login-exec.php中似乎有一些代码工作不正常。看看你是否能在那一页上找到1。如果它被调用;2.在哪一点上是保释
我的猜测是login-exec.php中的重定向认为它运行在错误的目录中。是否尝试在login-exec.php文件中执行头重定向?如果是,您使用的是相对路径还是绝对路径?可能存在问题,因为它应该是一个绝对路径。是否尝试在login-exec.php文件中执行头重定向?如果是,您使用的是相对路径还是绝对路径?问题可能就在那里,因为它应该是一条绝对路径。听起来像是第一次重定向。为了进行调试,您可以尝试在标题(“location:login form.php”)之前放置一个die()
语句代码>
例如:
die('Found error. Session: ' . var_export($_SESSION, true));
header("location: login-form.php");
关于绝对路径的响应是正确的-但是只要您提供有效的登录,您就可以了。我假设members.php
存储在members
目录下
无论是否需要绝对路径,在重定向中始终使用绝对路径都是一种很好的做法
更新:检查您的站点后,问题似乎是登录表单前未关闭的
标记。如果您关闭该标记,或者将登录表单从另一个表单中移出,您应该不会有问题。第一个表单标记没有指定操作
或方法
,因此只是对同一页面执行GET请求,将数据放入URL。听起来像是在点击第一个重定向。为了进行调试,您可以尝试在标题(“location:login form.php”)之前放置一个die()
语句代码>
例如:
die('Found error. Session: ' . var_export($_SESSION, true));
header("location: login-form.php");
关于绝对路径的响应是正确的-但是只要您提供有效的登录,您就可以了。我假设members.php
存储在members
目录下
无论是否需要绝对路径,在重定向中始终使用绝对路径都是一种很好的做法
更新:检查您的站点后,问题似乎是登录表单前未关闭的
标记。如果您关闭该标记,或者将登录表单从另一个表单中移出,您应该不会有问题。第一个表单标记没有指定操作
或方法
,因此只是对同一页面执行GET请求,将数据放入URL。如果使用相对URL在login-exec.php中使用头重定向,则应使用绝对路径。如果使用相对URL在login-exec.php中使用头重定向,你应该使用绝对路径。如果上述任何一项都不起作用,我唯一能想到的是,它可能是你“行动”中的路径。您是否尝试过./members/login-exec.php(与members/login-exec.php相反)?如果上述方法都不起作用,我唯一能想到的是,它可能是您“操作”中的路径。您是否尝试过./members/login-exec.php(与members/login-exec.php相反)?首先,这是您的表单,但没有表格。这应该更易于调试,并且更具语义:
<form id="loginForm" name="loginForm" method="post" action="members/login-exec.php">
<fieldset id="login_fields">
<label for="login">Login</label>
<input name="login" type="text" class="textfield" id="login" />
<label for="password">Password</label>
<input name="password" type="password" class="textfield" id="password" />
<input type="submit" name="Submit" value="Login" />
</fieldset>
</form>
不管你把它放在哪里,它都会起作用
并对登录验证脚本执行相同的操作:
header("Location: /members/members.php")
或者,如果您对此感到满意,您甚至可以使用完整路径
还有两件事:
第一:您还可以使用完整的URL来显示操作/位置。我会考虑至少在位置标头上这样做。因为表单似乎要去某个地方做一些事情,所以动作部分可能很好。但是位置标题可能有点烦躁
第二:我想知道脚本之所以会做一些奇怪的事情,是因为PHP试图猜测文件在哪里。默认情况下,如果包含的文件不在应该的位置,PHP将查找该文件(不幸的是,这使得PHP极易被利用)。也许它对位置标题也有同样的作用?我真的很怀疑,但它可能与另一个我没有注意到的点有关。首先,这是你的表格,但没有表格。这应该更易于调试,并且更具语义:
<form id="loginForm" name="loginForm" method="post" action="members/login-exec.php">
<fieldset id="login_fields">
<label for="login">Login</label>
<input name="login" type="text" class="textfield" id="login" />
<label for="password">Password</label>
<input name="password" type="password" class="textfield" id="password" />
<input type="submit" name="Submit" value="Login" />
</fieldset>
</form>
不管你把它放在哪里,它都会起作用
并对登录验证脚本执行相同的操作:
header("Location: /members/members.php")
或者,如果您对此感到满意,您甚至可以使用完整路径
还有两件事:
第一:您还可以使用完整的URL来显示操作/位置。我会考虑至少在位置标头上这样做。因为表单似乎要去某个地方做一些事情,所以动作部分可能很好。但是位置标题可能有点烦躁
第二:我想知道脚本之所以会做一些奇怪的事情,是因为PHP试图猜测文件在哪里。默认情况下,如果包含的文件不在应该的位置,PHP将查找该文件(不幸的是,这使得PHP极易被利用)。也许它对位置标题也有同样的作用?我真的很怀疑,但也有可能