好的,所以我试图制作一个允许人们在我的应用上注册帐户的功能。我正在使用android studio with volley。 PHP正在处理服务器端。代码如下:
爪哇:
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;
}
}
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:
<?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
对此有何建议?谁知道出了什么问题?正如我所说的那样,代码“可以正常工作”。因为它在运行,但它没有做它想要做的事情。
我对此很新,所以如果有人能够很好并且帮助我,我真的很感激。干杯!
编辑 - 我知道没有任何形式的加密,密码以纯文本形式存储。我知道它永远不应该发生,但它对我的这项任务来说是件事。它很复杂,让我们假装它只是另一个字符串。
答案 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;