表格内的html表格和按钮不起作用

Posted

技术标签:

【中文标题】表格内的html表格和按钮不起作用【英文标题】:html table inside form and the buttons ARE NOT working 【发布时间】:2021-02-17 03:38:21 【问题描述】:

在我提出这个问题之前,我用表格和表格搜索了其他类似的问题,但我没有找到解决方案。正如您从我的代码中看到的那样,我不知道为什么,但这不起作用..我有一个表格,里面有一个form method='post'..当我单击降序或升序按钮时,什么都没有发生,我没有知道为什么 ?有什么建议吗?

<form method="post">
<table class="table table-bordered table-striped">
    <thead>
    <tr>

        <th scope='col'>Id</th>
        <th scope='col'>Name
                            <button class="btn btn-info btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                Sort by
            </button>
            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                <button name="nameDescending" type="submit" class="dropdown-item btn btn-info">Descending</button>
                <button name="nameAscending" type="submit" class="dropdown-item btn btn-info">Ascending</button>
            </div>
        </th><!-- ORDER BY "name" -->

        <th scope='col'>Last</th><!-- ORDER BY "lastname" -->
        <th scope='col'>Email</th><!-- ORDER BY "email" -->
        <th scope='col'>Telephone</th><!-- ORDER BY "telephone" -->
    </tr>


    </thead>
    <tbody>


    <?php
   

    if(isset($_POST['nameDescending']))
        $sql = "SELECT * FROM cust_information ORDER BY name DESC";
    

    if(isset($_POST['nameAscending']))
        $sql .= "SELECT * FROM cust_information ORDER BY name ASC";
    

    $result = mysqli_query($conn,$sql);
    $rowCount = mysqli_num_rows($result);

    if($rowCount > 0)
        while($row = mysqli_fetch_assoc($result))
            echo "<tr>
                          <td scope='row'>$row['auto_id']</td>    <!--difference between class='row' / scope='row'-->
                          <td>$row['name']</td>
                          <td>$row['lastname']</td>
                          <td>$row['email']</td>
                          <td>$row['telephone']</td>
                  </tr> ";
        
     else
        echo "<tr> <td colspan='5'>Nothing was found!</td> </tr> ";
    
    ?>
    </tbody>
</table>

</form>

【问题讨论】:

这能回答你的问题吗? Is it valid to have a html form inside another html form? 对我来说工作正常,页面重新加载。小心你在表单中制作了另一个表单标签 &lt;form&gt; 里面有一个&lt;form&gt; 你是对的,我删除了第二个 form 但仍然无法正常工作 大概是@ThunderBoy,这意味着您的一个或其他查询正在工作,否则您的行数不会为 ` > 0`。我有一种感觉,您的问题在于您检查是否,然后再检查一次 - 而不是 if/else。你做过调试吗?提交了哪些帖子值,正在生成哪个查询,准备执行查询时的 sql 字符串是什么............ 【参考方案1】:

我看不出您的代码有什么问题会阻止表单提交。但是,我可以看到你的编码风格有很多问题。今天工作很安静,所以...

这里最大的罪过是尽可能多地混合 PHP 和 HTML。始终将尽可能多的代码放在文件顶部,与 HTML 分开。 (在适当的代码库中,这些文件将是单独的文件,但我认为这对您来说是一个学习练习,而不是一个专业项目。)对于这样的数据库驱动页面,这意味着立即进行查询并将数据收集到一个数组中,所以进入你的 HTML 的唯一东西就是一些简单的控制结构和回显。

将alternative syntax 用于控制结构允许单行PHP 侵入HTML,不需要大括号,当然也不需要回显HTML 的巨大块,您必须担心是否正确引用引号。 Short echo tags 也让事情变得更干净。 (对于那些您绝对必须回显一堆 HTML 的罕见情况,请使用 heredoc。)

根据约定和 RFC,POST 请求应该在服务器上实现一些更改,例如存储或更新记录。由于这里不是这种情况,因此您确实应该使用 GET 请求。作为奖励,这消除了您对表格的需求; &lt;button&gt; 元素被替换为简单的链接。看起来您正在使用 Bootstrap,因此样式使它们看起来相同。

把它们放在一起,这就是你的代码:

<?php
$sql = "SELECT * FROM cust_information ORDER BY name";

// default to empty string
$sort = $_GET["sort"] ?? "";

if($sort === "d") 
     $sql .= " DESC";


$result = $conn->query($sql);
// store the whole result into an associative array
$data = $result->fetch_all(MYSQLI_ASSOC);
?>

<table class="table table-bordered table-striped">
    <thead>
    <tr>

        <th scope='col'>Id</th>
        <th scope='col'>Name
            <button class="btn btn-info btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                Sort by
            </button>
            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                <a href="?sort=d" class="dropdown-item btn btn-info">Descending</button>
                <a href="?sort=a" class="dropdown-item btn btn-info">Ascending</button>
            </div>
        </th><!-- ORDER BY "name" -->

        <th scope='col'>Last</th><!-- ORDER BY "lastname" -->
        <th scope='col'>Email</th><!-- ORDER BY "email" -->
        <th scope='col'>Telephone</th><!-- ORDER BY "telephone" -->
    </tr>


    </thead>
    <tbody>


    <?php if (count($data) === 0): ?>
        <tr> <td colspan='5'>Nothing was found!</td> </tr>
    <?php else: ?>
        <?php foreach ($data as $row): ?>
        <tr>
            <td scope='row'><?= $row['auto_id'] ?></td>    <!--difference between class='row' / scope='row'-->
            <td><?= $row['name'] ?></td>
            <td><?= $row['lastname'] ?></td>
            <td><?= $row['email'] ?></td>
            <td><?= $row['telephone'] ?></td>
        </tr>
        <?php endforeach ?>
    <?php endif ?>
    </tbody>
</table>

【讨论】:

我刚刚注意到这个问题已经存在一年了 :facepalm:【参考方案2】:

我通常不在表格中使用 form,因为它不起作用。如果我想将我重定向到某个地方,我会使用 a 标签。

示例:

    @foreach($data as $card)
        <tr style="text-align: center;">
            <td> $card -> id </td>
            <td> $card -> cardType </td>
            <td> $card -> cardValue  RON</td>
            <td> $card -> createdBy </td>
            <td> $card -> created_at </td>
            <td>
                <form action="to somewhere">
                    <button type="submit">Submit</button>                       
                </form>
            </td>
    @endforeach

用这个代替这个:

   @foreach($data as $card)
        <tr style="text-align: center;">
            <td> $card -> id </td>
            <td> $card -> cardType </td>
            <td> $card -> cardValue  RON</td>
            <td> $card -> createdBy </td>
            <td> $card -> created_at </td>
            <td>
                <a class="icon pencil-lg-icon" href=" route ( 'admin.catalog.giftcards.edit', $card->id ) " style="color: white; padding: 8px 10px;"></a>
                <a class="icon trash-icon" href=" route ( 'admin.catalog.giftcards.delete', $card->id ) " style="color: white; padding: 8px 10px;"></a>
            </td>
    @endforeach

或者你可以试试这个

 @foreach($data as $card)

    // Outside the table
    <form action="to somewhere" id="idform"></form>

    <tr style="text-align: center;">
        <td> $card -> id </td>
        <td> $card -> cardType </td>
        <td> $card -> cardValue  RON</td>
        <td> $card -> createdBy </td>
        <td> $card -> created_at </td>
        <td>
            <button type="submit" form="idform">Submit</button>         
        </td>
@endforeach

希望对你有所帮助。

【讨论】:

“我通常不在表格内使用表格,因为它不起作用” - 问题代码中表格内没有表格,表格围绕整个表格,即很好。 "Example" - 您的示例似乎使用了一种不同的编程语言来解决问题! "如果我想将我重定向到某个地方,我会使用 a 标签。" – 问题是关于使用 POST 请求提交表单,而不是使用常规 GET 请求链接到某个地方。

以上是关于表格内的html表格和按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 内的单选按钮不起作用

jquery datatables 按钮:['excel'] 在 document.ready() 中构建表格时不起作用,但在动态构建表格时起作用

数据表:更改表格的高度不起作用

提交按钮在 Bootstrap 表单中不起作用

尽管蓝色,表格单元格尺寸不起作用

HTML表格溢出不起作用