从用户视图中隐藏div

I want to return true when the number of rows in a table is more than one and show a div with jquery as shown in the jquery code .In addition return false when the number of rows is zero and hide a div as shown in the code below.The php code is executing and returning a correct value but the jquery code is neither showing or hiding a div.I need to show a div when the value returned is true and hide a div when the value returned is false;

**php code** php code for retrieving the number of rows from a table


<?php
    require'php/connection.php';//a file for connecting to the database
    $user_name=getUserField('user_name');//function for getting the name of the user in session

    $query="select `order_id` from `inbox` where `buyer_name`='$user_name'";
    $query_run=mysql_query($query);
    $num_rows=mysql_num_rows($query_run);
    if($num_rows >= 1) {
        return true;
    } else if($num_rows == 0) {
        return false;
    }
?>

jquery code Jquery code for either hiding or showing a div

$(document).ready(function() {
    $.post('php/ManNotify.php',{},function(data){
        if(true) {
            $('#notify').show();
        } else if(false) {
            $('#notify').hide();
        }
    });
});

Do you realize your if statement reads,

if(true) ..
else if(false) ...

The hide will never execute. Is this your problem?

$(document).ready(function(){

    $.post('php/ManNotify.php',{},function(data){
    if(data == 'true'){
    $('#notify').show();
    }else if(data == 'false')
    {
    $('#notify').hide();
    }
    });
    });
$(document).ready(function(){

  $.post('php/ManNotify.php',{},function(data){
    if(data == "true"){
    $('#notify').show();
    }else if(data == "false")
    {
    $('#notify').hide();
    }
  });
});

When using AJAX calls with PHP, you should echo the value rather than return it. Modify your PHP code like so:

<?php
    require'php/connection.php';//a file for connecting to the database
    $user_name=getUserField('user_name');//function for getting the name of the user in session

    $query="select `order_id` from `inbox` where `buyer_name`='$user_name'";
    $query_run=mysql_query($query);
    $num_rows=mysql_num_rows($query_run);
    if($num_rows >= 1){
        echo json_encode(array("status" => true));
    } else if($num_rows == 0) {
        echo json_encode(array("status" => false));
    }
    exit;
?>

You'll also need to modify your JavaScript accordingly. Right now, if(true) will always execute on the return. Modify it like so:

// Shorthand for $(document).ready
$(function(){
    $.post('php/ManNotify.php',{}, function(data) {
        // JavaScript truthy/falsy will take care of the statement
        if(data.status) {
            $('#notify').show();
        } else {
            $('#notify').hide();
        }
    });
});

EDIT:

As @mplungjan points out in the comments below, the JavaScript could be simplified in the callback to be the following: $('#notify').toggle(data.status);. The resulting JavaScript would be:

// Shorthand for $(document).ready
$(function(){
    $.post('php/ManNotify.php',{}, function(data) {
        $('#notify').toggle(data.status);
    });
});

Thanks to @mplungjan for the suggestion.

There are two problems with your code:

  1. The server-side code. Returning boolean TRUE or FALSE this way will only render the page blank.
  2. The jQuery code logic is wrong: if(true){ case will always be executed (because the value is, well, always true).

A very simple fix would be (untested):

if($num_rows >= 1){
    echo 'true';
} else {
    echo 'false';
}

Then, in the JS:

$.post('php/ManNotify.php', function(data){
    if(data === 'true'){
        $('#notify').show();
    } else {
        $('#notify').hide();
    }
});

Note that this is not optimized.