0 レビュー
2 回答
php-Volleyを使用してJSONを介してmysqlから複数行のデータを取得する方法
以下のphpファイルの出力をJSONを介してAndroidアプリに取得しようとしていますが、Androidアプリの最初のエントリのみを取得しています。以下の手順も実行しようとしましたが、実行できます。最初の出力のみを取得しますが、残りの出力はアプリに表示されません
<?php
define('HOST','XXXX');
define('USER','XXXX');
define('PASS','XXXX');
define('DB','XXXX');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
if($_SERVER['REQUEST_METHOD']=='GET'){
$customerEmail = $_GET['customerEmail'];
$sql = "SELECT `amount`, `customerEmail`, `CCAvenueOrder_id` FROM ` OrderAborted` WHERE customerEmail='".$customerEmail."'";
$r = mysqli_query($con,$sql);
while($res = mysqli_fetch_array($r))
{
$result = array();
array_push($result,array(
"customerEmail"=>$res['customerEmail'],
"CCAvenueOrder_id"=>$res['CCAvenueOrder_id'],
"amount"=>$res['amount']
)
);
echo json_encode(array("result"=>$result));
}
mysqli_close($con);
}
?>
JSONコード
private void getData() {
String id = editTextId.getText().toString().trim();
if (id.equals("")) {
Toast.makeText(this, "Please enter an id", Toast.LENGTH_LONG).show();
return;
}
loading = ProgressDialog.show(this,"Please wait...","Fetching...",false,false);
String url = Constants.DATA_URL+editTextId.getText().toString().trim();
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
loading.dismiss();
showJSON(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(OrderHistory.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void showJSON(String response){
String name="";
String address="";
String vc = "";
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray(Constants.JSON_ARRAY);
JSONObject collegeData = result.getJSONObject(0);
name = collegeData.getString(Constants.KEY_NAME);
address = collegeData.getString(Constants.KEY_ADDRESS);
vc = collegeData.getString(Constants.KEY_VC);
} catch (JSONException e) {
e.printStackTrace();
}
textViewResult.setText("Name:\t"+name+"\nAddress:\t" +address+ "\nVice Chancellor:\t"+ vc);
}
わからない
0
レビュー
答え :
解決策:
ループが完了するまでデータを送信しないでください。また、配列の初期化をループの外に移動してください。
<?php
define('HOST','XXXX');
define('USER','XXXX');
define('PASS','XXXX');
define('DB','XXXX');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
if($_SERVER['REQUEST_METHOD']=='GET'){
$customerEmail = $_GET['customerEmail'];
$sql = "SELECT `amount`, `customerEmail`, `CCAvenueOrder_id` FROM `OrderAborted` WHERE customerEmail='".$customerEmail."'";
$r = mysqli_query($con,$sql);
$result = array();
while($res = mysqli_fetch_array($r))
{
//$result = array();
$result[] = array(
"customerEmail"=>$res['customerEmail'],
"CCAvenueOrder_id"=>$res['CCAvenueOrder_id'],
"amount"=>$res['amount']
);
//echo json_encode(array("result"=>$result));
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
}
?>
{-code-の代わりに
mysqli_fetch_assoc()
を使用すると、ループを単純化するだけでなく、結果セットから手動で作成した配列を正確に取得することもできます。 3}
<?php
define('HOST','XXXX');
define('USER','XXXX');
define('PASS','XXXX');
define('DB','XXXX');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
if($_SERVER['REQUEST_METHOD']=='GET'){
$customerEmail = $_GET['customerEmail'];
$sql = "SELECT `amount`, `customerEmail`, `CCAvenueOrder_id` FROM `OrderAborted` WHERE customerEmail='".$customerEmail."'";
$r = mysqli_query($con,$sql);
$result = array();
while($res = mysqli_fetch_assoc($r))
{
$result[] = $res;
//echo json_encode(array("result"=>$result));
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
}
?>
mysqli_fetch_all()
<?php
define('HOST','XXXX');
define('USER','XXXX');
define('PASS','XXXX');
define('DB','XXXX');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
if($_SERVER['REQUEST_METHOD']=='GET'){
$customerEmail = $_GET['customerEmail'];
$sql = "SELECT `amount`, `customerEmail`, `CCAvenueOrder_id` FROM `OrderAborted` WHERE customerEmail='".$customerEmail."'";
$r = mysqli_query($con,$sql);
$result = mysqli_fetch_all($r, MYSQLI_ASSOC);
echo json_encode(array("result"=>$result));
}
?>
そしてSQLインジェクションベクトルを取り除くために
<?php define('HOST','XXXX'); define('USER','XXXX'); define('PASS','XXXX'); define('DB','XXXX'); $con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect'); if($_SERVER['REQUEST_METHOD']=='GET'){ //$customerEmail = $_GET['customerEmail']; $sql = "SELECT `amount`, `customerEmail`, `CCAvenueOrder_id` FROM `OrderAborted` WHERE customerEmail=?"; $stmt = mysqli_prepare($con,$sql); $stmt = mysqli_stmt_bind_param ($stmt, 's', $_GET['customerEmail']); $status = mysqli_execute($stmt); $r = mysqli_stmt_get_result ($stmt); $result = mysqli_fetch_all($r, MYSQLI_ASSOC); echo json_encode(array("result"=>$result)); } ?>
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。