2016-04-11 3 views
1

Здесь я пытаюсь вставить данные в базу данных, используя rest api из приложения andriod. Я получаю 200 успешных результатов от сервера, когда я пытаюсь его вставить. Пожалуйста, помогите мне с этим. Я никогда не делал этого до того, что я знаю о php и всех. Единственная проблема заключается в том, какая переменная и какой тип ее отправки и как ее извлечь в php-файл, чтобы вставить ее. Вот какой код я использую как android, так и php.Rest php api пытается вставить данные в базу данных из приложения android

private class SingupAsyn extends AsyncTask<String, Void, String>{ 
URL url; 
HttpURLConnection connection; 
OutputStream outputStream; 
OutputStreamWriter outputStreamWriter; 
BufferedWriter bufferedWriter; 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 

} 

@Override 
protected String doInBackground(String... params) { 
    /* 
     Receive data which is input by user 
    */ 

    String cname = params[0]; 
    String cemail = params[1]; 
    String cuname = params[2]; 
    String dcpassword = params[3]; 
    String cdob = params[4]; 
    String cgender = params[5]; 
    try { 
     url = new URL("here url");    
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("POST"); 

     connection.setRequestProperty("Content-Type", "application/json"); 



    JSONObject jsonObject = new JSONObject(); 
     jsonObject.accumulate("user_full_name", cname); 
     jsonObject.accumulate("user_email", cemail); 
     jsonObject.accumulate("user_name", cuname); 
     jsonObject.accumulate("user_password", dcpassword); 
     jsonObject.accumulate("user_dob", cdob); 
     jsonObject.accumulate("user_gender", cgender); 
     outputStream = connection.getOutputStream(); 
     outputStreamWriter = new OutputStreamWriter(outputStream); 
     outputStreamWriter.write(jsonObject.toString()); 
     outputStreamWriter.flush(); 
     outputStreamWriter.close(); 
     Log.d("YOUR DATA", "" + jsonObject); 
     Log.v("postURL: " ,""+url); 
    int res = connection.getResponseCode(); 
     return ("" + res); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 



@Override 
    protected void onPostExecute(String s) { 
    Log.d("ok", s); 
    int s1 = Integer.parseInt(s); 
    if ((s1== HttpURLConnection.HTTP_ACCEPTED) || (s1 ==HttpURLConnection.HTTP_OK)) {   
     pDialog.dismiss();    
     Toast.makeText(getActivity(), "Registration Success" + s,   Toast.LENGTH_SHORT).show(); 
    } 
    else 
     {  
      pDialog.dismiss(); 
      Toast.makeText(getActivity(), "failure" + s, Toast.LENGTH_SHORT).show(); 
     } 
     super.onPostExecute(s); 
    } 
} 

Это мой код на стороне сервера

<?php 
include('../db.php'); 
$response = array();  
$user_info = json_decode($jsonObject, true); 
if (isset($user_info['user_full_name']) && isset($user_info['user_email']) && isset($user_info['user_name'])) { 
$query = mysql_query("INSERT INTO `users` (user_pk, user_full_name, user_email, user_name, user_password, user_dob, user_gender, user_status, user_ip, user_activation, user_created_at) 
VALUES ('', '".$user_info['user_full_name']."', '".$user_info['user_email']."', '".$user_info['user_name']."','".$user_info['user_password']."', '".$user_info['user_dob']."', '".$user_info['user_gender']."', '0', '".$_SREVER['REMOTE_ADDR']."', '".rand(10000, 99999)."', '".now()."', ") or die(mysql_error()); 

if ($result) { 
     $response["success_msg"] = 1; 
     $response["message"] = "Successfully Registred."; 
     echo json_encode($response); 
} 
else { 
     // failed to insert row 
     $response["success_msg "] = 0; 
     $response["message"] = "Your Registration is failed Please try again."; 
     // echoing JSON response 
     echo json_encode($response); 
} 

} 
mysql_close($con); 

?> 

Здесь database.php (db.php)

<?php 
$dbname = 'maxximpu_tiffmiff'; 
$con = mysql_connect('localhost', 'maxximpu_tiff', 'tiffmiff123'); 
if (!$con) { 
echo 'Could not connect to mysql'; 
exit; 
} 
mysql_select_db($dbname, $con); 
?> 

ответ

0

Первое, что нужно сделать, чтобы держаться подальше от mysql_* функций в PHP, потому что они могут быть неустойчивыми, и, прежде всего, они устарели уже почти десять лет и удаляются в более новых версиях PHP.

Я предлагаю вам сделать это с помощью PDO и подготовленных операторов, чтобы позаботиться о возможных попытках SQL-инъекций. Найдите пример ниже, как это сделать.

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); 
// set the PDO error mode to exception 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// prepare sql and bind parameters 
$stmt = $conn->prepare("INSERT INTO MyTable (col1, col2, col3) 
VALUES (:col1, :col2, :col3)"); 
$stmt->bindParam(':col1', $val1); 
$stmt->bindParam(':col2', $val2); 
$stmt->bindParam(':col3', $val2); 

// insert a row 
$val1 = "Value 1"; 
$val2 = "Value 2"; 
$val3 = "Value 3"; 
$stmt->execute(); 

Так что мы идем на это, кстати, давайте перейдем к вашей стороне сервера сценария. Поскольку вы говорите, что получаете правильный ответ, но никаких новых данных в базе данных, это означает, что на PHP есть некоторые ошибки/предупреждения/уведомления, но вы их подавляете, поэтому прежде всего нужно включить отчет об ошибках и отображение ошибок. Вы можете сделать это в самом скрипте, добавив две простые команды в верхней части вашего скрипта:

ini_set("display_errors", 1); 
error_reporting(E_ALL); 

Только не забудьте удалить это перед развертыванием производства.

Теперь, если я применил свои минимальные знания Java, вы отправляете этот объект JSON в качестве тела HTTP, поэтому сначала вам нужно будет прочитать и декодировать его с помощью PHP. Для этого PHP предоставляет поток только для чтения php: // ввод, из которого вы можете читать, так как это файл в файловой системе.

$jsonObject = json_decode(file_get_contents("php://input")); 

Вы можете прочитать об этом здесь, PHP manual entry on I/O streamsdocs:

PHP: // ввод представляет собой поток только для чтения, что позволяет считывать исходные данные из тела запроса. В случае запросов POST предпочтительнее использовать php: // ввод вместо $HTTP_RAW_POST_DATA, так как он не зависит от специальных директив php.ini. Более того, для тех случаев, когда $HTTP_RAW_POST_DATA по умолчанию не заполняется, потенциально может быть , а не более интенсивной в памяти альтернативой активации always_populate_raw_post_data. php: // ввод не доступен с enctype = "multipart/form-data".

+0

Благодарим вас за помощь, просто сообщите мне, что такое имя переменной и какая переменная android api отправляется и как ее извлекать в signup.php i am php developer. и я не знаю о android. Я просто знаю о php-коде, как писать его для входов ..пришлите мне пример, если это возможно. –

+0

Если вы замените свою строку * json_decode * моим, вы должны быть в порядке. – slax0r