json_encode返回错误的布尔值

3

我正在编写一个jQuery登录页面。如果PHP登录脚本(checklogin.php)回显“true”,那么我的jQuery页面应该弹出警报。当我运行不使用jQuery的login.php时,它会将请求发送到checklogin.php,后者回显“true”。但是,如果我使用我的jQuery登录脚本将登录信息发送到checklogin.php,则回溯的警报会显示“false”。

$('#login').click(function(e){
      $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
         if(data==true){
            alert(data.boolean);
            //$('#logindiv').slideUp();
            //$('#gamediv').show(); 
            //$('#registerdiv').hide();
            //$('#gameheader').html(data['username']);
         }else{
            alert("false");
         }
      });
});

<?php
header('Access-Control-Allow-Origin: *');
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name="hedonsof_conflict"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => 'true', 'jsonUser' => $myusername);
echo "true";
}
else {
echo "Wrong Username or Password";
}
?>

简单地说,当我尝试从常规的php页面登录时,我追踪到的值为true;当我尝试从jquery页面登录时,我追踪到的值为false。

编辑:

<?php
...
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => true, 'jsonUser' => $myusername);
echo true;
}
else {
echo "Wrong Username or Password";
}
?>

我使用 jQuery ...

$('#login').click(function(e){
      $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
         if(data){
            alert("true");
            //$('#logindiv').slideUp();
            //$('#gamediv').show(); 
            //$('#registerdiv').hide();
            //$('#gameheader').html(data['username']);
         }else{
            alert(data); // shows null
         }
      });
});

使用json_encode时,布尔值会返回null
$('#login').click(function(e){
       $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
          if(data.boolean == "true"){
             alert("true");
             //$('#logindiv').slideUp();
             //$('#gamediv').show(); 
             //$('#registerdiv').hide();
             //$('#gameheader').html(data['username']);
          }else{            alert(data);
          }
       }); });

<?php
...
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => true, 'jsonUser' => $myusername);
echo json_encode($json);
}
...
?>

1
json_encode 实际上有被使用吗,还是只是将 echo "true"; 作为 ajax 响应收集起来了? - Mahn
请查看我的编辑。这是我最初尝试的内容,但无论我做什么它都返回 null,所以我想尝试一个简单的字符串或布尔检查会更容易,一旦我做到了那个,我再尝试这个功能。 - RapsFan1981
1个回答

10

使用true而不是'true''true'是一个字符串,而您需要的是布尔值:

$json = array('boolean' => true, 'jsonUser' => $myusername);

此外,永远不要== true

if(data==true) {
好的,现在问题是:
$json = array('boolean' => true, 'jsonUser' => $myusername);
echo true;

不要使用echo true,而是使用echo json_encode($json)


为什么不要写 == true? - Mahn
3
@Mahn:这只会导致代码错误。if(data == true)通常等价于if(data)。如果它们是等价的,那么== true就是多余的,应该去掉。如果它们不等价,你的代码就有严重问题 - 正如在这里的情况一样。最多使用=== true,如果你确实需要检查一个true值而没有其他东西。 - Ry-
无效。alert("false");仍然触发。 - RapsFan1981
3
嗨,JavaScript。'true' != true 但是 'true' 是 truthy 的。 - Ry-
@RapsFan1981:也不要使用 == true。把它移除。你现在用的是哪个浏览器? - Ry-
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接