2016-02-28 109 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

相關問題