PHP:如何使用ajax使用查询结果填充html表单字段

时间:2016-08-30 16:23:20

标签: php jquery json ajax

我尝试在执行简单搜索后使用值填充表单但是当我运行脚本时,我得到" undefined"当我发出警报(数据)时,或者是空白的响应;。

的search.php

<?php
include_once 'config/config.php';
include_once 'config/connect.php';
$conn = dbconn();

if(isset($_POST['btn-search']))
{
    $sub_id = mysqli_real_escape_string($conn, $_POST['user_id']);
    $sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'";
    $res = mysqli_query($conn, $sql);
    $row = mysqli_fetch_array($res);

    $found = array();
    while ($row = mysqli_fetch_array($res))
    {
        $found[] = array(
            'name' => $row['full_name'],
            'init_date' => $row['init_date'],
            'position' => $row['position'],
            'email' => $row['email'],
        );
        echo json_encode($found);
    }
}
mysqli_close($conn);
?>

脚本

<script>
/*
simple validation script
*/

$('document').ready(function()
{
    $('#register-submit-btn').attr('disabled', 'disabled');
     /* validation */
     $("#register-form").validate({
      rules:
      {
            user_id: {
            required: true,
            minlength: 5,
            },
       },
       messages:
       {
            cedulaid:{
                      required: "The user ID is required",
                      minlength: "The user ID should be no less than 5 characeters long.",
                     },
       },
       submitHandler: submitForm
       });  
       /* validation */

       /* get data */
       function submitForm()
       {        
            var data = $("#details-form").serialize();

            $.ajax({
            type : 'POST',
            url  : 'search.php',
            data : data,
            beforeSend: function()
            {
                $("#detailsmsg").fadeOut();
                $("#btn-search").html('<img src="include/btn-ajax-loader.gif" /> &nbsp; Looking...');
                $('#btn-search').attr('disabled', 'disabled');
            },
            success :  function(data)
               {
               alert(data);
                        $("#detailsmsg").fadeIn(1000, function(){                       
                        $("#detailsmsg").removeClass("alert-danger").addClass("alert-success");
                        $('#btn-search').removeAttr('disabled');
                        $("#btn-search").html('Search again?');
                        $('#register-submit-btn').removeAttr('disabled');
                        $("#detailsmsg").html("<span>Data Found</span>");

                        });
                        $("#name").val(data.name); // not sure how to do this part. this is probably very wrong but still not getting anything on the alert.
                        $("#init_date").val(data.init_date);
                        $("#position").val(data.position);
                        $("#email").val(data.email);
              }
            });
                return false;
        }
       /* get data */
});
</script>

我在成功函数的顶部有警报(数据),因为我想看看我会得到什么,但它又回来了。如果我做警报(数据[0])我得到&#34;未定义&#34;消息。

控制台POST返回:

name=&init_date=&position=&email=

脚本中可能存在许多错误,我可以获得任何反馈和帮助。如果需要任何其他细节,请告诉我。

提前致谢,

2 个答案:

答案 0 :(得分:3)

获取单个输出,你只需要$ row = mysqli_fetch_array($ res); not loop..it将返回单个参数输出..

Search.php

<?php
include_once 'config/config.php';
include_once 'config/connect.php';
$conn = dbconn();

if(isset($_POST['btn-search']))
{
    $sub_id = mysqli_real_escape_string($conn, $_POST['user_id']);
    $sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'";
    $res = mysqli_query($conn, $sql);
    $row = mysqli_fetch_array($res);

    $found = array();

        $found[] = array(
            'name' => $row['full_name'],
            'init_date' => $row['init_date'],
            'position' => $row['position'],
            'email' => $row['email'],
        );
        echo json_encode($found);

}
mysqli_close($conn);
?>

尝试一次..可能它会帮助你。

答案 1 :(得分:1)

通过快速查看PHP代码,它返回嵌套数组:

[
    [
        'name' => 'whatever',
        'init_date' => 'date',
        ...
    ]
]

这是因为您首先定义$found = array();,然后使用$found[] = array(...)向其附加更多数组。

然而,javascript部分尝试仅访问不存在的data.name。假设数据库中至少有一条记录,可能存在data[0].name

您是否想要将data作为数组进行迭代?

但问题可能在于PHP部分,您在其中调用mysqli_fetch_array()两次,因此覆盖$row变量并跳过找到的第一个结果:

$row = mysqli_fetch_array($res);

$found = array();
while ($row = mysqli_fetch_array($res))
{
...

我看到的最后一件事是,当您收集了所有搜索结果后,您可能希望在echo json_encode($found);循环后拨打while。顺便说一下,这也会产生无效的JSON。