表格内的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? 对我来说工作正常,页面重新加载。小心你在表单中制作了另一个表单标签<form>
里面有一个<form>
你是对的,我删除了第二个 form
但仍然无法正常工作
大概是@ThunderBoy,这意味着您的一个或其他查询正在工作,否则您的行数不会为 ` > 0`。我有一种感觉,您的问题在于您检查是否,然后再检查一次 - 而不是 if/else。你做过调试吗?提交了哪些帖子值,正在生成哪个查询,准备执行查询时的 sql 字符串是什么............
【参考方案1】:
我看不出您的代码有什么问题会阻止表单提交。但是,我可以看到你的编码风格有很多问题。今天工作很安静,所以...
这里最大的罪过是尽可能多地混合 PHP 和 HTML。始终将尽可能多的代码放在文件顶部,与 HTML 分开。 (在适当的代码库中,这些文件将是单独的文件,但我认为这对您来说是一个学习练习,而不是一个专业项目。)对于这样的数据库驱动页面,这意味着立即进行查询并将数据收集到一个数组中,所以进入你的 HTML 的唯一东西就是一些简单的控制结构和回显。
将alternative syntax 用于控制结构允许单行PHP 侵入HTML,不需要大括号,当然也不需要回显HTML 的巨大块,您必须担心是否正确引用引号。 Short echo tags 也让事情变得更干净。 (对于那些您绝对必须回显一堆 HTML 的罕见情况,请使用 heredoc。)
根据约定和 RFC,POST 请求应该在服务器上实现一些更改,例如存储或更新记录。由于这里不是这种情况,因此您确实应该使用 GET 请求。作为奖励,这消除了您对表格的需求; <button>
元素被替换为简单的链接。看起来您正在使用 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表格和按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章
jquery datatables 按钮:['excel'] 在 document.ready() 中构建表格时不起作用,但在动态构建表格时起作用