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>&nbsp;</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极易被利用)。也许它对位置标题也有同样的作用?我真的很怀疑,但也有可能