WedX - журнал о программировании и компьютерных науках

Страница входа в Android с MySQL

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

Вот мой код

package login.CBA; 

import android.app.Activity; 
import android.content.Intent;
import android.os.Bundle; 
import android.os.StrictMode;
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpProtocolParams;

public class login extends Activity { 

private EditText etUsername; 

private EditText etPassword; 

private Button btnLogin; 

private Button btnCancel; 

private TextView lblResult;


@Override 


public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 



    setContentView(R.layout.main); 



    etUsername = (EditText)findViewById(R.id.Username); 

    etPassword = (EditText)findViewById(R.id.password); 

    btnLogin = (Button)findViewById(R.id.login); 

    btnCancel = (Button)findViewById(R.id.Cancel); 

    lblResult = (TextView)findViewById(R.id.result); 



    btnLogin.setOnClickListener(new OnClickListener() { 

        @Override 

        public void onClick(View v) { 



            StrictMode.ThreadPolicy policy = new                                                                             
            StrictMode.ThreadPolicy.Builder().permitAll().build(); 
            StrictMode.setThreadPolicy(policy);



            ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

            postParameters.add(new BasicNameValuePair("Username",  
            etUsername.getText().toString()));

            postParameters.add(new BasicNameValuePair("password",   
            etPassword.getText().toString()));

             /*            String valid = "1";*/      

            String response = null;


            try {

               response =  
               CustomHttpClient.executeHttpPost("localhost/check.php", 
               postParameters);

               String res = response.toString();

               //res = res.trim();

               res = res.replaceAll("\\s+","");

               // error.setText(res);

               if (res.equals("1")) {

                   Intent i = new Intent(getApplicationContext(), mainmenu.class);
               startActivity(i);

               }

               else lblResult.setText("Incorrect Username or Password Entered");

            } 

            catch (Exception e) {

               etUsername.setText(e.toString());


            }



        }


     });
   }
}

И код PHP

 <?php

$un=$_POST['username'];
$pw=$_POST['password'];

$conn = mysql_connect('localhost', 'root', 'user');
mysql_select_db('cba');

$query = 'SELECT * FROM login WHERE username = ‘$un’ AND password = ‘$pw’';
$result = mysql_query($query) or die ('Unable to verify user because : ' .    
mysql_error());

if (mysql_num_rows($result) > 0) { 

echo 1; 
} 
else { 

// print status message 
 echo 0; 
}
?>
30.01.2012

  • вы получаете сообщение о неправильном вводе имени пользователя или пароля? 30.01.2012
  • ОК, поэтому я изменил одинарные кавычки, но теперь получаю сообщение «org.apache.http.NoHttpResponseException: целевой сервер не ответил» в эмуляторе 30.01.2012
  • нам нужно быть более сфокусированными: работает ли PHP, а код Android дает сбой? если вы не уверены, попробуйте опубликовать user/pwd непосредственно в файле php и посмотреть. тогда мы можем взять его оттуда (после того, как вы опубликуете точную ошибку, которую вы получите). 31.01.2012
  • @alfasin хорошо, поэтому ошибка, которую я получаю, отображается только в эмуляторе, а не в eclipse. После того, как я поместил un/pw в ошибку «org.apache.http.NoHttpResponseException: целевой сервер не ответил» в эмуляторе, заменяет un в текстовом поле un. Я попробовал php-код без приложения и нашел несколько ошибок. Ошибки 31.01.2012
  • продолжение 'Уведомление: Неопределенный индекс: имя пользователя в C:\xampp\htdocs\check.php в строке 3 Уведомление: Неопределенный индекс: пароль в C:\xampp\htdocs\check.php в строке 4 Уведомление: Неопределенная переменная: un' в строке C:\xampp\htdocs\check.php в строке 9 Примечание: Неопределенная переменная: pw' в C:\xampp\htdocs\check.php в строке 9 Невозможно проверить пользователя, потому что: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' AND password = '' в строке 1' 31.01.2012
  • Измените $_POST на $_GET и вызовите свой скрипт с помощью: localhost/check.php?username=‹your имя пользователя›&password=‹ваш пароль› добавьте эхо на экран в вашем php-скрипте, тогда вы точно увидите, где находится точка fauiler 01.02.2012
  • Привет, где вы храните файл php, хотя у меня тот же код, но когда я набираю адрес localhost: 8080/check.php, я получаю ошибку 404. Пожалуйста, помогите, я новичок в Android 16.01.2013

Ответы:


1

Я думаю, что может быть проблема в этой строке:

$query = 'SELECT * FROM login WHERE username = ‘$un’ AND password = ‘$pw’';

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

$query = "SELECT * FROM login WHERE username = '$un' AND password = '$pw'";

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

$un = mysql_real_escape_string($_POST['username']);
$pw = mysql_real_escape_string($_POST['password']);

Ознакомьтесь с этим прошлым вопросом SO для получения информации об "org.apache.http.NoHttpResponseException: целевой сервер не ответил" HttpClient на Android: NoHttpResponseException через UMTS/3G

30.01.2012
  • ОК, поэтому я изменил одинарные кавычки, но теперь получаю сообщение «org.apache.http.NoHttpResponseException: целевой сервер не ответил» в эмуляторе 31.01.2012
  • @ user1058469, можете ли вы войти в БД с помощью MySQL Workbench или Query Analyzer? 31.01.2012
  • Я могу войти в базу данных с помощью MySQL Workbench, да 31.01.2012
  • @ user1058469 сделана правка. Проверьте связанный вопрос, надеюсь, это поможет. 31.01.2012
  • Спасибо за ссылку. Извините, я действительно новичок в этом, я пробовал HttpProtocolParams.setUseExpectContinue(CustomHttpClient.getParams(), false); Могу ли я просто проверить, где именно это должно вписываться в мой код? Получил ошибку с getParams(). Спасибо 31.01.2012
  • Похоже, он должен идти туда, где вы определяете наш HTTP-запрос. Я вижу ваш ответ HTTP, но не запрос. Это в другом разделе кода? 31.01.2012

  • 2

    вам нужно изменить это

    postParameters.add(new BasicNameValuePair("Username", 
    

    В это

    postParameters.add(new BasicNameValuePair("username",
    

    Строка должна быть одинаковой

    21.06.2012

    3

    Я думаю, может быть, вы забыли добавить активность в файл AndroidManifest.xml.

    Просто добавь:

    activity android:name=".mainmenu" 
    

    в AndroidManifest.xml

    18.02.2013
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]