не получает параметры из php-запроса - PullRequest
0 голосов
/ 31 октября 2018

У меня странная проблема, решение которой я не смог найти. Я повторно посетил старый код, который отлично работал в прошлом, но теперь почему-то он не работает должным образом.

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

Разбирая код андроида, я пытался протестировать почтовый запрос отдельно. Я использую wampserver 3.1.4 с PHP 5.6.3, MySQL 5.7 и Apache 2.4. Для получения параметров из запроса на публикацию я использую этот фрагмент кода:

$username = null;
$password = null;

var_dump($_POST);

if (isset($_POST['PARAM_EMAIL']))
    $username = $mysqli->real_escape_string($_POST['PARAM_EMAIL']);

if (isset($_POST['PARAM_PASSWORD']))
    $password = $mysqli->real_escape_string($_POST['PARAM_PASSWORD']);

я использовал postman для проверки запроса и var_dump() для проверки содержимого параметров.

Вот пример того, как я написал запрос и какой результат я получил:

<code>    http://192.168.2.103/GestionDesCamions/check.php?PARAM_EMAIL=user@xx.com&PARAM_PASSWORD=xx

<pre class='xdebug-var-dump' dir='ltr'>
    <small>C:\wamp64\www\GestionDesCamions\check.php:12:</small>
    <b>array</b>
    <i>(size=0)</i>
    <i>
        <font color='#888a85'>empty</font>
    </i>
ложь

он говорит, что пост-запрос не содержит никаких параметров, поэтому в итоге я получил false, потому что пользователь не может быть найден.

Я использовал! Empty () вместо isset () и получил тот же результат. Я проверял другие запросы, в частности запросы GET, и они работают нормально. Любая идея, как я могу решить эту проблему? Я использую Windows 10 в качестве операционной системы.

РЕДАКТИРОВАТЬ:

вот метод POST, который я использую в своем приложении для Android:

public boolean SendToUrl(String strURL,
            ArrayList<NameValuePair> nameValuePairs) {
        // Creer un buffer
        StringBuilder builder = new StringBuilder();
        // Creer un client Http
        HttpClient client = new DefaultHttpClient();
        // Creer un obejet httppost pour utiliser la methode post
        HttpPost httppost = new HttpPost(strURL);
        try {
            // UrlEncodedFormEntit() : An entity composed of a list of
            // url-encoded pairs
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            // recuperer la reponse
            HttpResponse response = client.execute(httppost);

            StatusLine statusLine = response.getStatusLine();
            // recuperer le ack
            int statusCode = statusLine.getStatusCode();
            // si ack =200 connexion avec succee
            if (statusCode == 200) {

                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                // erreur du chargement
                Toast.makeText(_mContext, "pas de connexion", Toast.LENGTH_LONG)
                        .show();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Boolean.parseBoolean(builder.toString());
    }

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я пытался подойти к этой проблеме по-другому, я немного изменил свой код Android и попытался отправлять почтовые запросы с залпом библиотеки вместо того, что я использовал раньше, и он выдал эту ошибку: Unexpected response code 403 for "URL"

Обратившись к этой теме , я нашел решение, которое заключалось в простом изменении этого документа httpd-vhosts.conf в Apache следующим образом:

require local до Require all granted.

И теперь запросы POST разрешены, и даже старый фрагмент кода для запросов http работает. Спасибо всем за помощь.

0 голосов
/ 31 октября 2018

Недавно я столкнулся с этой же проблемой, я не уверен, когда, но когда-то в недавнем прошлом, когда Android отправляет запрос на публикацию php, он приходит в тело. Чтобы получить сообщение, вы должны использовать его, чтобы получить его как строку, а затем делать то, что вы хотите.

# Get JSON as a string 
$json_str = file_get_contents('php://input'); 
# Get as an object 
$json_obj = json_decode($json_str);

Последнее приложение, которое я сделал, вы могли просто получить $ _POST, но это изменилось.

...