2016-10-27 8 views
0

Ich habe versucht, einige Informationen von einer Android-Anwendung mit der HttpUrlConnection zu einem PHP-Skript online zu senden. Ich bin zu beiden PHP sehr neu und habe die HttpUrlConnection vorher nie benutzt, also bin ich ziemlich fest, warum das nicht funktioniert. Es werden auch keine Fehler ausgelöst.Android HttpUrlConnection funktioniert nicht richtig

mein PHP-Skript ist

<?php 

//get connection details from the app and then connect to db 
$db_host = $_POST['db_host']; 
$db_user = $_POST['db_user']; 
$db_pass = $_POST['db_pass']; 
$db_name = $_POST['db_name']; 

$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name); 

if (!$con) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$device_group_id = $_POST['device_group_id']; 

//create the new device group as a table in the database 
$create_table_query = "CREATE TABLE" . $device_group_id . "(
     device_id varchar(24), 
     device_alias varchar(24), 
     device_longitute int, 
     device_latititute int, 
     device_group_id varchar(24) 
)"; 

if (mysqli_query($con, $create_table_query)) { 
    echo "Table MyGuests created successfully"; 
} else { 
    echo "Error creating table: " . mysqli_error($con); 
} 

mysqli_close($con); 

?> 

und die AsyncTask Methode doInBackground() ist

@Override 
protected Object doInBackground(Object[] params) { 
    String result = ""; 
    try{ 
     //get values to pass to the PHP script 
     Pair<String, String> dbHost = new Pair<>("db_host", DbConnectionInfo.DB_HOST); 
     Pair<String, String> dbUser = new Pair<>("db_user", DbConnectionInfo.DB_USER); 
     Pair<String, String> dbPass = new Pair<>("db_pass", DbConnectionInfo.DB_PASS); 
     Pair<String, String> dbName = new Pair<>("db_host", DbConnectionInfo.DB_NAME); 
     Pair<String, String> deviceGroupId = new Pair<>("device_group_id", "new_device_group"); 

     URL url = new URL("http://tracme.net16.net/create_device_group.php"); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

     // prepare request 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.setDoInput(true); 
     urlConnection.setDoOutput(true); 
     urlConnection.setReadTimeout(10000); 
     urlConnection.setConnectTimeout(15000); 
     urlConnection.setChunkedStreamingMode(0); 

     //upload request 
     OutputStream outputStream = urlConnection.getOutputStream(); 
     OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); 
     writer.write(dbHost.first + "=" + dbHost.second); 
     writer.write(dbUser.first + "=" + dbUser.second); 
     writer.write(dbPass.first + "=" + dbPass.second); 
     writer.write(dbName.first + "=" + dbName.second); 
     writer.write(deviceGroupId.first + "=" + deviceGroupId.second); 
     writer.close(); 
     outputStream.close(); 

     // read response 
     BufferedReader in = new BufferedReader(
       new InputStreamReader(urlConnection.getInputStream())); 

     String inputLine; 
     StringBuffer response = new StringBuffer(); 
     while ((inputLine = in.readLine()) != null) { response.append(inputLine); } 
     in.close(); 

     result = response.toString(); 

     // disconnect 
     urlConnection.disconnect(); 

    }catch(MalformedURLException e) { 
     Log.e("Malformed URL Exception", "Malformed URL Exception"); 
    }catch (IOException e) { 
     Log.e("IOException", "IOException"); 
    } 

    return result; 
} 
+0

der php gibt nichts aus, wenn es nicht fehlschlägt. Haben Sie die Datenbank überprüft, um festzustellen, ob die Tabelle erstellt wurde? Auch, was sind Ihre Pläne für diese Tabelle, wenn das Gerät zurückkehrt - Sie können die Tabelle natürlich nicht neu erstellen. – WEBjuju

+0

Die Zeichenfolgen in diesem Beispiel sind nur temporäre Werte. Jedes Gerät erstellt eine eindeutige Tabelle in der Datenbank, wenn sie nicht bereits erstellt wurde. Dieses Skript wird nur dann ausgeführt, wenn das Gerät bereits über eine eigene Tabelle verfügt. Die Prüfungen dafür werden im Java-Code durchgeführt. – user2145312

+0

Ich bin bei der Arbeit und werde es überprüfen müssen, wenn ich nach Hause komme. Ich denke, die Antwort von m. Waqas Pervers ist wahrscheinlich richtig darüber nachzudenken! – user2145312

Antwort

1

In Ihrem Code:

$device_group_id = $_POST['device_group_id']; 

//create the new device group as a table in the database 
$create_table_query = "CREATE TABLE" . $device_group_id . "(
    device_id varchar(24), 
    device_alias varchar(24), 
    device_longitute int, 
    device_latititute int, 
    device_group_id varchar(24) 
)"; 
mysqli_close($con); 

Sie sind nur einen vairable Namen erstellen $create_table_query die hält nur die Abfrage. Es gibt keinen Code, der die Abfrage tatsächlich ausführt. Fügen Sie diesen Code vor mysqli_close($con);

if ($con->query($create_table_query) === TRUE) { 
    echo "<br>Table created<br>"; 
} else { 
    echo "<br>Error creating table: " . $con->error. "<br>"; 
} 
+0

Ich habe diesen Code hinzugefügt, aber die Tabelle ist nicht intakt erstellt. Nicht, dass ich in phpMyAdmin trotzdem sehen kann! – user2145312

+0

versuchen Sie, PHP-Code von Ihrem Webroswer zu laufen, um zu sehen, ob es funktioniert. –

+0

hat es funktioniert Danke! Ich habe diese Antwort akzeptiert, da ich denke, dass dies das Hauptproblem war, obwohl ich auch kein Leerzeichen vor dem Tabellennamen in meinem PHP-Skript gelassen habe. – user2145312

Verwandte Themen