我正在尝试在我的 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/