尝试练习PHP和SQL-我不确定我的逻辑是否正确
我在谷歌上搜索了一个连接数据库的简短教程,然后我想比较一下用户名和密码,然后就可以访问了。这是一种新手编码,但至少我可以练习,希望能学到更多编程知识 check.php尝试练习PHP和SQL-我不确定我的逻辑是否正确,php,sql,Php,Sql,我在谷歌上搜索了一个连接数据库的简短教程,然后我想比较一下用户名和密码,然后就可以访问了。这是一种新手编码,但至少我可以练习,希望能学到更多编程知识 check.php <?php //Need session// $username = 'root'; $password = 'root'; $host = 'localhost'; $db_name = 'pcart'; $connection = mysql_connect($hos
<?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>
合作伙伴门户
编辑
问题是,当我测试用户名和密码是否与数据库中的匹配时,它不会显示任何内容。。。那么我是否忽略了什么?当我测试输入用户名和密码时,为什么页面是空白的?Josephine,基本/基础是的。您可以随时添加/散列您的密码以提高安全性。很好的Josephine,这是一个很好的开始!现在我知道你们听说过这样一句话,剥猫皮的方法有一百万种,这也不例外。实现上述目标的方法确实有很多,但最近,这种方法已经变得有点不安全了 数据库连接和用户管理以及以安全的方式实现这一切现在都包含在您可以找到的每个PHP框架中。这些都是为您完成的,所以基本上您需要做的是填写配置文件,然后就可以开始了 话虽如此,但很高兴能了解到这一切是如何联系在一起的,而你正走在正确的轨道上D 有一个框架可以重复使用您在每个应用程序中使用的代码,作为一名软件工程师,我们重复使用了很多代码,所以您不想到处重复 另一件事是,像这样的代码,保持隐藏,所以举例来说,我,不能把它弄糟,我知道它的测试是正确的
继续做好工作:D你越深入兔子洞,它就变得越来越有趣。我能看到它失败的唯一明显原因是这里的打字错误(locah-,而不是locah-): 这是一个好的开始,但看起来你还有很长的路要走 一些显而易见的事情是: 1) 为什么要将包含“localhost”的变量命名为$localhost?给这个$host打电话会更有意义 2) 实际上,传递给
mysql\u connect
的变量只用于mysql\u connect
——为什么不使用文本?为什么变量声明和函数调用在两个独立的include文件中分开
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) 在include文件中使用内联代码是一种混乱的做法——如果您将include文件限制为仅声明函数、类和常量,然后在正确的时间显式调用它们,那么随着程序变得更加复杂,您将省去很多麻烦
6) 包含文件不能替代模块化编程-另见上文(5)
祝你好运。你拼错了$locahost='localhost';在dbconfig.php中,它必须是$localhost='localhost';考虑使用PDO进行数据库连接。@ Yorirou,PDO是什么?如果我无知,我很抱歉,但我刚刚开始写代码。@Sarah,是的,我知道我已经改正了。。这是一个非常有用的API,非常值得使用。@Gray Tsui,如何添加md5/sha?我对此不熟悉。I google it upHi MD5/SHA是标准散列方法之一(用于加密/加密)。在PHP中,可以调用md5($str)或sha1($str)。当然欢迎您使用echo md5($str)或sha1($str)并查看效果。G'luck@Gray Tsui,不仅是普通的md5/sha,还有Saltya,我知道,但我的代码不起作用,因为当我尝试测试时,它显示为空白。当pinnaclecart数据库位于pinnaclecart之外时,哪个php框架在pinnaclecart数据库中工作得更好?尝试使用var_dump($\u POST)并使用$\u POST而不是$\u requests是的,我已经更改为$\u POST,但什么也没有发生:(我仍在弄清楚…
if!($user=$checkuser和$pass=$checkpass)
您的检查也错误;)“and”在PHP中是&&我将if语句重写为if($user===$checkuser&&$pass===$checkpass)
我注意到,我将所有内容放回一个文件(check.PHP)中,而不是将文件分开。至于#3,我只看到白色和空白的页面,所以我不明白为什么会这样。我到现在还在琢磨。我知道,但是管理员是用来测试的。你所说的是对的,因为如果是对合作伙伴来说,也是一样的。
$qry = "SELECT * from tbladmins WHERE username='"
. mysql_real_escape_string($_REQUEST['username'], $connection)
. "' AND password = '"
. mysql_real_escape_string($_REQUEST['password'], $connection)
. "'";