如何使用数据库phpMySQL验证登录输入


how to verify login input with database php MySQL

请帮忙我正在为我的android应用程序进行登录活动,我使用以下代码检查了我的数据库中的电子邮件和密码

<?php

 try
{
    // On se connecte à MySQL
    $bdd = new PDO('mysql:host=localhost;dbname=application;charset=utf8', 'root', '');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
echo 'base de donnee n est pas connecte';
}

//Getting values 
        $username = $_POST['editusername'];
        $password = $_POST['editpassword'];
 //contact surgat
// On affiche chaque entrée une à une
$reponse = $bdd->query("SELECT * FROM personne  WHERE Email='$username' AND Motpass='$password'");
while ($donnees = $reponse->fetch())
{
    //if we got some result 
    if(isset($donnees)){
        //displaying success 
        echo "success";
    }else{
        //displaying failure
        echo "failure";
    }
$reponse->closeCursor(); 
}
    ?>

我正在与android工作室合作,这是我在其中使用的loginactivity.java AsyncTask来获得结果

package com.example.yh.log;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MainActivity extends Activity {
    private EditText TextUserName;
    private EditText TextPassword;
    public static final String USER_NAME = "USERNAME";
    String username;
    String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}
public void onLoginClick(View view){
    TextUserName = (EditText) findViewById(R.id.editusername);
    TextPassword = (EditText) findViewById(R.id.editpassword);
    username=TextUserName.getText().toString();
    password=TextPassword.getText().toString();
    if(username.isEmpty())
        Toast.makeText(getBaseContext(),"Entrez votre username",Toast.LENGTH_SHORT).show();
    else if(password.isEmpty())
        Toast.makeText(getBaseContext(),"Entrez votre mot de passe",Toast.LENGTH_SHORT).show();
    else {
        String urlString = "http://192.168.173.1/Search/login.php";
        LoginTask loginTask = new LoginTask();
        loginTask.execute(urlString);
    }
}
private class LoginTask extends AsyncTask<String,Void,String>
{
    private Dialog loadingDialog;
  @Override
  protected void onPreExecute() {
  super.onPreExecute();
 loadingDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Loading...");
}
    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection c=null;
        try {
            String urlString=params[0];
            URL url=new URL(urlString);
            c=(HttpURLConnection)url.openConnection();
            c.setRequestMethod("POST");
            c.setConnectTimeout(15000 /* milliseconds */);
            c.setDoInput(true);
            c.setDoOutput(true);
            c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            String s = "username="+username+"&password=" + password;
            c.setFixedLengthStreamingMode(s.getBytes().length);
            PrintWriter out = new PrintWriter(c.getOutputStream());
            out.print(s);
            out.close();
            c.connect();
            int mStatusCode = c.getResponseCode();
            String result="";
            switch (mStatusCode) {
                case 200:
                    BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        sb.append(line).append("'n");
                    }
                    br.close();
                    result =  sb.toString();
            }
            return result;
        } catch (Exception ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
            return "Error connecting to server";
        } finally {
            if (c != null) {
                try {
                    c.disconnect();
                } catch (Exception ex) {
                   Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
    @Override
    protected void onPostExecute(String s) {
        //super.onPostExecute(s);
        String ss = s;
        loadingDialog.dismiss();
        if(ss=="success") {
            Intent intent = new Intent(MainActivity.this, UserProfile.class);
            intent.putExtra(USER_NAME, username);
            finish();
            startActivity(intent);
        }else{
               Toast.makeText(getApplicationContext(), "invalide username or password", Toast.LENGTH_LONG).show();
        }}
    }
}

当我运行活动并点击按钮时,我一直在php代码"Undefined index editusername"中发现这个错误,尽管我在loginactivity.xml中声明了具有相同ID的编辑文本,但我已经更改了很多次,但仍然无法使用

  <EditText android:id="@+id/editusername"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

谢谢。

问题是在Java:中

 String s = "username="+username+"&password=" + password;

在PHP中与此不匹配:

    //Getting values 
    $username = $_POST['editusername'];
    $password = $_POST['editpassword'];

还要注意,对于来自用户输入的值,应该使用URLEncoder.encode()

String charset = "UTF-8";
String s = "editusername=" +
 URLEncoder.encode(username, charset) + 
 "&editpassword=" + 
 URLEncoder.encode(password, charset);

此外,在Java中不能将==与Strings一起使用,需要使用equals()方法:

@Override
protected void onPostExecute(String s) {
    //super.onPostExecute(s);
    String ss = s;
    loadingDialog.dismiss();
    //use equals() instead:
    if(ss.equals("success")) {
        Intent intent = new Intent(MainActivity.this, UserProfile.class);
        intent.putExtra(USER_NAME, username);
        finish();
        startActivity(intent);
    }else{
           Toast.makeText(getApplicationContext(), "invalide username or password", Toast.LENGTH_LONG).show();
    }}
}