2016-10-08 133 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的连接,因为这将在年底反正被终止。

相关问题