2012-10-30 182 views
0

我正在尝试做一个简单的PHP MySQL登录页​​面。我一直在阅读代码,看不到我做错了什么。我正在用一个电子邮件和密码进行测试,我刚刚在数据库中查看了这个测试,所以我知道它存在。当我单击前一个表单上的提交时,它只是将我重定向回到同一页面并且不登录(我知道这是因为我的标题在$ _SESSION变量时发生变化;我知道这是因为我的注册页面可用,但一旦注册,不是登录)。请注意,注册后他们输入他们的名字和姓氏,这就是为什么我将它包含在session_start上的$ _SESSION变量中的原因。下面的代码(第一形式和当时的checklogin.php页):PHP登录页面重定向到自己并且不登录

<!--THIS IS THE FORM FROM THE PAGE SIGN_IN.PHP--> 
<form method="post" target="checklogin.php"> 
    <label for="email">EMAIL/USERNAME:</label> 
    <input type="text" name="email" id="email"> 
    <label for="password">PASSWORD:</label> 
    <input type="password" name="password" id="password"> 
    <br /> 
    <input type="submit" value="Let's Play!"> 
</form> 

这是checklogin.php脚本的形式员额:

<?php 
$mysqli = mysqli_connect("mysql_name","login_id","password", "db_name"); 
if (!$mysqli) 
    { 
    die('Could not connect: ' . mysqli_error($mysqli)); 
    } 

// username and password sent from form 
//NEVER Remove the mysql_real_escape_string. Else there could be an Sql-Injection! 
$email=$mysqli->real_escape_string($_POST['email']); 
$password=$mysqli->real_escape_string($_POST['password']); 

$sql="SELECT * FROM tbl_name WHERE email='$email' and password='$password'"; 
$result = $mysqli->query($sql); 

if(is_object($result) && $result->num_rows == 1){ 
    // Register variables and redirect to file "profile.php" 
    session_start(); 
    $_SESSION['firstname']=$_POST['firstname']; 
    $_SESSION['lastname']=$_POST['lastname']; 
    $_SESSION['email']=$_POST['email']; 
    $_SESSION['password']=$_POST['password']; 
    redirect('profile.php'); 
} else { 
    echo "Wrong Username or Password"; 
} 

?> 

我也试过这与头('位置:profile.php'),但具有相同的结果。

+0

使用mysql_num_rows()来chk –

+0

可能有多个记录具有相同的电子邮件和传递。 –

回答

4
<form method="post" action="checklogin.php"> 

action属性用于指定表单发布的URL。而target属性用于指定应该加载URL的位置。

如果action属性丢失,它默认为当前URL,这就是您提交表单时导航到同一页面的原因。

+0

没错,我一直在忙着看着PHP,我完全看着那些明显的东西。谢谢! – MillerMedia

2
Change Your Form As: 

    <form method="post" action="checklogin.php"> 
     <label for="email">EMAIL/USERNAME:</label> 
     <input type="text" name="email" id="email"> 
     <label for="password">PASSWORD:</label> 
     <input type="password" name="password" id="password"> 
     <br /> 
     <input type="submit" value="Let's Play!"> 
    </form> 

Checklogin.php as 

    <?php 
    $mysqli = mysqli_connect("mysql_name","login_id","password", "db_name"); 
    if (!$mysqli) 
     { 
     die('Could not connect: ' . mysqli_error($mysqli)); 
     } 

    // username and password sent from form 
    //NEVER Remove the mysql_real_escape_string. Else there could be an Sql-Injection! 
    $email=$mysqli->real_escape_string($_POST['email']); 
    $password=$mysqli->real_escape_string($_POST['password']); 

    $sql="SELECT * FROM tbl_name WHERE email='$email' and password='$password'"; 
    $result = $mysqli->query($sql); 

    if(is_object($result) && $result->num_rows == 1){ 
     // Register variables and redirect to file "profile.php" 
     session_start(); 
     $_SESSION['firstname']=$_POST['firstname']; 
     $_SESSION['lastname']=$_POST['lastname']; 
     $_SESSION['email']=$_POST['email']; 
     $_SESSION['password']=$_POST['password']; 
     //redirect('profile.php'); 
     header('location:profile.php'); 

} else { 
    echo "Wrong Username or Password"; 
} 

?>