【问题标题】:PHP AJAX: retrieve data from mysql and show them in formPHP AJAX:从 mysql 检索数据并以表格形式显示它们
【发布时间】:2023-03-15 00:58:01
【问题描述】:

我正在尝试创建一个自动填充表单。我有一个下拉菜单和一些表单字段,例如文本框。 当用户单击下拉菜单选项 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);

请建议我解决此问题。

谢谢

【问题讨论】:

    标签: php jquery ajax mysqli


    【解决方案1】:

    逻辑上有很多问题,

    $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

    【讨论】:

    • 我试过你的代码,我可以看到数据在萤火虫的响应选项卡下重新调整。但它没有出现在文本框中。这似乎是 ajax 代码的问题。
    • {"title":"3rd 张贴"} 这就是我得到的。
    • 我认为在你的 javascript 代码中,你应该这样做,$('#title').val(data.title);,你不需要在它周围加上引号,总而言之。
    • 谢谢。但这似乎是成功的问题:function(data) {我尝试过 alert('test');但它没有显示警告框
    • 问题已解决。我删除了 // dataType: 'json',。投票并接受答案。
    【解决方案2】:

    你可以这样做:

    $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);
    

    【讨论】:

    • $result->bind_result 怎么样。我需要声明所有字段名称吗?
    • 是的,如果你想要整个字段数据,你需要声明所有字段。
    • 您的代码正在运行,但无法在文本框中显示 json 数据。
    • 您的回答帮助我解决了这个问题。但我也得到了@vincent 的帮助。投票赞成你的答案
    【解决方案3】:

    您可以在此处删除空格:

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

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

    【讨论】:

    • 伙伴,感谢您的回答,但代码运行良好,直到这里 $result->store_result();在 autofill.php 中
    • 你可以试试 $result->get_result($title);
    • 实际上我需要从表中以 json 格式返回所有数据。这就是我现在所缺少的
    • 您是在 $data 还是 $result 中获取数据?
    • 我正在获取数据到这里 $result->bind_result($title);我不确定如何以 JSON 格式返回表中的所有数据
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2012-05-02
    • 2017-01-25
    • 1970-01-01
    • 2019-05-09
    • 2018-10-07
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多