用php检查登录

时间:2015-07-14 16:34:50

标签: php

我正在为简单的论坛制作API,现在尝试检查使用php登录

控制页面上的

:checkLogin.php

<?php


error_reporting(E_ALL);
ini_set('display_errors', 1);

if(!isset($_POST['username']) or (!isset($_POST['password']))) {
        die('type the username & the password');
}
require_once('usersAPI.php'); 

if(empty($_POST['username']) || empty($_POST['password'])){
        tinyf_db_close();
        die('bad User Info');
}
$user = tinyf_users_get_by_name($_POST['username']);

if(!$user)
{
        die('Bad User');
}
//check connection if mysqli couldn't fetch 
$pass = md5(mysqli_real_escape_string($tf_handle, strip_tags($_POST['password'])));
tinyf_db_close();
// if(strcmp('n','n')) will be 0 and if(0) doesn't work :D
if(strcmp($pass,$user->password !== 0)){
        die('Bad__User');
}


die('success');
?>
  

结果===&gt; Bad__User

我预计结果会成功

我认为strcmp功能不起作用

1 个答案:

答案 0 :(得分:1)

PHP strcmp()的语法如下:

  

strcmp(string $ str1,string $ str2)
  返回&lt;如果str1小于str2,则为0; &GT;如果str1大于str2则为0,如果它们相等则为0。

代码中的括号错位:

strcmp($pass,$user->password !== 0)

您要将$pass与指示$user->password !== 0的布尔值进行比较,而不是比较这两个值。鉴于您的每个变量都设置为字符串“1”,这相当于返回strcmp("1",false)的{​​{1}},导致您的int(1)语句返回if ,并输出true

为了正确比较两个值,语法为:

die('Bad__User')

这是demonstration

话虽如此,我相信上述评论者建议您考虑使用更安全的密码哈希/验证技术。