Вход-Аутентификация в удаленную базу данных mysql

У меня есть эта строка кода здесь.

Мой код Java:

btnLogin.setOnClickListener(new View.OnClickListener() { @Override $public void onClick(View v) { ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("username", txtUsername.getText().toString())); postParameters.add(new BasicNameValuePair("password", txtPassword.getText().toString())); //String valid = "1"; String response = null; try { response = CustomHttpClient.executeHttpPost("http://www.sampleweb.com/imba.php", postParameters); String res=response.toString(); // res = res.trim(); res= res.replaceAll("\\s+",""); //error.setText(res); if(res.equals("1")){ txtError.setText("Correct Username or Password"); //Intent i = new Intent(CDroidMonitoringActivity.this, MenuClass.class); //startActivity(i); } else { txtError.setText("Sorry!! Incorrect Username or Password"); } } catch (Exception e) { txtUsername.setText(e.toString()); } } }); } 

Мой код сценария php:

  <?php $un=$_POST['username']; $pw=$_POST['password']; $user = 'bduser'; $pswd = 'dbpwd'; $db = 'phplogin'; $conn = mysql_connect("localhost","root",""); mysql_select_db($db, $conn); $query = mysql_query("SELECT * FROM user WHERE username = '$un' AND password = '$pw'"); $result = mysql_query($query) or die("Unable to verify user because : " . mysql_error()); if(mysql_num_rows($result) == 1) echo 1; // for correct login response else echo 0; // for incorrect login response ?> 

У меня проблема с этим кодом. В моем коде Android, когда я пытаюсь изменить res.equals на содержит. Он всегда говорит правильный пароль, но если я его не изменю, он говорит неверный пароль. Я не знаю, что что-то не так в моем java-коде или в моем php-коде. действительно нужна помощь.

Похоже, что ошибка в коде PHP.

Измените следующую строку: –

Из:

  $query = mysql_query("SELECT * FROM user WHERE username = '$un' AND password = '$pw'"); 

Для того, чтобы:

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

Вы также должны рассмотреть возможность внесения изменений для предотвращения SQL Injection: –

 $query = sprintf("SELECT * FROM user WHERE username = WHERE username='%s' AND password='%s'", mysql_real_escape_string($un), mysql_real_escape_string($pw)); 

В коде вы делаете mysql_query (mysql_query ()), я верю.

Первая попытка:

 txtError.setText(res); 

Кстати: SQL-инъекция. Если вы вводите пароль:

 ' UNION SELECT * FROM user WHERE username='admin 

Измените свой PHP на «select count (*)» и проверьте фактическое числовое значение результата. Таким образом, вы не пытаетесь сравнивать с возможным NULL, который может отбрасывать количество строк.

Также проверьте свой PHP отдельно, чтобы убедиться, что вы получаете правильный ответ от ECHO.

Имейте в виду, что ваш код Android блокируется до тех пор, пока он не получит результат. Вероятно, вы должны перекодировать его в поток. В противном случае устройство будет «не реагировать» и выйти, если SQL слишком медленный.

EDIT: добавьте некоторый код – немного отличается тем, что он проверяет, установлено ли определенное значение, а не возвращалось ли что-либо. Та же идея, еще несколько строк кода.

 /** Authenticate a login. * * @param string $Username * @param string $Password * @return int */ function login( $Username, $Password ) { Logger::DEBUG( "Login attempt by '" . $Username . "'"); try { $conn = DBConnection::_getConsole2DB(); $query = "select LoginId, UserId, RoleId, ProjectMask, RestrictionMask from Users where LoginId = ? and Password = ? and Active = 1"; $st = $conn->prepare( $query ); $st->bindParam( 1, $Username ); $st->bindParam( 2, $Password ); $st->execute(); $row = $st->fetch( PDO::FETCH_ASSOC ); if( !isset( $row[ 'UserId' ])) return 0; $this->userId = $row[ 'UserId' ]; $this->roleId = $row[ 'RoleId' ]; $this->projectMask = $row[ 'ProjectMask' ]; $this->restrictionMask = $row[ 'RestrictionMask' ]; $_SESSION[ 'userId' ] = $this->userId; $_SESSION[ 'roleId' ] = $this->roleId; $_SESSION[ 'projectMask' ] = $this->projectMask; $_SESSION[ 'restrictionMask' ] = $this->restrictionMask; $_SESSION[ 'loginId' ] = $row[ 'LoginId' ]; } catch( PDOException $e ) { Logger::PDO_ERROR( $e ); return -1; // error } return 1; } 

Это использует PDO, поэтому есть небольшие различия в синтаксисе с тем, что вы пытаетесь сделать.