2016-10-08 96 views
0

我使用凌空連接從Android的PHP,但它是顯示我的錯誤請一些幫助我在這裏我的java & PHP代碼.php連接到數據庫PHP顯示 - 1'成功'=>錯誤結果。類型java.lang.string不能轉換爲jsonarray

public class main extends Activity{ 

    String i = ""; 
    String d = ""; 
    String ya = ""; 
    String is = ""; 
    String to=""; 

    final Response.Listener<String> responseListener = new Response.Listener<String>() { 

    @Override 
    public void onResponse(String response) 
    { 
     JSONObject jsonResponse = null; 

     try { 
      JSONArray array = new JSONArray(response); 
      jsonResponse = array.getJSONObject(0); 
      Log.w(TAG, "onResponse: jsonresponse" + response.toString()); 
      boolean success = jsonResponse.getBoolean("success"); 
      if (success) { 
       i = jsonResponse.getString("i"); 
       d = jsonResponse.getString("d"); 
      } else { 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    Inp insQ = new Inp(ya,is ,to ,responseListener); 
    RequestQueue queue = Volley.newRequestQueue(main.this); 
    queue.add(insQ);} 


// next ins class - commented at edit by Jeff 
public class Ins extends StringRequest 
{ 
    public static final String REGISTER_REQUEST_URL = "edu.php"; 

    private static final String TAG = "Ins"; 
    private Map<String,String> params; 
    public Ins(String ya, String is, String to, Response.Listener listener) 
    { 
     super(Request.Method.POST, REGISTER_REQUEST_URL, listener, null); 
     Log.w(TAG, "Ins: " + ya + is + to); 
     params = new HashMap<>(); 
     params.put("ya", ya); 
     params.put("is",is); 
     params.put("to", to + ""); 
     Log.w(TAG, "Ins working well " + ya + is +to); 
    } 

    @Override 
    public Map<String,String> getParams() { 
     return params; 
    } 
} 

PHP代碼開始

<?php 

$servername = "localhost"; 
$username = "****"; 
$password = "*****"; 
$dbname = "*****"; 


$em = $_POST['ya']; 
$one = $_POST['is']; 
$to = $_POST['to']; 


$d = date('Y-m-d'); 
$y = date('y'); 
$m = date('m'); 
$d = date('d'); 
$conn = mysqli_connect($servername, $username, $password, $dbname); 

if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
$sqll = "SELECT * FROM jio"; 
$res = mysqli_query($conn,$sqll); 
$rowC = mysqli_num_rows($res); 

$rowC = $rowC%999 + 1; 
if($rowC < 10){ 
    $i = $year.$mon.$day.'00'.$rowC; 
}elseif (rowC < 100) { 
    $i = $year.$mon.$day.'0'.$rowC; 
}else { 
    $i = $year.$mon.$day.$rowC; 
} 
$sql = "INSERT INTO jio(iu,i, d, ya, is, qs,to,ra,wto,wi,wk,)VALUES('0',".$i."','".$d."','".$em."','".$one."', '-1','".$to."','0','0','0','0')"; 

$r = mysqli_query($conn, $sql); 
$rows=mysqli_affected_rows($conn); 
$result = array(); 

if($rows>0) { 
    array_push($result,array(
      'success'=>true, 
      'i' => $i, 
      'd' =>$d 
    )); 
} 
else 
array_push($result,array(
     'success'=>false 
)); 

echo json_encode($result); 

mysqli_close($conn); 
?>       
+1

什麼是關於'$ rowC%999 + 1'和沒有人,我的意思是沒有人在PHP中使用array_push ....你可以做'$ result = [...]; } else {$ result = [...];' – ArtisticPhoenix

+0

您必須至少有5個語法錯誤。無論是Java/Android和PHP。 在'VALUES('0',「。$ i。」',' – Jeff

回答

0

據「問題」你所描述我想在你的代碼中的所有語法錯誤的代碼移植到這裏來了。

看來, - 如果我理解正確的,你 - 你的唯一的問題是一個簡單的失蹤在SQL '

                // here 
$sql = "INSERT INTO jio(iu,i, d, ya, is, qs,to,ra,wto,wi,wk,)VALUES('0',".$i."','".$d."','".$em."','".$one."', '-1','".$to."','0','0','0','0')"; 

這將導致$rows是假的(因爲庫MySQLi錯誤的),所以你如果將「成功」設置爲false。

修正SQL是

$sql = "INSERT INTO jio(iu,i, d, ya, is, qs,to,ra,wto,wi,wk,)VALUES('0','".$i."','".$d."','".$em."','".$one."', '-1','".$to."','0','0','0','0')"; 
// this is the critical part: 
// ...,'".$i."',... 


你最好切換到prepared statements,因爲你打開sql-injection。 此外,如果您的查詢成功或有任何錯誤,請首先檢查。

$r = mysqli_query($conn, $sql); 
if($r) { 
    // work with the result 
} else { 
    // an error occurred. Show it, handle it, whatever. 
    echo mysqli_error($conn); 
} 

此外,您不需要在php中使用array_push。它更容易使用的語法:

$result = array(); 
if($rows>0) { 
    $result[] = array(
     'success'=>true, 
     'i' => $i, 
     'd' =>$d 
     ); 
} 
else { // don't forget these brackets here! 
    $result[] = array(
     'success'=>false 
     ); 
} // and here 

最後:你不需要,收於劇本的結尾mysqli的連接,因爲這將在年底反正被終止。

相關問題