PHP代码逻辑异常:仅需acc=1时修改组却两种情况都执行
问题排查与修正方案
我帮你梳理下代码里的几个关键问题,这就是导致不管acc是0还是1都会执行修改组操作的核心原因:
1. 赋值运算符误用成比较运算符
你在条件判断里用了=(赋值操作)而不是==(松散比较)或者===(严格比较):
if($acc=1){ // 这里是把1赋值给$acc,条件永远返回true // ... } elseif($acc=0){ // 同理,这行是赋值操作,永远不会被执行到
这种写法会让第一个if条件永远成立,所以不管数据库里的acc实际值是多少,每次都会触发修改组的逻辑。
2. 结果集获取方式错误且未赋值
你调用了mysql_fetch_row($rs)但没有把结果保存到$row变量里,而且mysql_fetch_row返回的是索引数组,不能用关联键名$row['acc']来取值,应该用mysql_fetch_assoc来获取关联数组:
$rs=mysql_query($req) or die(mysql_error()); // 原代码只是判断有没有结果,但没保存结果到变量 $row = mysql_fetch_assoc($rs); // 正确获取关联数组结果 if ($row) { // 判断是否成功取到数据 $acc = $row['acc']; // 改用比较运算符判断acc值 if($acc == 1){ // 修改组的逻辑 } elseif($acc == 0){ // 拒绝消息的逻辑 } }
3. 额外语法问题:acc=0时的UPDATE语句
你在$req2里的WHERE条件关联了demch表,但UPDATE语句里没有引入这个表,会导致SQL语法错误,需要改成JOIN关联的写法:
$req2="UPDATE etudiant JOIN demch ON etudiant.dem_id=demch.dem_id SET etudiant.message='votre demande est refusée'";
修正后的完整代码片段
<?php include('conn.php'); if(isset($_GET['Valider'])) { $req="select acc from demch "; $rs=mysql_query($req) or die(mysql_error()); $row = mysql_fetch_assoc($rs); // 获取关联数组结果 if ($row) { $acc = $row['acc']; if($acc == 1){ // 用比较运算符判断acc值 $req1= "UPDATE etudiant JOIN demch ON etudiant.dem_id=demch.dem_id SET etudiant.groupe=demch.grpdes"; $rs1=mysql_query($req1) or die (mysql_error()); } elseif($acc == 0){ // 用比较运算符判断acc值 $req2="UPDATE etudiant JOIN demch ON etudiant.dem_id=demch.dem_id SET etudiant.message='votre demande est refusée'"; $rs2=mysql_query($req2) or die (mysql_error()); } } } ?>
额外建议
mysql_*系列函数已经被PHP官方废弃多年,安全性和兼容性都很差,建议尽快换成mysqli_*或者PDO来操作数据库。- 如果
demch表有多条记录,当前查询只会处理第一条数据,你可能需要添加条件来指定具体的dem_id,比如select acc from demch where dem_id = ?(用预处理语句可以避免SQL注入风险)。
内容的提问来源于stack exchange,提问作者avery
相关产品推荐
相关产品推荐

