Передача переменной в php файл - PullRequest
0 голосов
/ 12 сентября 2018

Мы пытаемся получить данные с сервера в приложении для Android.Для запроса на выборку пользователь должен иметь возможность выбрать условие, по которому данные фильтруются.Каким-то образом мы не получаем вывод, когда мы делаем это, как мы пытались, хотя введенное значение передается в таблицу правильно.Когда мы попробовали это с фиксированным значением для переменной, все работает нормально, только использование этой переменной не работает, но почему бы и нет?Разве это не возможно сделать так?Нам также сказали, что код небезопасен, но было бы неплохо заставить его работать в любом случае, так что спасибо за совет!

<?php
$con = new mysqli($server, $user, $password, $db);

if(isset($_POST['number'])){
 $query = "INSERT INTO Table (number) VALUES ('$_POST[number]')";
}

$var = $_POST['number'];
 $query = "SELECT * FROM Table WHERE number = '$var'";
    
    $result = mysqli_query($con, $query);
      
    while($row = mysqli_fetch_assoc($result)) {
        $array[] = $row;
        }
       
    header('Content-Type:Application/json');
    echo json_encode($array);
    mysqli_close($con);  
?>

Код, который мы использовали:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GetData();
                InsertData(TempName);
                JSON_DATA_WEB_CALL();
            }
        });
    }
    public void GetData() {
        TempName = name.getText().toString();
    }
    public void InsertData(final String a) {
        class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {
                String NameHolder = a;
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("name", NameHolder));
                try {
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(ServerURL);
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                } catch (ClientProtocolException e) {
                } catch (IOException e) {
                }
                return "Data Inserted Successfully";
            }
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                Toast.makeText(MainActivity.this, "Data Submit Successfully", Toast.LENGTH_LONG).show();
            }
        }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(a);
    }
    public void JSON_DATA_WEB_CALL() {
        jsonArrayRequest = new JsonArrayRequest(ServerURL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        progressBar.setVisibility(View.GONE);
                        JSON_PARSE_DATA_AFTER_WEBCALL(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                });
        requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonArrayRequest);
    }
    public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array) {
        for (int i = 0; i < array.length(); i++) {
            GetDataAdapter GetDataAdapter2 = new GetDataAdapter();
            JSONObject json = null;
            
        try {
                json = array.getJSONObject(i);
                GetDataAdapter2.setId(json.getInt(JSON_ID));
                GetDataAdapter2.setName(json.getString(JSON_NAME));
            } catch (JSONException e) {
                e.printStackTrace();
            }
            GetDataAdapter1.add(GetDataAdapter2);
        }
        recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this);
        recyclerView.setAdapter(recyclerViewadapter);
    }
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Во-первых, в вашем php-файле попробуйте использовать

die(var_dump($_POST))

, чтобы проверить, правильно ли ваше почтовое приложение!

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

    @Override
    protected List<MyModel> doInBackground(Void... params) {

        Logger.log(Logger.INFO, "DOWNLOAD STARTED!");

        try {
            //I have a Service Class called ConnectionService, that do the verifications and conenction!
            if (connectionService.isConnected && connectionService.hasInternet) {
                //Creating my json to send via POST to my wbs in php.
                JSONObject data = new JSONObject();
                data.put("my_attribute", "AttributeTest");
                JSONObject newData = new JSONObject().accumulate("data", data);
                return connectionService.downloadInfo(newData);
            }
            return null;
        } catch (Exception e) {
            Message.showLongMessage(getApplicationContext(), getString(R.string.error_no_connection));
            Logger.log(Logger.ERROR, e.getMessage());
        }
        return null;
    }

Это мой класс ConnectionService:

public List downloadInfo(JSONObject dataJson) {
    try {
        return checkDownloadConnection(connectPost(dataJson));
    } catch (IOException | JSONException e) {
        e.printStackTrace();
        Logger.log(Logger.ERROR, e.getMessage());
    }
    return null;
}

private JSONObject connectPost(JSONObject dataJson) {

    JSONObject jsonObject = null;
    HttpURLConnection connection = null;

    try {
        connection = (HttpURLConnection) new URL("my_url_to_my_php_file").openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        //connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestMethod("POST");
        connection.setReadTimeout(10000);
        connection.setConnectTimeout(15000);

        OutputStream os = connection.getOutputStream();
        os.write(dataJson.toString().getBytes("UTF-8"));
        os.flush();

        if (connection.getResponseCode() == 200) {
            jsonObject = new JSONObject(Utils.bytesToString(connection.getInputStream()));
        }

    } catch (IOException | JSONException e) {
        e.printStackTrace();
        Logger.log(Logger.ERROR, e.getMessage());
    }

    if (connection != null) {
        connection.disconnect();
    }
    return jsonObject;
}

public List checkDownloadConnection(JSONObject connectionJson) throws JSONException, IOException {
    if (connection == null) {
        return null;
    }
    //connectionJson will return a result from my php json_encode(die(var_dump($obj)))
    //with status and data "$result = ['status' => true/false, 'message' => 'my message if occur some error', 'data' => $myData];
    String status = String.valueOf(connectionJson.getString("status"));
    if (status.equals(STATUS_FALSE)) {
        Logger.log(Logger.ERROR, String.valueOf(connectionJson.getString("message")));
        return null;
    }

    return hydrateObjects(connectionJson.getJSONArray("data"));
    //this is another function, that i hydrate my info downloaded, you won't need it for your logic.
}

Моя функция Utils.bytesToString:

public static String bytesToString(InputStream is) throws IOException {
    byte[] buf = new byte[1024];
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int bytesRead;
    while ((bytesRead = is.read(buf)) != -1) {
        buffer.write(buf, 0, bytesRead);
    }
    String out = new String(buffer.toByteArray());
    return out;
}

Надеюсь, вы понимаете.:)

0 голосов
/ 12 сентября 2018

Ваша переменная $ _POST [число] отправлена ​​неправильно.

Попробуйте следующее руководство, чтобы опубликовать свои данные из приложения для Android в коде PHP.

https://www.androidcode.ninja/android-http-client/

Надеюсь, у вас это получится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...