尝试练习PHP和SQL-我不确定我的逻辑是否正确

时间:2011-06-03 07:21:06

标签: php sql

我搜索了一个简短的教程来连接数据库然后我想比较用户名和密码然后才能获得访问权限。这是一种新手编码,但至少我可以练习并希望更多地编程。

check.php

<?php
    //Need session//

    $username = 'root';
    $password = 'root';
    $host = 'localhost';
    $db_name = 'pcart';

    $connection = mysql_connect($host, $username, $password) or die('cannot be connected');

    mysql_select_db($db_name, $connection) or die ('Could not select database');
    $user=$_POST['username'];
    $pass=$_POST['password'];

    $query = "Select username, password from tbladmins";
    $user_result = mysql_query($query);
    echo $user_result;
    if (mysql_num_rows($user_result)==0)
    {
        echo "no rows to print";
    }
    while ($row=mysql_fetch_array($user_result, MYSQL_ASSOC))
    {
        $checkuser=$row["username"];
        $checkpass=$row["password"];
    }
    mysql_free_result($user_result);

    if !($user == $checkuser and $pass == $checkpass)
    {
        echo'where are you';
        $results= mysql_query("Select * from tbladmins;") or die('error connecting to mysql');
        if(mysql_num_rows($results)==0)
        {
             echo "no rows found, nothing to print so i am exiting";
        }
        print "test successful"
        mysql_free_result($results);
    }
    else
    {
        echo "Wrong user or password! If you forgot, email Josephine for the username
        and password";
    }
?>

的index.php

<html>
    <head>
        <title>Partner Portal
        </title>
    </head>
    <body id="partners-page">
        <div id="main">
            <form method="post" action="Check.php">
                <input type="text" name="username" value=""/>
                <input type="password" name="password" value=""/>
                <input type="submit" name="submit" value="submit">
                <input type="reset" name="reset" value="reset">
            </form>
            <a href="#">forgotten password</a>

        </div>
        <!--#main-->

        </div><!--div partner-page-->
</html>

修改

问题是,当我测试时,如果用户名和密码与数据库中的用户名和密码匹配,它将不会显示任何内容...所以我忽略了什么?当我测试输入用户名和密码时,为什么页面空白?

3 个答案:

答案 0 :(得分:3)

Nice Josephine,这是一个很好的开始!现在我知道你已经听说过这种说法,有一百万种方法给猫皮肤,这也不例外。有很多方法可以实现上述目标,但是到目前为止,这种方法已经变得有点了,我应该怎么说,不安全。

数据库连接和用户管理以及以安全的方式实现它们现在包含在您可以找到的每个PHP框架中。这一切都是为你完成的,所以基本上你要做的就是填写配置文件,你就可以了。

这么说,了解它们如何联系在一起并且你走在正确的轨道上真是太棒了。 :d

一个框架可以重复使用您在每个应用程序中使用的代码,作为一名软件工程师,我们会重复使用,因此您不希望在整个地方复制它。

另一件事就是像这样的代码保持隐藏,例如,我不能把它弄糟,我知道它已经过适当的测试。

保持良好的工作:D 更有趣的是,你越深入兔子洞。

答案 1 :(得分:0)

约瑟芬,基地/基础工作是的。您始终可以添加MD5 / SHA来哈希密码以提高安全性。

答案 2 :(得分:0)

我能看到它会失败的唯一明显原因是这里的拼写错误( locah - ,而不是 localh - ):

$locahost = 'localhost';

这是一个好的开始,但看起来你还有很长的旅程。

一些显而易见的事情是:

1)为什么将包含'localhost'的变量命名为$ localhost?调用此$ host

会更有意义

2)确实,传递给mysql_connect 的变量只用于mysql_connect - 你为什么不使用文字?为什么变量声明和函数调用分为两个单独的包含文件?

3)为什么没有提供特定的错误消息?其中一个可能是在执行过程中的某个时刻产生的 - 如果你看到它,那么你应该在你的帖子中提供它。如果你没有看到它,那么花一些时间思考为什么(并确保你下次会看到它)。

4)一旦你在测试台上工作了,当你在tbladmin中有几千行时,你认为脚本将如何执行?虽然使用非过程代码执行复杂任务可能会导致难以调试的代码,但在层中推送更多逻辑几乎总能提高性能。考虑:

 $qry = "SELECT * from tbladmins WHERE username='"
        . mysql_real_escape_string($_REQUEST['username'], $connection)
        . "' AND password = '"
        . mysql_real_escape_string($_REQUEST['password'], $connection)
        . "'";
5)在包含文件中使用内联代码是一种混乱的做法 - 如果你将包含文件限制为仅声明函数,类和常量然后在适当的时候显式调用它们,那么你将为自己节省很多悲伤作为你的程序变得更加复杂。

6)包含文件不能代替模块化编程 - 参见上面的(5)。

祝你好运。