2017-09-24 32 views
0

我創建了一個簡單的登錄和註冊用戶界面一切工作正常,除了用戶名editText字段輸入的文本總是在mysql數據庫中顯示爲0。android editText在mysql數據庫中顯示爲0的文本?

這裏是一個使用排槍和處理JSON響應,並創建一個新的意圖,是以用戶在登錄屏幕的類:

public class RegisterActivity extends AppCompatActivity { 

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

     final EditText etAge = (EditText) findViewById(R.id.etAge); 
     final EditText etName = (EditText) findViewById(R.id.etName); 
     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 name = etName.getText().toString(); 
       final String username = etUserName.getText().toString(); 
       final String password = etPassword.getText().toString(); 
       final int age = Integer.parseInt(etAge.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) { 
           Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); 
           RegisterActivity.this.startActivity(intent); 
          } else { 
           AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this); 
           builder.setMessage("Register Failed") 
             .setNegativeButton("Retry", null) 
             .create() 
             .show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }; 

       RegisterRequest registerRequest = new RegisterRequest(name, username, age, password, responseListener); 
       RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
       queue.add(registerRequest); 
      } 
     }); 
    } 
} 

這裏是發送請求,使連接類:

public class RegisterRequest extends StringRequest{ 
    private static final String REGISTER_REQUEST_URL = "http://192.168.100.105/register.php"; 
    private Map<String, String> params; 

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

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

這裏是用來驗證,連接和查詢數據庫的PHP文件:

<?php 
$con = mysqli_connect("localhost", "root", "password", "androidtest"); 
$name = $_POST["name"]; 
$age = $_POST["age"]; 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$statement = mysqli_prepare($con, "INSERT INTO users (name, username, age, 
password) VALUES (?, ?, ?, ?)"); 

mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, 
$password); 
mysqli_stmt_execute($statement); 

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

echo json_encode($response); 
?> 

,因爲我不允許上傳附加圖像,這裏是數據庫的截圖鏈接:

https://i.gyazo.com/94e1bfe5f0c75f8b81fd9406f614f2f9.png

+0

在onClick是字符串用戶名持有值? –

+0

是的,它與所有其他變量相同 – N00B

+0

然後我可以想到的是,什麼是變量類型的用戶名列。 –

回答

0

改變這個在PHP

mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, 
$password); 

mysqli_stmt_bind_param($statement, "ssis", $name, $username, $age, 
$password); 

用戶名不是整數。

+0

即時對不起,我不明白我應該改變什麼? – N00B

+0

在PHP文件中,您使用mysqli_stmt_bind_param($語句,「siss」,$ name,$ username,$ age,$ password)。只有年齡是一個整數,但正如你寫的「siss」,用戶名是一個整數,這是錯誤的,因爲用戶名是一個字符串。所以你用mysqli_stmt_bind_param($語句,「ssis」,$ name,$ username,$ age, $ password)進行更改; –

+0

對不起,我沒有看到你最初的變化。但我把它從siss改成了ssis,它工作正常!謝謝 – N00B

相關問題