PHP多提交按钮操作时状态变量互斥被重置问题咨询
问题原因
- 状态没有持久化存储:你每次请求执行脚本时都直接将
$damen、$herren初始化为0,也没有把修改后的状态存入已开启的SESSION中,所以每次点击按钮提交请求后,之前的状态都会被重置,仅当前点击按钮对应的变量会被修改,另一个变量保持初始化的0值。 - 判断逻辑互斥:你使用
elseif串联所有按钮的判断逻辑,意味着每次请求只会触发第一个匹配到的条件,即使后续还有符合的条件也不会执行,进一步阻断了两个状态独立修改的可能。
修复方案
把状态存入SESSION持久化,同时拆分互斥的判断逻辑即可,修正后的代码如下:
<?php session_start(); $arbeit = $_GET["arbeit"]; echo "Angelegte Prüfung: "; echo $arbeit; // 仅首次访问时初始化状态,后续从SESSION读取 if (!isset($_SESSION['damen'])) { $_SESSION['damen'] = 0; } if (!isset($_SESSION['herren'])) { $_SESSION['herren'] = 0; } // 拆分判断逻辑,两个状态独立修改,不用elseif互斥 if (array_key_exists('add_Fem',$_POST)) { $_SESSION['damen'] = 1; // BESETZT DAMEN } if (array_key_exists('sub_Fem',$_POST)) { $_SESSION['damen'] = 0; // Reset counter } if (array_key_exists('add_Mal',$_POST)) { $_SESSION['herren'] = 1; // BESETZT HERREN } if (array_key_exists('sub_Mal',$_POST)) { $_SESSION['herren'] = 0; // Reset counter } // 读取SESSION中的状态赋值给变量 $damen = $_SESSION['damen']; $herren = $_SESSION['herren']; ?> <form method='post'> <input name='add_Fem' type="submit" value='Damen' class="button"> </form> <form method='post'> <input name='sub_Fem' type="submit" value='Reset Damen' class="button"> <h3><em> <?php if ($damen == 1) { echo "DAMEN BESETZT!"; } else { echo "DAMEN FREI!"; } ?> </em></h3> </form> <form method='post'> <input name='add_Mal' type="submit" value='Herren' class="button"> </form> <form method='post'> <input name='sub_Mal' type="submit" value='Reset Herren' class="button"> <h3><em> <?php if ($herren == 1) { echo "HERREN BESETZT!"; } else { echo "HERREN FREI!"; } ?> </em></h3> </form>
补充说明
你之前用isset也没解决的核心原因就是没有把状态存在SESSION里,每次请求都会重置初始值,和用isset还是array_key_exists没有关系,只要把状态持久化到SESSION中,两个判断函数都可以正常使用。
内容的提问来源于stack exchange,提问作者dr.gonzo
相关产品推荐
相关产品推荐

