-8

我的 PHP 代码出错了。我的想法是检查数据库中是否存在用户名和密码,然后将其重定向到 URL。

在此处输入代码我创建了两个页面。一个是索引,另一个是重定向。重定向代码出现问题。

<!DOCTYPE html>
<html>
<body>
<?php
//echo $_POST['uname'];
//echo $_REQUEST['uname'];
$uname=$_POST['uname'];
$pwd=$_POST['pwd'];
//echo $_POST['pwd'];
//echo $_REQUEST['pwd'];
//echo $uname;
//echo $pwd;
$con = mysql_connect("localhost","root","root");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

  $db_found=mysql_select_db("sn", $con);  

 //$result = mysql_query("SELECT fname,password FROM udata");

if ($db_found) 
{
$result = mysql_query("SELECT fname,password FROM udata");
while ( $db_field = mysql_fetch_assoc($result) ) 
{
if ($db_field['uname']==$uname && $db_field['password']==$pwd)
header( 'Location: www.youtube.com' ) ;

/*print $db_field['fname'] . "<BR>";
print $db_field['lname'] . "<BR>";
print $db_field['uname'] . "<BR>";
print $db_field['password'] . "<BR>";
*/
}

mysql_close($con);

}
else 
{

print "Database NOT Found ";
mysql_close($db_handle);


}
?>


</body>
</html>

请帮我解决一下这个。

4

3 回答 3

2

我认为你必须改变这一点:

if ($db_field['uname']==$uname && $db_field['password']==$pwd)

对此:

if ($db_field['fname']==$uname && $db_field['password']==$pwd)
于 2013-01-25T22:02:17.033 回答
1

您的代码充满了错误。正确缩进它应该会显示一些缺少的开/关大括号:您应该能够自己找到它们!


此外,您直接开始输出 HTML 页面。但是,稍后你使用

header( 'Location: www.youtube.com' ) ;

如果用户名和密码正确,则将浏览器重定向到另一个页面。已经开始输出 HTML 页面后,您无法发送 HTTP 标头(没有一些高级技巧


重定向后,您需要使用exit().


假设您的udata表中有多个用户,您需要在查询中添加搜索条件。有很多可能,这是一种:

$result = mysql_query("SELECT password FROM udata WHERE fname='$uname'");

现在您可以检查这是否返回了一条记录(如果不是,则用户不存在)以及密码是否正确。

注意:直接使用这些$_POST[]值会使您的应用程序容易受到 SQL 注入攻击(以及其他攻击)。您需要清理这些输入。

附加说明/专业提示:直接将密码存储在数据库中是一件坏事(tm)。而是使用哈希和盐(使用您最喜欢的搜索引擎查找


正如njk已经评论的那样,您不应再使用折旧的mysql_*功能。

于 2013-01-25T22:02:37.960 回答
0

你错过了几个,{你应该exit();在你之后添加header('Location: www.youtube.com');

<?php
    $uname=$_POST['uname'];
    $pwd=$_POST['pwd'];
    $con = mysql_connect("localhost","root","root");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }

    $db_found=mysql_select_db("sn", $con);  


    if ($db_found) {
        $result = mysql_query("SELECT fname,password FROM udata");
        while ( $db_field = mysql_fetch_assoc($result) ) {
            if ($db_field['fname']==$uname && $db_field['password']==$pwd) {
               header('Location: www.youtube.com');
               exit();
            }
        }

        mysql_close($con);

    } else {
        print "Database NOT Found ";
        mysql_close($db_handle);
    }
?>
于 2013-01-25T22:05:33.097 回答