【发布时间】:2013-02-21 22:09:08
【问题描述】:
我正在创建一个登录页面,在其中输入用户名和密码,然后检查数据库以查看它们是否匹配(我之前已经发布过,但我的代码完全不正确,所以我不得不重新开始)单击提交按钮,如果两个值匹配,用户应该被引导到主页 (index.php),或者应该出现一条错误消息,说明“登录无效。请重试。”非常简单的基本东西。然而,我无法让任何变化发挥作用。
这是我没有验证检查的代码。我相信这段代码是正确的,但如果不是,有人可以解释一下原因。我不是要求任何人编写任何代码,只是解释为什么它不能正常工作。
<?php
function Password($UserName)
{
//database login
$dsn = 'mysql:host=XXX;dbname=XXX';
$username='*****';
$password='*****';
//variable for errors
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
//try to run code
try {
//object to open database
$db = new PDO($dsn,$username,$password, $options);
//check username against password
$SQL = $db->prepare("Select USER_PASSWORD FROM user WHERE USER_NAME = :USER_NAME");
$SQL->bindValue(':USER_NAME', $UserName);
$SQL->execute();
$username = $SQL->fetch();
if($username === false)
{
$Password = null;
}
else
{
$Password = $username['USER_PASSWORD'];
}
return $Password;
$SQL->closeCursor();
$db = null;
} catch(PDOException $e){
$error_message = $e->getMessage();
echo("<p>Database Error: $error_message</p>");
exit();
}
?>
现在是验证码。我用谷歌搜索了这个并找到了数百种方法,但这种方法最符合我的编码风格。它是不完整的,我想要一些关于如何正确完成它以及将它放在上面代码中的位置的帮助。我的假设是在此评论之后:“//检查用户名与密码”。现在我已经看过这个版本两次了,在一个版本中检查的是 txtUserName 而另一个只是用户名。我相信在每个 if 语句之后应该有 else 语句将它们引导到 index.php 页面。此外,第三个 if 语句是检查密码是否与用户名匹配。我不明白这一点的变化。它们太复杂了。
function Login()
{
if(empty($_POST['txtUserName']))
{
$this->HandleError("UserName is empty!");
return false;
}
if(empty($_POST['txtPassword']))
{
$this->HandleError("Password is empty!");
return false;
}
$username = trim($_POST['txtUserName']);
$password = trim($_POST['txtPassword']);
if(!$this->($username,$password))
{
return false;
}
}
我知道我在这里问了很多。但我对 PHP 很陌生,并且非常努力地学习它。而且那里的信息太多了,其中大部分不适合初学者。任何和所有的帮助将不胜感激。
【问题讨论】:
-
你的函数(主要是
Login())在课堂上吗?如果不是,你不应该引用$this -
我知道你说它不起作用,但发生了什么?你得到了什么?
-
您在
if(!$this->($username,$password))缺少一些东西。您尝试调用哪种方法? -
这条线在做什么?
if(!$this->($username,$password)) -
代码看起来不完整。 if(!$this->($username,$password)) { return false; } 应该包含一个动作
标签: php validation login