我用session函数当计数器,计算还剩多少次密码输入次数,可是里面的值始终是1不变,结果也始终是“还剩3次机会”,请问该如何解决?
<?php
session_start();
$_SESSION['A']=1;
?>
<?php
if ($_POST) {
if($_POST["type"]=="学生"){
$rsRow = db_get_row("select * from user where account='". $_POST["account"] ."'");
if ($rsRow['password'] == $_POST["password"]){
$_SESSION["id"] = $rsRow['id'];
$_SESSION['usercategoryid'] = $rsRow['categoryid'];
$_SESSION['usercategory1id'] = $rsRow['category1id'];
$_SESSION['nickname'] = $rsRow['nickname'];
$_SESSION['type2'] = "学生";
urlMsg("登录成功", "user/index.php");
die;}
else {
$_SESSION['A']=$_SESSION['A']+1;
switch($_SESSION['A']){
case 1:goBakMsg("密码错误,你还有4次机会");break;
case 2:goBakMsg("密码错误,你还有3次机会");break;
case 3:goBakMsg("密码错误,你还有2次机会");break;
case 4:goBakMsg("密码错误,你还有1次机会");break;
default:goBakMsg("请稍后重试");
}
}
}
基于Monster 组和GPT的调写:
下面是修改后的代码示例:
<?php
session_start();
// 检查是否已经设置了 $_SESSION['A'] 的值,如果没有则将其设置为 1
if (!isset($_SESSION['A'])) {
$_SESSION['A'] = 1;
}
if ($_POST) {
if ($_POST["type"] == "学生") {
$rsRow = db_get_row("select * from user where account='" . $_POST["account"] . "'");
if ($rsRow['password'] == $_POST["password"]) {
$_SESSION["id"] = $rsRow['id'];
$_SESSION['usercategoryid'] = $rsRow['categoryid'];
$_SESSION['usercategory1id'] = $rsRow['category1id'];
$_SESSION['nickname'] = $rsRow['nickname'];
$_SESSION['type2'] = "学生";
urlMsg("登录成功", "user/index.php");
die;
} else {
$_SESSION['A'] = $_SESSION['A'] + 1;
switch ($_SESSION['A']) {
case 1:
goBakMsg("密码错误,你还有4次机会");
break;
case 2:
goBakMsg("密码错误,你还有3次机会");
break;
case 3:
goBakMsg("密码错误,你还有2次机会");
break;
case 4:
goBakMsg("密码错误,你还有1次机会");
break;
default:
goBakMsg("请稍后重试");
}
}
}
}
?>
这个修改应该能够解决你遇到的问题,让你的 session 计数器正常工作。
这段代码存在几个问题:
1,db_get_row函数未定义,需要先引入相应的数据库操作函数库。
2,if ($_POST) 这行代码需要判断是否有表单提交,可以改为 if ($_SERVER['REQUEST_METHOD'] == 'POST') 。
3,die 函数需要加上括号,正确写法为 die()。
4,在 default 分支里的 goBakMsg 函数也需要定义或者引入相应的函数库。
5,最后,不应该在这里输出密码错误的次数,而应该在页面的表单上输出错误次数。
下面是修改后的代码: