PHP 代码不起作用。简单的代码,但我被卡住了[关闭]

Posted

技术标签:

【中文标题】PHP 代码不起作用。简单的代码,但我被卡住了[关闭]【英文标题】:PHP code does not work. Simple code but I am stuck [closed] 【发布时间】:2013-01-09 23:01:17 【问题描述】:

我的 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>

请帮帮我。

【问题讨论】:

错误是什么? Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDO 或 MySQLi - this article 将帮助您决定哪个。 您未能向我们提供您遇到的确切错误以及代码的两端。 这里有许多不良实践的例子,尤其是在密码处理方面。并且使用mysql_xx() 函数也是一个不好的迹象。如果您只是学习 PHP,请找到比您现在使用的更好、更新的教程源。 【参考方案1】:

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


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

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

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


重定向后,您需要使用exit() 停止程序流(因为它不再重要)。


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

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

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

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

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


正如njk 已经评论的那样,您不应再使用已弃用的mysql_* 函数。

【讨论】:

我想我已经解决了大部分问题区域...现在由您来解决它们!【参考方案2】:

您缺少几个,您应该在header('Location: www.youtube.com'); 之后添加exit();

<?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);
    
?>

【讨论】:

【参考方案3】:

我认为你必须改变这个:

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

到这里:

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

【讨论】:

不错的收获!在我看到它之前,我不得不阅读你的答案几次 我看不出有什么不同:/

以上是关于PHP 代码不起作用。简单的代码,但我被卡住了[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

路由在 webpack + react 项目中不起作用

尝试在 SQLAlchemy 中执行“高级”查询,但我被卡住了

简单的 PHP 回显代码不起作用

iPhone中的简单php帖子不起作用

简单 VBO 示例的问题

以下用于素数分解的 Python 程序不起作用