2017-09-20 10 views
1

サーバデータベースのユーザ詳細を保存する方法を理解しようとしています。 ビデオを見て、上記の手順に従うと、私は名前、パスワード、dobを保存することができますが、メールフィールドは毎回0を表示します。問題がどこにあるのか教えてください。私は理解できません。以下は私のコードです。電子メールフィールドがデータベースに保存されない - Androidサインアップページ

Register.php

<?php 
$con = mysqli_connect("my_host", "db_user", "db_password", "my_db"); 
$name = $_POST["name"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$dob = $_POST["dob"]; 
$statement = mysqli_prepare($con, "INSERT INTO user (name, email, password, dob) VALUES (?, ?, ?, ?)"); 
mysqli_stmt_bind_param($statement, "siss", $name, $email, $password, $dob); 
mysqli_stmt_execute($statement); 
$response = array(); 
$response["success"] = true; 
echo json_encode($response); 
?> 

私はこのためにボレーを使用しています。

はRegisterRequest.class

public class RegisterRequest extends StringRequest { 

private static final String REQUEST_REGISTER_URL = "http://www.myhostingaddress/register.php"; 
private Map<String, String> params; 

public RegisterRequest(String name, String email, String password, String dob, Response.Listener<String> listener){ 
    super(Method.POST, REQUEST_REGISTER_URL,listener,null); 
    params = new HashMap<>(); 
    params.put("name", name); 
    params.put("email", email); 
    params.put("password", password); 
    params.put("dob",dob); 
} 

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

と私の主な登録活動

Register.classは

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sign_up); 

    name = (EditText) findViewById(R.id.name); 
    eemail = (EditText) findViewById(R.id.email); 
    password = (EditText) findViewById(R.id.password_signup); 
    dob = (EditText) findViewById(R.id.DOB); 
    register_btn = (Button) findViewById(R.id.Signup); 

    register_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String Name = name.getText().toString(); 
      final String Email = eemail.getText().toString(); 
      final String Password = password.getText().toString(); 
      final String Dob = dob.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(Sign_up.this, "Account Created, Login now !", Toast.LENGTH_SHORT).show(); 
          startActivity(new Intent(Sign_up.this,Login_Page.class)); 
         } else { 
          Toast.makeText(Sign_up.this, "Registration Failed, Try Again !", Toast.LENGTH_SHORT).show(); 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      RegisterRequest registerRequest = new RegisterRequest(Name,Email,Password,Dob,responseListener); 
      RequestQueue queue = Volley.newRequestQueue(Sign_up.this); 
      queue.add(registerRequest); 
     } 
    }); 
} 
} 
+1

バインドで渡した2番目の列と2番目の引数をよく見てください。 –

+0

**プレーンテキストのパスワードを保存しないでください!** *** PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)***を使用してパスワードセキュリティを処理してください。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。 ***ハッシュする前に[パスワードをエスケープする](http://stackoverflow.com/q/36628418/1011527)***または他のクレンジングメカニズムを使用する必要はありません。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

+0

ご協力ありがとうございます。問題は今解決されました。 –

答えて

1
は、ここでは答えは簡単です、あなたは sの代わりに i(整数)を使用

bind_param()の引数のemail列の文字列(文字列)。私はそれが整数であることを心から疑う。

また、emailの列の型が実際に文字列を格納できる型であることを確認することをお勧めします。

したがって、すべての文字列に対してsissssssを変更してください。

関連する問題