2017-09-20 11 views
1

J'essaie de comprendre comment enregistrer les détails de l'utilisateur sur la base de données du serveur. Bien que en regardant une vidéo et en suivant les étapes mentionnées, je suis en mesure d'enregistrer le nom, mot de passe, dob mais le champ e-mail affiche 0 à chaque fois. S'il vous plaît dites-moi où est le problème, je ne suis pas capable de comprendre. Voici mon code.Email Champ ne pas enregistrer à la base de données - Inscription Android Page

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); 
?> 

J'utilise Volley pour cela.

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; 
} 
} 

et mon activité d'enregistrement principal

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

Regardez bien votre deuxième colonne et le deuxième argument que vous avez passé dans la liaison. –

+0

** Ne stockez jamais de mots de passe en texte brut! ** Veuillez utiliser *** [fonctions intégrées] de PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) *** pour gérer la sécurité des mots de passe. Si vous utilisez une version de PHP inférieure à 5.5, vous pouvez utiliser 'password_hash()' [pack de compatibilité] (https://github.com/ircmaxell/password_compat). *** Il n'est pas nécessaire de [échapper les mots de passe] (http://stackoverflow.com/q/36628418/1011527) *** ou d'utiliser un autre mécanisme de nettoyage avant le hachage. Cela change * le mot de passe et provoque un codage supplémentaire inutile. –

+0

Merci pour votre aide. Le problème est résolu maintenant. –

Répondre

1

La réponse est simple, vous avez utilisé un i (entier) au lieu d'un s (chaîne) pour la colonne email dans l'argument bind_param(). Je doute sincèrement que c'est un nombre entier.

Vous devez également vous assurer que le type de colonne email est bien un type pouvant stocker une chaîne.

Par conséquent, remplacez siss par ssss pour toutes les chaînes.