Я создаю приложение для Android, имеющее экран входа в систему. Пользователь должен ввести свой адрес электронной почты и пароль. При нажатии кнопки входа в систему мой код должен отправить введенное имя пользователя и пароль в файл php с использованием пост-переменных. Предполагается, что файл php использует переменные, отправленные из приложения, для завершения оператора select и возвращает результаты из базы данных на сервере, если есть какие-либо совпадения. При запуске приложения выход, возвращаемый из файла php, пуст. Я не знаю, правильно ли отправляются почтовые переменные в файл php, я искал по всему Интернету, но, похоже, не понимаю, как работает эта концепция.Передача переменных post из приложения java android в файл php для базы данных запросов
Ниже мой код:
package com.example.csqa;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.os.AsyncTask;
import android.widget.TextView;
import android.widget.Toast;
public class AsyncHttpPost extends AsyncTask<String, String, String> {
TextView t;
MainActivity ma;
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
public AsyncHttpPost(MainActivity m, List<NameValuePair> nvp){
ma = m;
nameValuePair = nvp;
}
@Override
protected String doInBackground(String... params) {
byte[] result = null;
String str = "";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
try {
post.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
result = EntityUtils.toByteArray(response.getEntity());
str = new String(result, "UTF-8");
}
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (Exception e) {
}
return str;
}
@Override
protected void onPostExecute(String output) {
// do something with the string returned earlier
Toast.makeText(ma.getApplicationContext(), "Calling validateUser with " + output, Toast.LENGTH_SHORT).show();
ma.validateUser(output);
}
}
Вот PHP скрипт
<?php
$con=mysqli_connect("127.0.0.1","S831987","831987",'D831987");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$email = $_POST['email'];
$password = $_POST['password'];
$result = mysqli_query($con,"SELECT * FROM USERS where
EMAIL='$email' and PASSWORD ='$password'");
$row = mysqli_fetch_array($result);
$data = $row[0];
if($data){
echo $data;
}
mysqli_close($con);
?>
вот код, который выполняет от основной деятельности при нажатии кнопки Войти нажимается пользователь:
public void btnLoginClicked(View v){
TextView em = (TextView) findViewById(R.id.tvLogEmail);
TextView pw = (TextView) findViewById(R.id.tvLogPassword);
String email = em.getText().toString();
String password = pw.getText().toString();
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("email", email));
nameValuePair.add(new BasicNameValuePair("password", password));
AsyncHttpPost async = new AsyncHttpPost(this, nameValuePair);
async.execute("http://lamp.ms.wits.ac.za/~831987/isValidLogin.php");
}
Может ли кто-нибудь понять, почему я получаю пустой ответ? Я тестировал sql-запрос как есть, с правильными переменными, и он работает правильно. Спасибо заранее!
'$ CON = mysqli_connect ("127.0.0.1", "S831987",» 831987 ", 'D831987"); 'неверно, по четвертому (последнему) значению вы используете« открывать »и« закрывать ». Do '$ con = mysqli_connect (" 127.0.0.1 "," S831987 "," 831987 "," D831987 ");' - _also_ Большинство редакторов имеют цветовое кодирование, вы можете использовать эту функцию, чтобы выявлять такие ошибки. – Epodax
Спасибо @Epodax, но, к сожалению, возвращаемое значение все еще пусто. :/ –
Не могли бы вы попытаться проверить, получаете ли вы значение сообщения? 'if (isset ($ _ POST ['email)) {print_r ($ _ POST); } '(это просто пример того, как вы можете проверить) – Epodax