php - 使用 php 和 mysql 登录 android

标签 php android mysql

我正在尝试在我的 Android 应用程序中创建登录和注册,但我面临的问题是,我可以在表中进行注册,但无法使用这些注册值登录。它向我显示我的登录 php 脚本的“失败”消息。下面是我的“login.php”文件

 <?php
     if($_SERVER['REQUEST_METHOD']=='POST'){
     $username = $_POST['username'];
     $password = $_POST['password'];
     require_once('dbConnect.php');
     $sql = "SELECT * FROM register WHERE username = '$username' AND  password='$password'";
     $result = mysqli_query($con,$sql);
     $check = mysqli_fetch_array($result);
     if(isset($check){
    echo'sucess'
    }else{
    echo'failure'
    }
    }
    ?>

这是我的 Android Java 文件“Login.java”

package com.example.tejask.add4u;
import android.app.ProgressDialog;
        import android.content.Context;
        import android.content.Intent;
        import android.content.SharedPreferences;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.support.annotation.Nullable;
        import android.support.v7.app.AppCompatActivity;
        import android.view.View;
        import android.widget.Button;
        import android.widget.EditText;
        import android.widget.TextView;
        import android.widget.Toast;
        import com.android.volley.AuthFailureError;
        import com.android.volley.DefaultRetryPolicy;
        import com.android.volley.Request;
        import com.android.volley.RequestQueue;
        import com.android.volley.Response;
        import com.android.volley.VolleyError;
        import com.android.volley.toolbox.StringRequest;
        import com.android.volley.toolbox.Volley;
        import java.util.HashMap;
        import java.util.Map;

/**
 * Created by tejas k on 26-04-2016.
 */


       public class Login extends AppCompatActivity implements View.OnClickListener {
        private Button btnLogin;
        private TextView txtRegister;
        private EditText editUsername,editPassword;
        public static final String USER_NAME = "username";
        public static final String KEY_PASSWORD="password";

        private static final String LOGIN_URL = "http://10.0.2.2/loginn.php";

        private String username;
        private String password;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        editUsername = (EditText) findViewById(R.id.editUsername);
        editPassword = (EditText) findViewById(R.id.editPassword);
        btnLogin= (Button) findViewById(R.id.btnLogin);
        txtRegister=(TextView)findViewById(R.id.txtRegister);
        txtRegister.setOnClickListener(this);
        btnLogin.setOnClickListener(this);
        }
        private void userLogin() {
        username = editUsername.getText().toString().trim();
        password = editPassword.getText().toString().trim();
        StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL,new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
        if(response.trim().equals("success")){
        openProfile();
        }
        else{                     Toast.makeText(Login.this,response,Toast.LENGTH_LONG).show();
        }
        }
        },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
                           Toast.makeText(Login.this,error.toString(),Toast.LENGTH_LONG ).show();
        }
        }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> map = new HashMap<String,String>();
        map.put(USER_NAME,username);
        map.put(KEY_PASSWORD,password);
        return map;
        }
        };
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
        }

        private void openProfile(){
        Intent intent = new Intent(this,ProfileActivity.class);
        intent.putExtra(USER_NAME, username);
        startActivity(intent);
        }

        @Override
        public void onClick(View v) {
        switch (v.getId()){
        case R.id.btnLogin:
        userLogin();
        break;

        case R.id.txtRegister:
        Intent register = new Intent(Login.this,Register.class);
        startActivity(register);
        break;
        }
        }
        }

最佳答案

在您的脚本中,您缺少 if(isset($check){ 上的 )

但是为了安全起见,我认为你应该将其更改为 MySQLi 准备好的语句。

您可以将 php 更改为以下内容:

if($_SERVER['REQUEST_METHOD']=='POST'){
    $username = $_POST['username'];
    $password = $_POST['password'];
    require_once('dbConnect.php');
    if($stmt = $con->prepare("SELECT * FROM register WHERE username = ? AND password = ? LIMIT 1")) {
        $stmt->bind_param('ss', $username, $password);
        if (!$stmt->execute()) {
            die('execute() failed: ' . htmlspecialchars($stmt->error));
        }
        $stmt->store_result();
        if ($stmt->num_rows == 1) {
            echo 'success';
        }
        else {
            echo 'failure';
        }
    }
    else {
        die('prepare() failed: ' . htmlspecialchars($con->error));
    }
    $stmt->close();
}

添加 LIMIT 1 意味着您只会得到 1 个结果,如果用户不存在,则返回零。

关于php - 使用 php 和 mysql 登录 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135408/

相关文章:

android - ThreeTenABP 日期时间解析器给出 yyyy-MM-ddTHH :mm:ss formate 的异常

mysql - 使用 MySQL Like 搜索带符号的数字

mysql - 如何在 AFTER UPDATE 触发器中引用最近更新的行

php - Echo forloop 从 phpmyadmin sql 检索到 div (PHP 文件)

javascript - 验证多个复选框和内爆功能

php - 在一个类的函数中写输出是我不应该做的?

android - 获取多边形角内的随机点?

php - 使用 PHP 将 facebook 个人资料图片添加到高分表

java - SharedPref 在重新启动应用程序时不保存更改

mysql - Spring 测试 - 回滚问题