2012-10-04 83 views
0
<?php 
session_start(); 
include 'db.php'; 
include 'header.html'; 

if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['email'])) { 
    header("location:profile.php"); 

} elseif(!empty($_POST['email']) && !empty($_POST['pass'])) { 
    $email = mysql_real_escape_string($_POST['email']); 
    $pass = md5(mysql_real_escape_string($_POST['pass'])); 

    $sql = mysql_query("SELECT id, name, email, pass FROM users WHERE email='$email' AND pass='$pass'"); 

    $row = mysql_fetch_array($sql); 
    $id = $row['id']; 
    $email1 = $row['email']; 
    $name = $row['name']; 

    $num = mysql_num_rows($sql); 
    if($num == 1) { 
    $_SESSION['id'] = $id; 
    $_SESSION['email'] = $email1; 
    $_SESSION['name'] = $name; 
    $_SESSION['LoggedIn'] = 1; 
    $update = mysql_query("UPDATE users SET lastlogin=NOW() WHERE email='$email1'"); 

    header("location:profile.php"); 

    } else { 
    echo "<h1>Error</h1>"; 
    echo "<p>Sorry! Either your account could not be found or you have entered the wrong email or password. Please try again.</p>"; 
    } 
} 
?> 

此脚本在我的localhost环境中完美工作, profile.php如果会话设置为或不为空。有任何想法吗?php登录脚本在本地但在主机上不可用

第二个问题,我的代码是否正确地将'lastlogin'更新为当前时间?数据库结构必须为此做些什么?它不在我的数据库中更新。

谢谢你的帮助。

+0

请在脚本的顶部键入'error_reporting(E_ALL)'。你会看到至少 – Yang

+0

'NOW()'以这种格式返回日期和时间:“2006-04-12 13:47:36”。我认为这是你需要的。 –

+0

@metal_fan做到了,但没有报告错误。 FakeHeal谢谢您将继续测试该部分 – robk27

回答

0

好吧,通过广泛的搜索找出它。标头是正在用

include header.html 

线路发送,因此无法执行

header(location: profile.php) 

线。到目前为止,我从未听说过这个问题。所以为了解决这个问题,我刚刚在HTML开始之前移动到了PHP代码的底部

<?php 
... 
include header.html 
?> 

。现在,包含标题行可以做到这一点,然后页面仍然会加载标题。

感谢您对此的所有帮助。

+0

不知道为什么它仍然在我的本地主机上工作 – robk27

0
header("location: profile.php"); 
       ^//space should present because in some host environment it creates problem 
+0

actully应该使用完整的URI – 2012-10-04 04:20:44

+0

如果文件位于同一台服务器上,则不需要完整的URI。 @Dagon –

+0

不正确,因为[header](http://www.php.net/manual/en/function.header.php)手册页说:“注意: HTTP/1.1需要绝对URI作为参数到»位置:包括方案,主机名和绝对路径,但是一些客户端接受相对URI。通常可以使用$ _SERVER ['HTTP_HOST'],$ _SERVER ['PHP_SELF']和dirname()相对自己:“ – 2012-10-04 04:23:43

0

如果您是从形式使用最有可能的POST重定向到登录脚本,你不应该使用$ _ POST [“”]而不是$ _SESSION?

只是一个想法。

+0

抱歉,我没有发布表单部分。它直接在这个脚本的下面,我有PHP SELF的表单动作,所以它检查POST是否为空,然后运行登录检查并将数据放入会话中 – robk27

0

始终使用exit();header重定向

+0

ok会这样做 – robk27

1

你的代码是用于更新lastlogin非常好,但什么是你的错误?请说明你得到的错误类型。在逻辑上你的代码似乎是正确的,这可能是一些语法错误。在页面顶部添加error_reporting(E_ALL)并查看实际发生了什么错误。

+0

同时检查错误的mysql_query()。 – Barmar

+0

我没有收到任何错误。登录后,它将保持在此登录页面上,而不是进入配置文件页面。在我的本地主机上,它转到配置文件页面。使用bluehost – robk27

+0

尝试不是标题。 – Gaurav

相关问题