Php 如果数据与数据库不匹配,如何引发无效用户名或密码错误?

Php 如果数据与数据库不匹配,如何引发无效用户名或密码错误?,php,Php,我对php非常陌生,我有一个基于MySql php的后端,它连接到一个react本地应用程序 我正在处理无效的用户名和密码,但正确的用户名/密码和错误的用户名/密码,反之亦然,这是应用程序被强制关闭崩溃的原因,因为它无法处理输入的数据与数据库中的数据不匹配 我能知道我怎样才能做到这一点吗 下面是我的php代码 <?php include 'DBConfig.php'; $con = mysqli_connect($HostName,$HostUser,$HostPass,$Databa

我对php非常陌生,我有一个基于MySql php的后端,它连接到一个react本地应用程序

我正在处理无效的用户名和密码,但正确的用户名/密码和错误的用户名/密码,反之亦然,这是应用程序被强制关闭崩溃的原因,因为它无法处理输入的数据与数据库中的数据不匹配

我能知道我怎样才能做到这一点吗

下面是我的php代码

<?php

include 'DBConfig.php';

$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

$json = file_get_contents('php://input');

$obj = json_decode($json,true);

$email = $obj['email'];

$password = $obj['password'];

$Sql_Query = "select * from UserRegistrationTable where email = '$email' and password = '$password' ";

$check = mysqli_fetch_array(mysqli_query($con,$Sql_Query));


if(isset($check)){

 $SuccessLoginMsg = 'Data Matched';

$SuccessLoginJson = json_encode($SuccessLoginMsg);

echo $SuccessLoginJson ; 

$response=array();
array_push($response,array("name"=>$check[1], "email"=>$check[2], "password"=>$check[3]);

echo json_encode(array("Details"=>$response));     
}

 else{

$InvalidMSG = 'Invalid Username or Password Please Try Again' ;

$InvalidMSGJSon = json_encode($InvalidMSG);

 echo $InvalidMSGJSon ;

 }

 mysqli_close($con);
?>

嗨,我更正了你的代码,请检查下面-

<?php

include 'DBConfig.php';

$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

$json = file_get_contents('php://input');

$obj = json_decode($json,true);

$email = $obj['email'];

$password = $obj['password'];

$Sql_Query = "select * from UserRegistrationTable where email = '$email' and password = '$password' ";

$res = mysqli_query($con,$Sql_Query);


if(mysqli_num_rows($res)> 0){

$check = mysqli_fetch_array($res);
 $SuccessLoginMsg = 'Data Matched';

$SuccessLoginJson = json_encode($SuccessLoginMsg);

echo $SuccessLoginJson ; 

$response=array();
array_push($response,array("name"=>$check[1], "email"=>$check[2], "password"=>$check[3]);

echo json_encode(array("Details"=>$response));     
}

 else{

$InvalidMSG = 'Invalid Username or Password Please Try Again' ;

$InvalidMSGJSon = json_encode($InvalidMSG);

 echo $InvalidMSGJSon ;

 }

 mysqli_close($con);
?>

我强烈建议您研究参数化查询。您当前的语句容易受到一个非常简单的黑客调用SQL注入的攻击。关于SQL注入是什么,请参见示例3。有关如何避免的信息,请参见此。切勿以明文形式存储密码!。只存储密码哈希!使用PHP的和。如果您运行的PHP版本低于5.5,我真的希望您不是,那么您可以使用来获得相同的功能。@Tyler这只是一个我用于测试的演示项目。将用高级安全连接替换此连接,但从现在起,我需要处理密码错误。我可以知道如何实现它吗?@MagnusEriksson这只是一个演示项目,我正在使用它进行测试。将用高级安全连接替换此连接,但从现在起,我需要处理密码错误。“我可以知道我该如何实现它吗?”阿披舍克达斯·德夫拉·维尔玛的回答是一个很好的选择。他更改的是你的isset$支票,使用mysqli_num_rows方法。一个好的答案包括对你更改的内容和原因的正确解释。我可以知道这与现有的有什么不同吗?@MagnusEriksson希望我对这个问题的编辑很快就会完成。因为它添加了关于更改内容的解释。这不起作用。如果我使用了错误的密码,应用程序就会崩溃。@Tyler-公平地说,我们需要的信息比我在原始问题中遇到的困难还要多。我们实际上根本不知道真正的问题是什么。例如,如果前端希望返回JSON,那么如果它只获取JSON编码的字符串,它就会抱怨。另外,成功部分实际上输出了两个字符串,这也将使响应无效。