【发布时间】:2018-09-20 05:24:43
【问题描述】:
我的登录代码有什么问题,当我注册时它工作正常并且用户可以成功注册,但是当我尝试登录时,我收到错误“在字符 0 处输入结束”
这是我的 Login.php 代码
<?php
include "connect.php";
if ($_SERVER['REQUEST_METHOD']=='POST') {
$email = $_POST['email'];
$password = $_POST['password'];
$sql = "SELECT * FROM User WHERE email='$email' ";
$response = mysqli_query($conn, $sql);
$result = array();
$result['login'] = array();
if ( mysqli_num_rows($response) === 1 ) {
$row = mysqli_fetch_assoc($response);
if ( password_verify($password, $row['password']) ) {
$index['name'] = $row['name'];
$index['email'] = $row['email'];
array_push($result['login'], $index);
$result['success'] = "1";
$result['message'] = "success";
echo json_encode($result);
mysqli_close($conn);
} else {
$result['success'] = "0";
$result['message'] = "error";
echo json_encode($result);
mysqli_close($conn);
}
}
}
?>
这是我在 android studio (Login.java) 中的登录代码
package com.m99.ml99.everyday;
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.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class Login extends AppCompatActivity {
private EditText email, password;
private Button btn_login;
private TextView link_regist;
private ProgressBar loading;
private static String URL_LOGIN=
"https://hanymina43.000webhostapp.com/Login.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loading = findViewById(R.id.loading);
email = findViewById(R.id.email);
password = findViewById(R.id.password);
btn_login = findViewById(R.id.btn_login);
link_regist = findViewById(R.id.link_regist);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String mEmail = email.getText().toString().trim();
String mPass = password.getText().toString().trim();
if (!mEmail.isEmpty() || !mPass.isEmpty()) {
Login(mEmail, mPass);
} else {
email.setError("Please insert email");
password.setError("Please insert password");
}
}
});
link_regist.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Login.this, Register.class));
}
});
}
private void Login(final String email, final String password) {
loading.setVisibility(View.VISIBLE);
btn_login.setVisibility(View.GONE);
StringRequest stringRequest = new StringRequest(Request.Method.POST,
URL_LOGIN,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String success = jsonObject.getString("success");
JSONArray jsonArray =
jsonObject.getJSONArray("login");
if (success.equals("1")) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object =
jsonArray.getJSONObject(i);
String name =
object.getString("name").trim();
String email =
object.getString("email").trim();
loading.setVisibility(View.GONE);
}
}
} catch (JSONException e) {
e.printStackTrace();
loading.setVisibility(View.GONE);
btn_login.setVisibility(View.VISIBLE);
Toast.makeText(Login.this, "Error " +e.toString(),
Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loading.setVisibility(View.GONE);
btn_login.setVisibility(View.VISIBLE);
Toast.makeText(Login.this, "Error " +error.toString(),
Toast.LENGTH_SHORT).show();
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("email", email);
params.put("password", password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
谁能告诉我我的代码哪里出了问题,我不认为是服务器,因为我在同一台服务器上运行注册,它工作正常谢谢。
【问题讨论】:
-
为什么要标记为
c#? -
警告:您对SQL Injections 持开放态度,应该真正使用参数化Prepared Statements,而不是像那样手动构建查询。特别是因为您根本没有逃避用户输入!
-
请向我们展示完整的错误信息。您还应该使用 Postman 之类的工具测试您的登录脚本(或创建一个简单的 Web 表单以发布到登录脚本)并检查 API 是否按预期工作,或者您是否从中收到任何错误消息。
-
一个建议是确保通过您的代码的所有路由都返回一些结果 - 所以如果
if ($_SERVER['REQUEST_METHOD']=='POST') {失败,返回一些内容说使用了无效方法等。 -
我尝试使用 Postman 测试 api,这是我收到的消息
通知:未定义索引:/storage/ssd5/239/ 中的电子邮件4104239/public_html/Login.php 第 6 行
注意:未定义索引:/storage/ssd5 中的密码/239/4104239/public_html/Login.php 第 7 行