2014-03-13 70 views
1

有问题,我登录的PHP代码..PHP登录脚本不会直接登录成功页面提交一次

我有一个提交到“checklogin.php”,这是下面的代码一种基本形式。一旦你提交它只是停留在“checklogin.php”上的登录凭证,并且不显示任何内容。有没有人有任何想法?

<?php 

$host="localhost"; // Host name 
$username="alex"; // Mysql username 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 

?> 
+0

有时在代码导致问题的空行,尝试使用其他的方式来重定向。标题需要成为“html”结果中的第一行 – esdebon

+0

此代码来自与其他人['一天前发布的帖子](http://stackoverflow.com/q/22354466/)相同的地方。我没有碰这个;太多移动部件。 ['This'](http://www.phpeasystep.com/phptu/6.html)最有可能是它的起源。 –

+1

@ Fred-ii- Goddamnit。我们可以找出他的网站,并打他脸请他很好地打倒那个可怕的网站。 – PeeHaa

回答

0

我注意到的第一件事是“保护MySQL的注入” ...... mysql_real_escape_string也不是100%安全的。你应该使用prepared statements

检查您的“?>”后面是否没有空格,并确保在执行标头之前没有“回显”任何内容(“location:login_success.php”);事情。

+2

你能解释一下“mysql_real_escape_string不是100%安全”还是提供引用? – symcbean

+0

@symcbean在StackOverflow中有一个大的线程解释它,看看它:[参考](http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-注意:请注意我说这不是100%安全,并不是说它对每一种情况都是不安全的,准备好的陈述只是一个更好更优雅的选项。 –

+0

好的 - 有趣。虽然大部分错误。根据不同的实现,可以解析客户端(与使用msq – symcbean

0

的,如果在最后声明中只允许3种可能性:

  1. 代码致命的失败,从来没有到“如果”语句
  2. 的密码不匹配,你会得到一个信息这样说
  3. 密码被验证,但头()调用一个错误

失败因为你得到了一个空白页,这意味着1或3发生了。在这两种情况下,都会报告的某处。你的问题是你不知道如何找到PHP试图告诉你的消息。

(顺便说一句,答案是最有可能的是,脚本生成一些输出之前的所有头(),所以它失败)