【问题标题】:Counting table results: A PHP switch case that uses a radio button value计数表结果:使用单选按钮值的 PHP 开关案例
【发布时间】:2020-01-03 07:22:27
【问题描述】:

我编辑了帖子以便更好地理解。这是我作为学生实习生的第一个项目。它是一种设备监控系统,用于保存计算机设备的记录。这是包含过滤选项和显示计算机设备列表的表格的页面中的代码的一部分。过滤选项包含几个单选按钮,它们属于两个类别,即状态和条件。请参阅帖子末尾的两个类别的组成部分。组件是单选按钮的值。

当单击另一个单选按钮时页面会重新加载,类似于 Facebook 搜索。我希望计算每个条件和状态的设备数量,以显示在单选按钮标签旁边。但是,状态单选按钮会影响设备的计数。例如,New EQ 是刚刚进入库存的设备类型。选中新的EQ按钮并检查可用/未分配的按钮时,将过滤表格结果,将显示包含具有新的状态的结果以及可用/未分配的条件。表格结果将被统计并在单选按钮标签旁边输出,该标签告诉用户有多少设备是“新”“可用/未分配”。当点击其他状态单选按钮时,例如Old EQ按钮,标签旁边显示的可用/未分配设备的数量将根据返回的行数而变化,因为用户将请求更改为输出设备”旧”和“可用/未分配”。顺便说一句,状态和条件是同一个表中的列。这将发生在所有单选按钮上。如果用户单击 Condition 类别下的另一个单选按钮,例如 Assigned EQ 按钮,则标签旁边显示的 Available/Unassigned 的数量将变为 0 或零,因为用户请求表结果应显示新且已分配的设备,未请求可用/未分配的设备。如果用户点击“所有条件”按钮,它将计算包含ALL条件的表格行,其行上也有数据a New强>状态。显示表格结果的过滤过程已经在运行。我现在正在输出单选按钮标签旁边的数量。

<?php

switch($state AND $condition){
    case $state=="allstate" AND $condition=="allcondition":
        $sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned'";
        break;

    case $state=="new" AND $condition=="allcondition":
        $sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='new'";
        break;

    case $state=="old" AND $condition=="allcondition":
        $sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='old'";
        break;

    case $state=="Unknown state" AND $condition=="allcondition":
        $sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='Unknown state'";
        break;

    case $state=="Unknown state" AND $condition=="Available/Unassigned":
        $sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='Unknown state'";
        break;
}
         //Code above is incomplete
$result3=mysqli_query($conn,$sql3);
$count=mysqli_num_rows($result3);
echo "<label style='color:red;'><strong>".$count."</strong></label>";

?>

分类:

状态:所有状态,新,旧,未知状态

状况:所有状况、可用/未分配、维修、缺少零件、缺少 eq、有缺陷、翻新、未知状况

【问题讨论】:

  • 您不需要开关盒。您可以将 eq_conditioneq_state 替换为值。使用转义值/准备好的语句来避免 SQL 注入。
  • 你没有一些逻辑规则来构建你的查询吗?如果您有超过 32 种不同的情况来构建具有 2 个参数的查询,那么我认为您的操作方式存在一些逻辑问题
  • 根据您的要求,我认为不需要switch case。我可能错了,但根据你上面的代码,如果 ELSE 就足够了。
  • 我编辑了帖子,因为它不完整,抱歉。

标签: php switch-statement


【解决方案1】:

switch($state AND $condition) 将根据 $state$condition 的值评估为真或假。

所以唯一有用的情况是

  • case true
  • case false
  • case default

在您的情况下,您应该使用 if / else 构造。

更新

因为在 cmets 中询问如何在 switch 构造中编写条件,请参见此处的嵌套代码:

switch ($state)
{
    case "allstate":
        if ($condition == "allcondition")
            $sql3 = "SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned'";
        break;

    case "new":
        if ($condition == "allcondition")
            $sql3 = "SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='new'";
        break;

    case "old":
        if ($condition == "allcondition")
            $sql3 = "SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='old'";
        break;

    case "Unknown state":
        switch ($condition)
        {
            case "Available/Unassigned":
            case "allcondition":
                $sql3 = "SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned' AND eq_state='Unknown state'";
                break;

        }
}

【讨论】:

  • 是否有可能使 switch($state AND $condition) 成为一个真实的案例?
  • 查看您的代码总是正确的,因为 $state 和 $condition 是 not 空字符串。真 AND 真 = 真。
  • 我了解到在我发布的代码中的 case 语句中插入多个 OR 是不可能的。如何在 case 语句中放置多个条件以缩短代码?
  • @jonaspalmiano 您还可以嵌套 switch 语句。然后您可以根据第一种情况创建 or 条件。查看我的答案更新。
【解决方案2】:

你可以试试这个:

<?php
$sql3="SELECT *FROM eq_inv WHERE eq_condition='Available/Unassigned'";

if(in_array($state, ['new', 'old', 'Unknown state']) && in_array($condition, ['allcondition', 'Available/Unassigned'])) {
  $sql3 .=" AND eq_state='".$state."'";
}

$result3=mysqli_query($conn,$sql3);
$count=mysqli_num_rows($result3);
echo "<label style='color:red;'><strong>".$count."</strong></label>";
?>

【讨论】:

    【解决方案3】:

    我正在与你们分享工作代码:

    <label style="font-size:20px;"><strong>Filter Result:</strong></label>
    <?php
    $state=$_SESSION['state'];
    $condition=$_SESSION['condition'];
    echo "<label style='color:red;'>"." "."State:"." ".$state." "."-"." 
    "."Condition:"." ".$condition."</label>";
    ?>
    <br>
    <div class="filters">
    <?php
    }
    ?>
    <script>
      function handleRadio(data){
       window.location="sessionstate.php?state="+data.value;
      }
      function handleRadiocond(data2){
        window.location="sessioncondition.php?condition="+data2.value;
      }
      </script>
    

    其余代码为here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2021-06-27
      • 2021-01-01
      • 2023-03-08
      相关资源
      最近更新 更多