【发布时间】:2011-10-22 16:23:52
【问题描述】:
由于某种原因,我无法让我的 JSON 脚本正确处理 if...else 语句。它会在 100% 的时间内处理 else 语句,即使值匹配也会跳过 if 部分。但是,当被静态 Html 表单调用时,PHP 脚本可以完美处理。有任何想法吗? jQuery 脚本如下:
$("#action_button").click(function() {
var username = $("#username").val();
var password = $("#password").val();
var dataString = '&username=' + username + '&password=' + password;
if(username=='' || password=='') {
$('#success').fadeOut(400).hide();
$('#error').fadeOut(400).show();
} else {
$.ajax({
type: "POST",
dataType: "JSON",
url: "processing/logsig.php",
data: dataString,
json: {session_state: true},
success: function(data){
if(data.session_state == true) { // true means user is logged in.
$("#main1").fadeOut(400);
} else if(data.session_state == false) { // false means user is being registered.
$("#main1").hide();
$('#main1').load('views/dashboard.php').fadeIn(400);
}
}
});
}
});
PHP 脚本:
<?php
header('Content-type:application/json');
session_start();
include("enc.php");
mysqlcon();
$email = mysql_real_escape_string(strip_tags($_POST["username"]));
$password = sha1($_POST["password"]);
$sql = "SELECT * FROM users WHERE username = '{$email}' AND password = '{$password}'";
$result = mysql_query($sql); // or exit("ERROR: " . mysql_error() . "<br>IN QUERY: " . $sql);
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
$_SESSION["userid"] = $row['user_pid'];
$json1 = json_encode(array('session_state' => true));
echo $json1;
} else {
$userid_generator = uniqid(rand(), false);
mysql_query("INSERT INTO users (user_pid, email, password, datetime_registered, is_leader) VALUES ('$userid_generator', '{$email}', '{$password}', NOW(), 'no')");
$id = mysql_insert_id();
$leaders = mysql_query("SELECT * FROM users WHERE is_leader LIKE '%yes%'");
while($rows = mysql_fetch_array($leaders)) {
if ($rows['is_leader'] == 'yes') {
$leader_id = $rows['user_pid'];
mysql_query("INSERT IGNORE INTO friends (node1id, node2id, friends_since, friend_type)
VALUES('$leader_id', '$userid_generator', NOW(), 'full')");
}
$_SESSION["userid"] = $userid_generator;
}
$json2 = json_encode(array('session_state' => false));
echo $json2;
}
?>
【问题讨论】:
-
您检查过从 Firebug 中的 PHP 文件获取的 JSON 数据吗?
-
是的,每次都返回false。
-
哪个“如果”有问题?在 jQ 或 PHP 中是哪个? if(username=='' || password=='') 还是 if(data.session_state) 之一?
-
我对 jQuery 和 Javascript 还是很陌生,我只知道它与 Javascript 端有关,因为当静态 Html 表单调用 PHP 时,它可以完美运行。但我很确定它与 if(username=='' || password=='') 有关,因为表单没有正确处理返回的 JSON……无论输入什么,它都会返回 false .
-
您发送到 PHP 文件的 POST 参数是否正确?使用 Firebug 进行检查?