Php 函数返回值
我之前问过一个类似的问题,但我想我现在离答案更近了 我有一个功能,验证用户的电子邮件地址和密码,然后他们才能登录到配置文件 如果电子邮件不正确,则生成错误消息;它呼应出“没有找到匹配的电子邮件” 当我输入正确的电子邮件和密码时,不会返回任何内容。但如果我输入了错误的密码和错误的电子邮件,它会给我“找不到匹配的电子邮件”。同样的情况也会发生在正确的电子邮件中,但密码错误 我尝试使用Php 函数返回值,php,mysql,pdo,Php,Mysql,Pdo,我之前问过一个类似的问题,但我想我现在离答案更近了 我有一个功能,验证用户的电子邮件地址和密码,然后他们才能登录到配置文件 如果电子邮件不正确,则生成错误消息;它呼应出“没有找到匹配的电子邮件” 当我输入正确的电子邮件和密码时,不会返回任何内容。但如果我输入了错误的密码和错误的电子邮件,它会给我“找不到匹配的电子邮件”。同样的情况也会发生在正确的电子邮件中,但密码错误 我尝试使用fetchAll和fetchcolu返回,但在输入正确的值时,仍然会得到相同的循环 有什么想法吗 function v
fetchAll
和fetchcolu
返回,但在输入正确的值时,仍然会得到相同的循环
有什么想法吗
function valid_credientials($email,$password){
global $db;
$q = "SELECT * FROM user WHERE email = :email AND password =:password";
$query = $db->prepare($q);
$query->execute(array(":email" => $email, ":password" => $password));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
return $query->fetchAll($q,0)==1 ? true:false;
}
}
// return false by default
return false;
}
邮差
if (isset($_POST['email'], $_POST['password'])) {
if (valid_credientials($_POST['email'], $_POST['password']) == false) {
$errors[] = 'No matching email found.';
}
if (empty($errors)) {
$_SESSION['email'] = htmlentities($_POST['email']);
header("Location: profile.php");
die();
}
}
您应该添加一个默认值
return false代码>语句:
function valid_credientials($email,$password){
global $db;
$q = "SELECT * FROM user WHERE email = :email AND password =:password";
$query = $db->prepare($q);
$query->execute(array(":email" => $email, ":password" => $password));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
return $query->fetchAll($q,0)==1 ? true:false;
}
}
// return false by default
return false;
}
顺便说一句,代码缩进是你的朋友;)
但是,这可以优化为更稳定:
function valid_credientials($email,$password){
global $db;
$q = "SELECT * FROM user WHERE email = :email AND password =:password";
$query = $db->prepare($q);
if(!$query) {
throw new Exception('Failed to prepare the query');
}
$ret = $query->execute(array(":email" => $email, ":password" => $password));
if(!$ret) {
throw new Exception('Failed to execute the query');
}
$results = $query->fetchAll();
if($results === FALSE) {
throw new Exception('Failed to fetch results');
}
if(count($results) > 0) {
// additional password check is not necessary
return true;
}
// return false by default
return false;
}
不知道你为什么写这么多代码
function valid_credientials($email,$password){
global $db;
$q = "SELECT 1 FROM user WHERE email = ? AND password = ?";
$query = $db->prepare($q);
$query->execute(func_get_args());
return $query->fetchColumn();
}
嗯,我尝试返回false,但我仍然返回到我的登录表单:/n然后还有其他错误。将需要查看整个解决方案我更新了我的代码,使用isset,我被困了好几个小时。garh:)@Dymond你说的“回圈”是什么意思?@Uby我不会收到任何错误,它只会重新加载我的登录页面,如果有错误的电子邮件/密码,同样的方式,但没有给我“电子邮件/密码”错误fetchColumn()
=>从结果集的下一行返回一列,如果没有更多行,则返回FALSE。希望OP不是check true by==或===您调用了两次fetchAll()
,这是没有用的(可能还会导致意外行为),因此看到有人使用PDO
而不是mysql*