这是我的php代码,用于用户注册,如果用户不存在,那么插入用户名和密码,如果用户存在,返回'verify' => 'exists',但是在实际运行过程中,先清空数据库,然后发送请求,echo(mysqli_num_rows($result) );输出1,PHP既返回了'verify' => 'exists',又向数据库插入了数据,这是为什么?
如果我把 条件if($a == 0)改为 if($a == 1),清空数据库,然后发送请求,那么输出的结果还是{"verify":"exists"},但是echo(mysqli_num_rows($result) );竟然输出0 这俩种写法都是输出{"verify":"exists"},但是还向数据库插入了数据,但是输出的内容并没有输出echo('$a == 0');echo('$a == 1');而是直接执行了$result1 = $conn->query($sql1);奇了怪了
if ($type == "sign") {
$sql = "SELECT userid FROM user WHERE userid = '{$userid}'";
$result = $conn->query($sql);
print_r($result);
echo(mysqli_num_rows($result) ); //在数据库清空的情况下,如果条件为$a == 0,这里输出1,如果条件为$a == 1,这里竟然输出0,我擦
$a = mysqli_num_rows($result);
if ($a == 0) {
echo('$a == 0');
$sql1 = "INSERT INTO user (userid,password) VALUES ('{$userid}','{$uesrpassword}')";
$result1 = $conn->query($sql1);
$token = $token_management->get_token($userid);
$res = array(
'verify' => 'ok',
'token' => $token
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
} else {
echo('$a != 0');
$res = array(
'verify' => 'exists',
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
}
}
if ($type == "sign") {
$sql = "SELECT userid FROM user WHERE userid = '{$userid}'";
$result = $conn->query($sql);
print_r($result);
echo(mysqli_num_rows($result) );
$a = mysqli_num_rows($result);
if ($a == 1) {
echo('$a == 1');
$sql1 = "INSERT INTO user (userid,password) VALUES ('{$userid}','{$uesrpassword}')";
$result1 = $conn->query($sql1);
$token = $token_management->get_token($userid);
$res = array(
'verify' => 'ok',
'token' => $token
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
} else {
echo('$a != 1');
$res = array(
'verify' => 'exists',
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
}
}
第一,你这思路看着貌似有点问题,用户注册:无非是判断此用户注册的用户名是否存在?如果存在直接返回假,不存在直接进行注册!
方案如下:
获取用户注册提交的注册用户名服务器得到进行判断,参考代码如下(写法各有不同,代码仅供参考!)下面利用你的代码进行修改如下:
if ($type == "sign") {
$sql = "SELECT userid FROM user WHERE userid = '$userName'";//查询数据库语句
$result = $conn->query($sql);//开始查询
while ($arr = $rst->fetch_assoc())//循环取出查询结果
{
if($uname==$arr['userName'])//判断数据库用户名字段是否存在现在注册用户的注册用户名
{
return 0;//用户名已经存在会执行这里 直接返回 0;具体看你个人喜好
}
}
//如果代码执行到这里了 说明数据库用户名字段并没有这个用户名,说明可以注册
//直接进行你的插入数据库操作即可 ,如有疑问请继续!
这就有点奇怪了,逻辑看着没什么问题,要不这样
你先把插入数据库的语句注释了,如果$a为0就返回0,如果是1,就返回1,看看你的数据还有数据库是什么样子的
换了php版本还是有问题
echo json_encode($res, JSON_UNESCAPED_UNICODE);
改成
return json_encode($res, JSON_UNESCAPED_UNICODE);