2017-09-11 60 views
1

我做了一个登录/注册程序如下因素本教程: https://www.youtube.com/watch?v=QxffHgiJ64M&list=PLe60o7ed8E-TztoF2K3y4VdDgT6APZ0ka什么我尝试存储在数据库值进入“0”

一切顺利,但后来我删除了“年龄”参数和插入一个“姓氏”和一个“电子邮件”参数。所以,每次我尝试注册一个用户,在“电子邮件”字段去与值“0”(即使我不使用@或)

这是我Register.php文件:

<?php 
 
    require("Password.php"); 
 
    $connect = mysqli_connect("x", "x", "x", "x"); 
 
    
 
    $name = $_POST["name"]; 
 
    $lastname = $_POST["lastname"]; 
 
    $email = $_POST["email"]; 
 
    $password = $_POST["password"]; 
 
    function registerUser() { 
 
     global $connect, $name, $lastname, $email, $password; 
 
     $passwordHash = password_hash($password, PASSWORD_DEFAULT); 
 
     $statement = mysqli_prepare($connect, "INSERT INTO user (name, lastname, email, password) VALUES (?, ?, ?, ?)"); 
 
     mysqli_stmt_bind_param($statement, "ssis", $name, $lastname, $email, $passwordHash); 
 
     mysqli_stmt_execute($statement); 
 
     mysqli_stmt_close($statement);  
 
    } 
 
    function emailAvailable() { 
 
     global $connect, $email; 
 
     $statement = mysqli_prepare($connect, "SELECT * FROM user WHERE email= ?"); 
 
     mysqli_stmt_bind_param($statement, "s", $email); 
 
     mysqli_stmt_execute($statement); 
 
     mysqli_stmt_store_result($statement); 
 
     $count = mysqli_stmt_num_rows($statement); 
 
     mysqli_stmt_close($statement); 
 
     if ($count < 1){ 
 
      return true; 
 
     }else { 
 
      return false; 
 
     } 
 
    } 
 
    $response = array(); 
 
    $response["success"] = false; 
 
    if (emailAvailable()){ 
 
     registerUser(); 
 
     $response["success"] = true; 
 
    } 
 
    
 
    echo json_encode($response); 
 
    ?>

,这就是我的RegisterActivity.java文件:

package com.example.gustavo.loginregister; 
 

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

 
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 RegisterActivity extends AppCompatActivity { 
 

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

 
     final EditText edtNome = (EditText) findViewById(R.id.edtNome); 
 
     final EditText edtSobrenome = (EditText) findViewById(R.id.edtSobrenome); 
 
     final EditText edtEmail = (EditText) findViewById(R.id.edtEmail); 
 
     final EditText edtSenha = (EditText) findViewById(R.id.edtSenha); 
 
     final Button btnRegistrar = (Button) findViewById(R.id.btnRegistrar); 
 

 
     btnRegistrar.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       final String name = edtNome.getText().toString(); 
 
       final String lastname = edtSobrenome.getText().toString(); 
 
       final String email = edtEmail.getText().toString(); 
 
       final String password = edtSenha.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, lastname, email, password, responseListener); 
 
       RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
 
       queue.add(registerRequest); 
 
      } 
 
     }); 
 
    } 
 
}

而且,一个是我的RegisterRequest.java文件:

package com.example.gustavo.loginregister; 
 

 
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="https://wavecheckapp.000webhostapp.com/Register.php"; 
 
    private Map<String, String> params; 
 

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

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

我在做什么错?我已经检查了很多次...没有INT参数,一切都是STRING。数据库位于utf8_unicode_ci上。名称和姓氏和密码正在完美存储。在数据库中,参数是VARCHAR类型。

回答

2

简单的错误,您将mysqli_stmt_bind_param中的电子邮件地址字段与i混合在一起,而不是s

变化,

mysqli_stmt_bind_param($statement, "ssis", $name, $lastname, $email, $passwordHash); 

要,

mysqli_stmt_bind_param($statement, "ssss", $name, $lastname, $email, $passwordHash); 

我不确定如何mysqli注塑参数,您所提供的类型,但是当你运行下面的代码输出为0

<?php 
echo (int) '[email protected]'; ---> 0 
?> 
+0

泰南斯,你救了我的命。我在Android Studio中编程时有点不习惯,所以我真的不知道这个“ssis”的含义。现在我知道了,谢谢你:) –

+1

@GustavoContreiras没问题,首先请查阅[documentation](http://php.net/manual/en/mysqli-stmt.bind-param.php)。考虑接受我的答案,如果它有帮助。 – Script47

相关问题