在Android中注册用户 - PHP的难题?

时间:2016-11-18 14:55:17

标签: java php android mysql

好的,所以我试图制作一个允许人们在我的应用上注册帐户的功能。我正在使用android studio with volley。 PHP正在处理服务器端。代码如下:

爪哇:

RegisterRequest.java

package james.gcsecomputingapp;


import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.HashMap;
import java.util.Map;

public class RegisterRequest extends StringRequest {

    private static final String REGISTER_REQUEST_URL = "http://placeholder.net/register2.php";
    private Map<String, String> params;

    public RegisterRequest(String first_name, String last_name, String email, String username, String password, Response.Listener<String> listener){
        super(Method.POST, REGISTER_REQUEST_URL, listener, null);
        params = new HashMap<>();
        params.put("first_name", first_name);
        params.put("last_name", last_name);
        params.put("email", email);
        params.put("username", username);
        params.put("password", password);
    }

    @Override
    public Map<String, String> getParams() {
        return params;
    }
}

Register.java

package james.gcsecomputingapp;

import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

public class register extends AppCompatActivity {

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

        final EditText etFirstName = (EditText) findViewById(R.id.etFirstName);
        final EditText etLastName = (EditText) findViewById(R.id.etLastName);
        final EditText etEmail = (EditText) findViewById(R.id.etEmail);
        final EditText etUsername = (EditText) findViewById(R.id.etUserName);
        final EditText etPassword = (EditText) findViewById(R.id.etPassword);
        final Button bRegister = (Button) findViewById(R.id.bRegister);

        bRegister.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                final String firstName = etFirstName.getText().toString();
                final String lastName = etLastName.getText().toString();
                final String email = etEmail.getText().toString();
                final String username = etUsername.getText().toString();
                final String password = etPassword.getText().toString();


                Response.Listener<String> responseListener = new Response.Listener<String>(){

                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonResponse = new JSONObject(response);
                            boolean success = jsonResponse.getBoolean("success");
                            if (success){

                                Toast.makeText(register.this, "Work", Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(register.this, login.class);
                                startActivity(intent);
                            }else{
                                AlertDialog.Builder builder = new AlertDialog.Builder(register.this);
                                builder.setMessage("Register Failed")
                                        .setNegativeButton("Retry", null)
                                        .create()
                                        .show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };
                RegisterRequest registerRequest = new RegisterRequest(firstName,lastName,email,username,password, responseListener);
                RequestQueue queue = Volley.newRequestQueue(register.this);
                queue.add(registerRequest);
            }
        });
    }


}

PHP:

Register.php

<?php
    $con=mysqli_connect("localhost","user","pass","db_database");

    $first_namename = $_POST["first_name"];
    $last_name = $_POST["last_name"];
    $email = $_POST["email"];
    $username = $_POST["username"];
    $password = $_POST["password"];
    $statement = mysqli_prepare($con, "INSERT INTO `db_database`.`users` (`user_id`, `first_name`, `last_name`, `email`, `username`, `password`) VALUES (NULL, first_name, last_name, email, username, password)");
    mysqli_stmt_bind_param($statement, "siss",$first_name,$last_name,$email,$username,$password);
    mysqli_stmt_execute($statement);

    $response = array();
    $response["success"] = true;  

    echo json_encode($response);

?>

这段代码似乎没有产生任何错误,但显然它无法正常工作。运行代码时,它会按预期在SQL数据库中生成一个条目。但那些条目不包含数据?不明白我的意思吗?很抱歉,这是代码运行两次后表格的屏幕截图: table screenshot http://image.prntscr.com/image/276bab33d987430aaa1525222cbec6c0.png

对此有何建议?谁知道出了什么问题?正如我所说的那样,代码“可以正常工作”。因为它在运行,但它没有做它想要做的事情。

我对此很新,所以如果有人能够很好并且帮助我,我真的很感激。干杯!

编辑 - 我知道没有任何形式的加密,密码以纯文本形式存储。我知道它永远不应该发生,但它对我的这项任务来说是件事。它很复杂,让我们假装它只是另一个字符串。

1 个答案:

答案 0 :(得分:1)

下面: .tab-containts{ min-height: 500px; position: absolute; width:100%; }

您有5个要绑定的变量。你有 siss ,就像你有1个字符串,1个int,1个字符串,1个字符串。它应该是 sssss ,因为5个变量都是字符串。如果你不写'sssss&#39;有时候你可能会遇到错误。而不是&#34; sssss&#34;