2017-03-11 11 views
0

データベース問合せの結果を取得しようとしていますが、これはほとんどの場合、HTMLファイルのAjax呼び出しから複数行のデータが返されます。 HTMLファイルを表示することができます。MYSQLI:AjaxからのHTMLの問い合わせ結果の取得

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
    <title>My Webpage</title> 
    <script type="text/javascript"> 
     //Function for getting data from database 
     function getData() { 
      $.ajax({ 
       url: "get_data.php", 
       type: "GET", 
       success: function(data) { 
        alert("Finished!"); 
       } 
      }); 
     } 
    </script> 
</head> 
</body> 
    <!--I'd like to put a table of data here--> 
</body> 
</html> 

get_data.php

<?php 
    include "action.php"; 

    $sql_query = "SELECT * FROM " . TABLE; 

    //Connecting to database 
    $mysqli = mysqli_connect(SERVER_NAME, USERNAME, PASSWORD, DATABASE); 

    //Check database connection 
    if($mysqli === false) { 
     die ("\nCould not connect: " . mysqli_connect_error()); 
    } else { 
     echo nl2br("\nConnected successfully! Host info: " . mysqli_get_host_info($mysqli)); 
    } 

    echo executeQuery($sql_query, $mysqli); 
?> 

action.php

<?php 
    define("SERVER_NAME", "localhost"); 
    define("USERNAME", "root"); 
    define("PASSWORD", ""); 
    define("TABLE", "data_set"); 

    $mysqli = mysqli_connect(SERVER_NAME, USERNAME, PASSWORD); 

    //Check database connection 
    if($mysqli === false) { 
     die ("\nCould not connect: " . mysqli_connect_error()); 
    } else { 
     echo nl2br("\nConnected successfully! Host info: " . mysqli_get_host_info($mysqli)); 
    } 

    //Function to execute database queries 
    function executeQuery($sql_query, $mysqli) { 
     if(mysqli_query($mysqli, $sql_query)){ 
      echo nl2br("\n\nQuery executed successfully: $sql_query"); 
     } else { 
      echo nl2br("\n\nERROR: Could not able to execute $sql_query. " . mysqli_error($mysqli)); 
     } 
    } 
?> 

私はaction.phpからクエリの結果を取得する方法を見つけ出すように見えることはできません'get_data.php , back to the original Ajax call from index.html so that I can build my table. I've tried just using echo`をクエリの結果と一緒に使用しましたが、オブジェクトを文字列に変換する際にエラーが発生したため動作しませんでした。

+0

あなたはPHPファイルであなたが望んでいることを確認できますが、単に 'index.html'に表示されていませんか? –

答えて

1

あなたのexecuteQuery関数からの戻り値はありません。 mysqli_query関数は、mysqli_resultオブジェクトを返すか、何かが失敗した場合はブール値falseを返します。このmysqli_resultオブジェクトを使用して、必要なデータを取得して配列に入れることができます。この配列は、Javascriptで理解できる形式であるjsonレスポンスにエンコードする必要があります。例えばので

function executeQuery($sql_query, $mysqli) { 
    $rows = []; 
    $result = mysqli_query($mysqli, $sql_query); 

    if ($result === false) { 
     // Do something if anything goes wrong here like throwing an exception 
    } 

    while ($row = mysqli_fetch_assoc($result)) { 
     $rows[] = $row; 
    } 

    return $rows; 
} 

次にあなたがデータを取得し、次のようにJSONに変換するために、この関数を呼び出すことができます。

$rows = executeQuery($sql_query, $mysqli); 
echo json_encode($rows); 

これは、しかし、基本的な方法の最も基本的なものですこの正確な実装は推奨されません。表の実際の列名を出力することは誰もが見ることができるので脆弱です。json_encodeを使用する前にループして変更します。

+0

ありがとう!私はあなたが言ったことを行い、JSONを解析するために解析しましたが、これまでのところ、関数呼び出しが行われる場所である 'get_data.php'からしか使用できません。 Ajax関数が呼び出されたHTMLページにJSONエンコーディングを戻す方法はありますか? – lillemap

+0

get_data.phpを開くと、jsonの文字列が得られますが、Ajaxの呼び出しではそれを何かに解釈することはできません。おそらく* $ .Ajax *の代わりに* $ .Json *を呼び出すとそれが修正されます。 get_dataの応答タイプを* application/json *に設定する方法もありますが、これは最も簡単な方法です。 – Asperitas

-1

定義済みデータベースの名前はどこですか?すべての場所にechoを書き留めることはできません。 mysqli_fetch_array関数を使用して結果を配列として取得し、それをjsonとして送信する必要があります。私はちょうど1つのスクリプトでコード全体を修正しました。

<?php 
define("SERVER_NAME", "localhost"); 
define("USERNAME", "root"); 
define("PASSWORD", ""); 
define("DATABASE", "YOURDATABASE"); 
define("TABLE", "YOURTABLENAME"); 

$mysqli = mysqli_connect(SERVER_NAME, USERNAME, PASSWORD); 

//Check database connection 
if ($mysqli === false) { 
    die ("\nCould not connect: " . mysqli_connect_error()); 
} 

//Function to execute database queries 
function executeQuery($sql_query, $mysqli) 
{ 
    $result = mysqli_query($mysqli, $sql_query); 
    if ($result) { 
     //You have to run mysqli_fetch_array to get real data as array 
     return mysqli_fetch_array($result); 
    } 
} 

$sql_query = "SELECT * FROM " . TABLE; 

//Connecting to database 
$mysqli = mysqli_connect(SERVER_NAME, USERNAME, PASSWORD, DATABASE); 

//Check database connection 
if ($mysqli === false) { 
    die ("\nCould not connect: " . mysqli_connect_error()); 
} else { 
    //echo nl2br("\nConnected successfully! Host info: " . mysqli_get_host_info($mysqli)); 
} 


//after getting the result send output to brower with json encode and then from your ajax response 
// You can handle json data easily. 
// And for json response you can't just write echo from everywhere in script. Send either die on failure or result on success 
$result = executeQuery($sql_query, $mysqli); 

header('Content-Type: application/json'); 
echo json_encode($result, JSON_PRETTY_PRINT); 
exit(); 
関連する問題