2016-02-28 106 views
0

我想创建一个自动填写表单。我有一个下拉菜单和一些表单字段,如文本框。 当在下拉菜单中选择Ajax调用用户点击启动,它会检查Mysql数据库的数据。如果找到记录,则会在相关文本框中显示数据。PHP 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); 

请告诉我解决这个问题。

感谢

回答

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

+0

谢谢你的回答。 – Ironic

+0

我试过你的代码,我可以看到数据在萤火虫响应标签下重新调整。但它不是在文本框中。这似乎是问题与AJAX代码。 – Ironic

+0

你可以发布你在萤火虫控制台回来的东西吗?数据数组.. – Vincent

0

您可以删除空间在这里:

$结果 - > bind_param( “S”,$搜索);

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

伴侣,由于是到这里$ result-> store_result工作正常();在autofill.php – Ironic

+0

您可以尝试$ result-> get_result($标题); –

+0

其实我需要从json格式的表中返回所有数据。那就是我目前所缺的 – Ironic

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); 
+0

$ result-> bind_result。我是否需要声明所有字段的名称? – Ironic

+0

是的,如果你想要整个领域的数据,你需要声明所有领域。 –

+0

你的代码正在工作,但无法显示文本框中的json数据。 – Ironic

相关问题