无法将从数据库获取的变量分配给json数组

时间:2013-06-04 17:11:51

标签: php jquery ajax json

我尝试从数据库中获取数据以通过ajax显示数据但无效。它部分工作,因为来自mysql的数据使得这个东西无法运行。


这是我的funds_transfer_backend.php页面。该页面将变量赋给json数组     

session_start(); 

if(!isset($_SESSION['myusername']))
{
    header("Location: ../index.html");
    die();
}
            include("../connect.php");

            $myusername = $_SESSION['myusername'];

            $sql="SELECT client_id FROM `client` WHERE username='$myusername'";
            $result=mysqli_query($conn, $sql);

            while ($row=mysqli_fetch_row($result)){

            $id = $row['0'];  
            }    



            $index_num = $_POST['index_num'];
            $to_account_num = $_POST['recipient'];
            $amount = $_POST['amount'];

            if ($amount == '' || $to_account_num == '' || $index_num == -1){
                //echo "Please complete the form!";
                $response = -1;
            }

            else {  

             // check account number exist
            $query2 = "SELECT 1 FROM account WHERE id='$to_account_num' LIMIT 1";
            if (mysqli_num_rows(mysqli_query($conn, $query2))!=1) {
                 //echo "Recipient account number is invalid!";
                $response = -2;
            }   

            else {

            $query2 = "SELECT client.name, client.email FROM account JOIN client USING (client_id) WHERE account.id = '$to_account_num' LIMIT 1";
            $result=mysqli_query($conn, $query2);
            while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 

                $name = $row['name'];
                $email = $row['email'];

            } 
            $response = 1;

            }
            } // check account num else bracket

        $display = array('response' => $response, 'name' => $name);
        echo json_encode($display);

但是,如果我从数组中移除'name' => $name,则#stage div会触发如下图所示:

enter image description here

这是我的funds_transfer.php页面

<script type="text/javascript">

 function update() {
      var    two = $('#index_num').val();
      var    three = $('#recipient_box').val();
      var    five = $('#amount_box').val();


 $.post("funds_transfer_backend.php", { 
    index_num   : two,
    recipient   : three, 
    amount      : five

},function(data){


    if (data.response==-1) { 
        $('#stage').show().html("Please complete the form!"); 
    }

        $('#stage').delay(2000).fadeOut();


},"json");

        } 

</script>

...other code goes here

     <div id="stage" style="background-color:#FF6666; padding-left:20px; color: white;"></div>

     <div id="confirm" style="background-color:#FF7800; padding-left:20px; color: white;"></div>


我尝试使用手动表单method="post"检查来自db的数据是否存在,我可以看到名称是echo。任何帮助都表示赞赏,并提前感谢。

2 个答案:

答案 0 :(得分:1)

当您的回复为-1时,您的$name变量未定义。因此,php可能会显示警告(取决于您的设置),并且您尝试向阵列添加未定义的变量。这将使输出/ json无效。

您可以设置例如:

$name = '';

在脚本开头或检查变量是否设置为isset($name),然后再尝试使用它来避免这些问题。

当然还有其他解决方案,例如直接输出-1并退出脚本。

答案 1 :(得分:1)

我总是初始化变量。

$ myusername = isset($ _ SESSION ['myusername'])? $ _SESSION ['myusername']:false;

然后你可以安全地做到:

如果($ myusername){}没有抛出警告。

我这样做天气我从db,post / get / session或json / ajax获取数据。

预先花费一点额外的时间,但在后端删除了几十个错误,这样你就可以节省更多的时间。