【问题标题】:how to disable form button in an if condition in a loop如何在循环中的if条件中禁用表单按钮
【发布时间】:2020-03-30 08:51:43
【问题描述】:

我有一个页面,其中从单个表中显示多个表单,相同的表单但不同的值带有一些输入,每个表单的最后一个按钮。

当特定值返回特定数量时,有什么方法可以禁用特定表单的按钮?

就像我通过 foreach 循环从表格中获取数据以显示在页面上一样:

$userID = $_SESSION['username']['UserID'];
$query = "Select * from tbl_packages";

$result = mysqli_query($conn,$query);
$num = mysqli_num_rows($result);
mysqli_close($conn);

foreach($result as $data):

    $PkgID = $data['id'];
    $PkgAmount = $data['amount'];
    $PkgFees = $data['fees'];
    $PkgPeriod = $data['period'];
    $ReturningAmount = $data['returnAmount'];
?>
<form 
    action="" 
    class="form-inline" 
    method="POST" 
    id="buyPackage-init"
>
    <input 
        class="form-control form-control-user" 
        name="PkgID" 
        id="PackagegID" 
        value=<?php echo $PkgID?> 
        readonly
    >
    <!-- and more inputs like above... -->
</form>
<?PHP 
    endforeach;
?>

然后我从第二个表中选择存储的表单值,以循环检查表中是否已经存在表单数据,如下所示:

$queryCheckPackage = "select status from tbl_lendinglogs where UserID = '$userID'";
$resultCheckPackage = mysqli_query($conn,$queryCheckPackage);
$numCheckPackage = mysqli_num_rows($resultCheckPackage);
$FetchCheckPackage = mysqli_fetch_array($resultCheckPackage);

$value = null;
foreach($resultCheckPackage as $row)
{
    if($row['status'] == 1) {
        //echo $row['status'];
        $value = "disabled";
    } else {
        $value = "enabled";
        //echo "enabled <BR>";
    }                                   
}

mysqli_close($conn);

然后是标签前表单中的按钮:

<input 
    class="btn btn-primary btn-user btn-block" 
    onclick="return confirm('Confirm befor buy?');" 
    type="submit" 
    id="btn" 
    data-target="#buyPackage" 
    value="Invest" 
    name="bttn-order" 
    <?php echo $value ?>
/>

现在发生的事情是所有按钮都被禁用,而表中存储了两个表单 1 表单数据状态为 0,第二个状态为 1。我想检查所有状态,然后禁用特定表单的状态按钮在存储形式表中为 1。

有没有可能这样做?通过在互联网上长时间挖掘有关此信息的信息,我感到很糟糕。我自己尝试了很多,但它禁用了所有按钮,而在循环中有两个状态值是“0”和“1”。

这是使用 foreach 循环的查询

$userID = $_SESSION['username']['UserID'];                          
$query = "Select * from tbl_packages";
$result = mysqli_query($conn,$query);
$num = mysqli_num_rows($result);


//$buttons = [];

$pkgStatus = null;
$PkgID = 0;
foreach($result as $data):                          
$PkgID = $data['id'];
$PkgAmount = $data['amount'];
$PkgFees = $data['fees'];
$PkgPeriod = $data['period'];
$ReturningAmount = $data['returnAmount'];


$queryCheckPackage = "select * from tbl_lendinglogs where UserID = '$userID' and pkg_id = '$PkgID'";
$resultCheckPackage = mysqli_query($conn,$queryCheckPackage);
$numCheckPackage = mysqli_num_rows($resultCheckPackage);
$FetchCheckPackage = mysqli_fetch_array($resultCheckPackage);
foreach($resultCheckPackage as $row):
$pkgStatus = $row['status'];

?>

这是按钮:

<input class="btn btn-primary btn-user btn-block" onclick="return confirm('Confirm befor buy?');" type="submit" id="btn" data-target="#buyPackage" value="Invest" name="bttn-order" <?php if ($pkgStatus == 1) echo 'disabled="disabled"' ?>/>

然后我在每个末尾添加了 end :

<?php endforeach; endforeach;?>

非常感谢@Wimanicesir,您帮了很多忙。

【问题讨论】:

  • 这永远行不通?您检查每一行的状态,但覆盖您保存它的变量。因此最后一个状态将应用于所有行。
  • 请让您的问题更清楚。目前尚不清楚您需要实现什么。
  • @MerianosNikos,很清楚他想要什么?
  • @Wimanicesir 先生,您能否给我一个示例,说明我需要更改的地方以及它将如何工作?是的,我正在检查每一行,并且我已经通过 echo $row of foreach 循环在循环中检查了数据,并且所有值都在出现,但它在最后一行值上工作。虽然我需要对所有价值观都这样做。因此,如果您不介意试一试并展示一个示例,那么这可能对更多人有所帮助。
  • @Ali 我在答案中提供了更详细的解释。如那里所述,如果您将 $resultCheckPackage 中的数据提供给我,我可以提供更多帮助

标签: php loops for-loop foreach


【解决方案1】:

您的问题是所有不同行之间的映射以及它们是启用还是禁用。

此代码循环您的数据并检查该字段并将其保存在名为 $value 的变量中:

$value = null;

foreach($resultCheckPackage as $row) {
    if($row['status']) {
        $value = "disabled";
    } else {
        $value = "enabled";
    }                                    
}

但是,您每次都会覆盖值。所以 $value 将是该查询的最后一个结果。

数据存在一个 id 和一个布尔值。我们想将这两者结合起来,以便稍后调用它们。

所以:

$buttons = [];

foreach($resultCheckPackage as $row) {
    if($row['status']) {
        $buttons[$row['id']]= TRUE;
    } else {
        $buttons[$row['id']]= FALSE;
    }                                    
}

这将产生一个基于键的数组,例如:

$buttons['package_id_1' => TRUE, 'package_id_2' => FALSE]

现在最后一步是在右侧按钮上调用正确的 id。

<input 
    class="btn btn-primary btn-user btn-block" 
    onclick="return confirm('Confirm befor buy?');" 
    type="submit" 
    id="btn" 
    data-target="#buyPackage" 
    value="Invest" 
    name="bttn-order" 
    <?php if ($buttons['correct_id']) echo 'disabled="disabled"' ?>
/>

这不是复制粘贴证明,但我想你明白了 :)

我还建议研究某种模板语言。这使得从后端到前端呈现数据更加容易。

如:https://handlebarsjs.com/

【讨论】:

  • 这是我的查询:"select status from tbl_lendinglogs where UserID = 1" 这是数据结果:prnt.sc/rpio6j 这是我的名为 tbl_lendinglogs 的存储包表的表结构:prnt.sc/rpiphk 和这是 tbl_packages,我从中通过 foreach 循环获取要在页面上显示的包数据:prnt.sc/rpiqae 这些是数据。如果您需要更多,请告诉我,我将提供您需要了解的所有内容。谢谢
  • 所以你有一个禁用按钮和一个启用用户 1 的按钮,这是正确的吗?
  • 是的,结果中有两行状态。我们必须将包与结果数据进行匹配,然后检查页面上的每个包,以根据状态禁用和启用包按钮。就像如果包 1 在 tbl_lendinglogs 中并且状态为 1,并且包 2 也在表中并且状态为 0,那么包 1 的按钮将被禁用,而包 2 的按钮将保持启用状态。这是我真正想要的。
  • 结果中有名字吗?例如,包含“package1”或“package2”
  • 结果查询中有包id
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2022-07-21
相关资源
最近更新 更多