dongyashun2559
2011-07-03 16:44 阅读 28

无法验证

At this time, I want user to enter his/her username and password(Data is mocked @MySQL) But it does not work.

My file.php :

<?php
    include("ConnectDatabase.php");
    $Username = $_POST['Username'];
    $Password = $_POST['Password'];

    $q = mysql_query("SELECT Username, Password FROM Users
                    where Username = '".$Username."' and
                    Password = '".$Password."'");

    if(mysql_num_rows($q) > 0){
        print json_encode($q);
    }else{
        print "1";
    }
     mysql_close();
   ?>

My java file :

public class Authentication extends Activity implements OnClickListener,
        OnKeyListener, OnCheckedChangeListener {

    /** Called when the activity is first created. */

    ArrayList<NameValuePair> authentication;
    String passIn, userIn, result;
    EditText username, password;
    CheckBox remember;
    Button b_login;
    InputMethodManager inputManager;
    InputStream is;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // userIn = username.getText().toString();
        // passIn = password.getText().toString();
        username = (EditText) findViewById(R.id.usrname);
        password = (EditText) findViewById(R.id.password);
        inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        remember = (CheckBox) findViewById(R.id.remember);
        remember.setOnCheckedChangeListener(this);
        b_login = (Button) findViewById(R.id.login);
        b_login.setOnClickListener(this);
        username = (EditText) findViewById(R.id.usrname);
        username.setOnKeyListener(this);
        password = (EditText) findViewById(R.id.password);
        password.setOnKeyListener(this);

    }

    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.login:
            while (true) {
                userIn = username.getText().toString();
                passIn = password.getText().toString();
                try {
                    sendAuthenticationData(userIn, passIn);
                    break;
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (WrongInputException e) {
                    Toast.makeText(Authentication.this, "Invalid username or password", Toast.LENGTH_LONG);

                }
//              break;
            }
            Intent intent = new Intent(this, ApplicationMenus.class);
            this.startActivity(intent);
            clearText(username,password);

            break;
        }
    }

    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if ((event.getAction() == KeyEvent.ACTION_DOWN)
                && (keyCode == KeyEvent.KEYCODE_ENTER)) {
            // Perform action on key press

            inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
            return true;
        }
        return false;
    }


    public void clearText(EditText usr, EditText pass) {
        usr.setText("");
        pass.setText("");
    }

    public void sendAuthenticationData(String username, String password)
            throws ClientProtocolException, IOException, WrongInputException {

        authentication = new ArrayList<NameValuePair>();
        authentication.add(new BasicNameValuePair("Username", userIn));
        authentication.add(new BasicNameValuePair("Password", passIn));
        this.sendData(authentication);
    }

    public void sendData(ArrayList<NameValuePair> data)
            throws ClientProtocolException, IOException, WrongInputException {

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(
                "path/Authentication.php"); // I use real path here
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
//      is = entity.getContent();
        String temp = EntityUtils.toString(entity);

        if (temp.equals("1")) {
            throw new WrongInputException();
        }

    }}

This is my first time to write code that connect with PHP server, and JSON. I pretty confuse with JSON a lot, though I tried to follow many samples. Appreciate for any help

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    douxiyi2418 douxiyi2418 2011-07-03 16:56

    The first thing you forgot is mysql_real_escape_string for the incoming variables:

    $Username = $_POST['Username'];
    

    And your second problem is likely this:

       if (mysql_num_rows($q) > 0) {
            print json_encode($q);
    

    The $q variable is a mysql_ result handle. It cannot be JSON-represented. You probably wanted to use:

            print json_encode(mysql_fetch_assoc($q));
    

    So you'll get at least a result array/object with username/password there. Maybe it would be easier if you just send another simple numeric result back - print "2"; or something.

    Also have you checked if you run PHP 5.2 or later, so that json_encode is certainly available?

    点赞 评论 复制链接分享

相关推荐