Michael Grigsby
Michael Grigsby

Reputation: 12163

jQuery JSON not properly processing a PHP script

For some reason I can't get my JSON script to process the if... else statement properly. It'll process the else statement 100% of the time, and skip over the if section even if the values match. The PHP script processes perfectly when called upon by a static Html form though. Any ideas? The jQuery script follows:

$("#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 Script:

<?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;
    }
?>

Upvotes: 0

Views: 194

Answers (1)

Ilia G
Ilia G

Reputation: 10211

Looking at your site in firebug, POST parameters are NOT being sent properly. I am seeing

password    undefined
username    undefined

Upon further inspection it appears that neither of your inputs have an ID attribute and are not found by

var username = $("#username").val();
var password = $("#password").val();

This has nothing to do with JSON or PHP. Please bother to perform basic debugging steps. Stick alert()s on every line if you have to.

Upvotes: 4

Related Questions