PHP AJAX:从mysql中检索数据并以表单形式显示它们

时间:2016-02-28 09:46:01

标签: php jquery ajax mysqli

我正在尝试创建自动填充表单。我有一个下拉菜单和一些表单字段,如文本框。 当用户点击下拉菜单选项时,Ajax调用启动,它将检查Mysql数据库中的数据。如果找到记录,则会在相关文本框中显示数据。

我的代码工作正常,但我无法从mysql数据库返回数据。

<script type="text/javascript">
$(function() {
    $("#autofill").change(function() {
        var data1= $('option:selected', this).text();
                        $.ajax({
                    type: "GET",
                    url:"autofill.php",
                    cache: false,
                    dataType: 'json',
                    data: 'action1=' + data1,
                    beforeSend: function() { 
                        $("#validation-errors").hide().empty(); 
                    },
                    success: function(data) {
                        if(data.success == false)
                            {
                                var arr = data.errors;
                                $.each(arr, function(index, value)
                                {
                                    if (value.length != 0)
                                    {
                                        $("#validation-errors").append('<div class="alert alert-danger"><strong>'+ value +'</strong><div>');
                                    }
                                });
                                $("#validation-errors").show(); 
                                 $('html, body').animate({scrollTop: $("#validation-errors").offset().top}, 2000);
                                btn.button('reset');                            
                            } else {
                                data = JSON.parse( data );
                               $('#title').val('data.title');
                                $('#total').val('data.total');
                                 $('html, body').animate({scrollTop: $("#features-left-image").offset().top}, 2000);
                            }
                    },
                    error: function(xhr, textStatus, thrownError) {
                        alert('Something went to wrong.Please Try again later...');
                        btn.button('reset');
                        alert(thrownError);
                    }
                });             
                return false;
            });

    });
</script>

autofill.php

<?php 
require_once('include/db.php');
if(isset($_GET['action1'])){
$search = strip_tags(trim($_GET['action1'])); 
$search = strtolower($search);
$search="%".$search."%";

$result = $mysqli->prepare("SELECT * FROM posting WHERE title LIKE ?");
$result ->bind_param("s", $search);
$result->execute();
$result->store_result(); 
//$result->bind_result($title);
//$data[]=$result;

echo json_encode($data);
}

?>

根据我的理解,问题就在眼前。

//$result->bind_result($title);
//$data[]=$result;

echo json_encode($data);

请告诉我解决这个问题。

由于

3 个答案:

答案 0 :(得分:2)

逻辑中存在许多问题,

$result = $mysqli->prepare("SELECT * FROM posting WHERE title LIKE ?");
$result ->bind_param("s", $search);
$result->execute();
$result->store_result(); 
//$result->bind_result($title);
//$data[]=$result;

echo json_encode($data);

您将从SELECT语句中获取多个列,并且您只绑定bind_result($title)中会发出警告的一列,而且您还没有获取实际从结果中提取数据的数据设置并将其绑定到您的变量。

其次,如果你想填充字段,你会期望一个结果集正确吗?(从你的javascript判断)你的LIKE子句查询可能会返回多个结果,你将不得不修改你的查询,这样你就可以得到一个独特的结果。

最后,您在PHP代码中尝试实现的内容可以通过PDO而不是mysqli轻松完成,其中一个原因是,您可以使用fetch_all函数轻松获取结果集并直接使用json_encode,mysqli具有fetch_all也是如此,但我认为这只与最新版本兼容。

如果你想继续使用MySQLI,解决方案就是这个,

$result->bind_result($title, $total, ...); //bind all your columns here
$data = [];

while($stmt->fetch()){
$data['title'] = $title;
.
.
.
//fetch all the columns you need likewise.
}

echo json_encode($data);

我仍然建议您迁移到PDO,这将帮助您更轻松地完成所有这些工作,请在此处阅读有关PDO的更多信息:http://php.net/manual/en/class.pdostatement.php

答案 1 :(得分:1)

你可以这样做:

$data = array();
while ($result->fetch()) {
$data['title'] = $title;
$data['field2'] = $field2;
...
}
// echo '<pre>'.$data.'</pre>';
echo json_encode($data);

在jQuery代码中:

data = $.parseJSON(data);
var title = data.title;
var field2 = data.field2;
alert(title);

答案 2 :(得分:0)

您可以在此处删除空格:

  

$ result - &gt; bind_param(&#34; s&#34;,$ search);

$result->bind_param("s", $search);