【问题标题】:HTML / Ajax / PHP - how to check if/which checkboxes are checked, and perform an different action for each oneHTML / Ajax / PHP - 如何检查是否/哪些复选框被选中,并为每个复选框执行不同的操作
【发布时间】:2018-01-08 23:42:05
【问题描述】:

如上所述,我正在尝试创建一个简单的 html / PHP 页面。单击提交按钮时,我希望根据选中的复选框运行不同的 SQL 代码。SQL 代码非常简单,它只是为每个复选框显示一个不同的表格,但我不确定如何检查复选框是否被选中。我的 HTML 代码如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Ricky Deacon, CSIS3380 Assignment 3. Show Table.html</title>
</head>
<body>
    <h1>Book-O-Rama Catalog Search</h1>

    <form action="showtab.php" method="post">
        <fieldset><legend>Which Tables Would You Like To View?</legend>
            <p>                 
                Customers 
                <input type="checkbox" name="table" value="cust"/>&nbsp; &nbsp; &nbsp;
                Orders 
                <input type="checkbox" name="table" value="ord"/>&nbsp; &nbsp; &nbsp;
                Order Items 
                <input type="checkbox" name="table" value="itms"/>&nbsp; &nbsp; &nbsp;
                Books
                <input type="checkbox" name="table" value="book"/>&nbsp; &nbsp; &nbsp;
                Book Reviews
                <input type="checkbox" name="table" value="brev"/> <br /><br />
                <input type="submit" name="submit" value="Show Tables">
            </p>
        </fieldset>                         
    </form>
</body>

我还没有写 PHP 响应,因为我不知道从哪里开始

谢谢

【问题讨论】:

    标签: php html sql ajax


    【解决方案1】:

    这是您需要做的更完整的答案:

    已编辑 - 还包括您的输入需要的样子。

    <input type="checkbox" name="table[]" value="cust"/>Orders 
    <input type="checkbox" name="table[]" value="ord"/>Order Items 
    <input type="checkbox" name="table[]" value="itms"/>Books
    <input type="checkbox" name="table[]" value="book"/>Book Reviews
    <input type="checkbox" name="table[]" value="brev"/>
    
    <?php
        // Check that the values you're trying to access have actually been posted
        // 'table' is the 'name' of your input
        if (!empty($_POST['table'])) {
            // If it's not empty then set the variable
            $tables = $_POST['table'];
        }
        // If it is empty (Your form didn't submit this input)
        else {
            // end processing or return to the previous page
            return false;
        }
    
        // You will now need to loop through the array
        foreach ($tables as $table) {
            switch($table) {
                case 'cust':
                    // Run Cust SQL Query
                    break;
                case 'ord':
                    // Run ord SQL Query
                    break;
                case 'itms':
                    // Run itms SQL Query
                    break;
                case 'book':
                    // Run book SQL Query
                    break;
                case 'brev':
                    // Run brev SQL Query
                    break;
            }
        }
    ?>
    

    作为参考,为什么在这种情况下最好使用 switch 案例而不是 if/else:

    Is "else if" faster than "switch() case"?

    【讨论】:

    • giolliano sulit - 这个响应看起来像我需要的。如果我想包括多个复选框被选中的可能性,我猜测 if / else 会比 switch / case 更合适,但是我将如何从多个框中获取选中的值......我需要分配给多个变量?
    • 哦,好吧,看来我把它误读为“无线电”输入了。因为您将所有复选框命名为相同,所以您需要将它们重命名为 name[],因为它们需要是一个数组。
    • @RickD 我已经更新了我的答案,这应该是你需要的,如果是,请接受答案:)
    • 我可以做 if > if > if 语句,而不是 else if 语句,否则我需要不断重复相同的代码,同时检查越来越多的复选框。我尝试使用 if 语句(不使用 else if)编写代码,但它只显示最后一个复选框的表格
    • if > if 语句的问题在于它可能匹配多次 次。例如,如果有人选择了cust 和order。以下 if 语句将返回 true 并运行:if ($table == 'cust') { // do something } if ($table == 'cust' &amp;&amp; $table == 'order') { // do something }。这不是您想要发生的行为。如果您接受这个答案,请告诉我,谢谢。
    【解决方案2】:

    您可以在 showtab.php 中检查是否选中了复选框。提交表单时,输入的“值”属性将发布到“名称”属性。如果复选框为空,则不会发布任何内容。

    <?php
        if(isset($_POST['table']) && $_POST['table'] == 'cust') {
          // Show table here
        }
        else {
          // Do something else here.
        }    
    ?>
    

    您的复选框需要唯一的名称。

    【讨论】:

    • 你可能不想要 else,只需要几个 if 语句来显示多个不同的表。 :)
    • 在下面检查我的答案,他不需要每个复选框的唯一名称,他只需要将其作为数组传递,name="table[]",然后在他的 PHP 页面中循环。
    【解决方案3】:

    您可以在您的showtab.php 中使用$_POST['table'] 获取所有检查值。

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2019-01-12
      相关资源
      最近更新 更多