2015-05-21 1 views
2

Я создаю приложение для 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-запрос как есть, с правильными переменными, и он работает правильно. Спасибо заранее!

+2

'$ CON = mysqli_connect ("127.0.0.1", "S831987",» 831987 ", 'D831987"); 'неверно, по четвертому (последнему) значению вы используете« открывать »и« закрывать ». Do '$ con = mysqli_connect (" 127.0.0.1 "," S831987 "," 831987 "," D831987 ");' - _also_ Большинство редакторов имеют цветовое кодирование, вы можете использовать эту функцию, чтобы выявлять такие ошибки. – Epodax

+0

Спасибо @Epodax, но, к сожалению, возвращаемое значение все еще пусто. :/ –

+0

Не могли бы вы попытаться проверить, получаете ли вы значение сообщения? 'if (isset ($ _ POST ['email)) {print_r ($ _ POST); } '(это просто пример того, как вы можете проверить) – Epodax

ответ

0

Почему бы не использовать ServiceHandler с объектом json? Вот как это работает для меня:

private class AsyncHttpPost extends AsyncTask<String, Void, Void> { 

    ProgressDialog progressDialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(getActivity(), "", "checking email and password..."); 
    } 

    @Override 
    protected Void doInBackground(String... arg) { 
     String mEmail = arg[0]; // email entered by user 
     String mPassword = arg[1] // password entered by user 

     // Preparing post params 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("email", mEmail)); 
     params.add(new BasicNameValuePair("password", mPassword)); 

     ServiceHandler serviceClient = new ServiceHandler(); 
     String json = serviceClient.makeServiceCall(YOUR_URL, ServiceHandler.POST, params); 

     Log.d("SERVER Request: ", "> " + json); 

     if (json != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(json); 
       boolean error = jsonObj.getBoolean("error"); 
       // checking for error node in json 
       if (!error) { 
        // username and password checked successfully 
       } else { 
        Log.e("Server Error: ", "> " + jsonObj.getString("message")); 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } else { 
      Log.e("JSON Data", "JSON data error!"); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     progressDialog.dismiss(); 
    } 
} 

Кредиты:

 Смежные вопросы

  • Нет связанных вопросов^_^