写前端页面时,按钮明明是<button>,为什么点击时会提交表单,刷新页面呢?

本文解答了一个常见的编程问题:为何表单中的button按钮会自动提交表单。原因是未明确指定button的类型,默认为submit。解决方案是在button标签中添加type=button或将其移出form标签之外。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  相信这个问题很多初学者,甚至开发了几年的人或许也会遇到,一时不得其解,然而问题的解决也出人意料的简单。原因就是你的button按钮是放在form表单里的,而且又没有声明其type=”button”导致的。

  • 从w3c组织的官方文档可以看到关于button按钮的一句话:The missing value default is the Submit Button state,这句话就说明form表单里的button按钮,默认是submit类型的,所以你需要加上type=”button”声明是button类型而不是默认的submit,或者你不把button放在form里也可以。
  • And one more thing,button不放在对应的form表单里,而是放在其外部,也是可以提交指定表单的。<button type="submit" form="form1">提交</button>通过这种方式,也可以控制这个button按钮指定提交id为form1的表单。
### PHP生成包含标题、按钮、留言列表及XSS防护的管理员后台页面 以下是一个完整的PHP代码示例,它展示了如何创建一个具有标题、按钮、留言列表以及内置XSS防护机制的管理员后台页面。此实现考虑了安全性问题,并采取措施防止可能的跨站脚本攻击(XSS)[^2]。 #### 完整PHP代码示例 ```php <?php // 初始化留言板数组 $messages = [ htmlspecialchars("说书人长得好帅"), // 防止XSS注入[^2] htmlspecialchars("<script>alert('XSS');</script>") // 此消息尝试执行恶意脚本,但会被转义处理 ]; if ($_SERVER["REQUEST_METHOD"] === "POST") { $newMessage = isset($_POST['message']) ? trim($_POST['message']) : ''; if (!empty($newMessage)) { // 使用htmlspecialchars过滤用户输入以防XSS攻击 $safeMessage = htmlspecialchars($newMessage); array_push($messages, $safeMessage); } } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>安全管理员后台</title> </head> <body> <h1>这里是管理员后台,你已成功登录</h1> <!-- 留言提交表单 --> <form method="post" action=""> <label for="message">新增留言:</label><br> <input type="text" name="message" id="message"><br><br> <button type="submit">发布留言</button> </form> <hr> <b>最新留言</b> <ul> <?php foreach ($messages as $msg): ?> <li><?php echo $msg; ?></li> <!-- 输出经过转义的安全内容 --> <?php endforeach; ?> </ul> </body> </html> ``` --- #### 解析与说明 1. **HTML结构** - 页面顶部显示了一个固定的标题 `<h1>`。 - 提供了一个简单的表单用于接收用户的新留言输入,并通过 POST 方法发送至服务器端进行处理。 - 下方展示的是最新的留言列表,每条留言都封装在 `<li>` 标签中。 2. **PHP逻辑** - `$messages` 数组预先填充了一些测试性的留言数据,其中包括一条试图触发 XSS 攻击的消息。 - 接收来自前端表单的数据,使用 `trim()` 函数去除多余空白字符后再验证其有效性。 - 用户提交的内容均需经由 `htmlspecialchars()` 处理以确保任何特殊字符都被正确编码,从而避免潜在的 XSS 注入风险。 3. **安全性考量** - 所有动态生成的内容都会先调用 `htmlspecialchars()` 函数来转换成实体形式再输出到浏览器,这样即使有人故意嵌入恶意脚本也不会被执行而是直接作为普通文本呈现给访客阅读[^2]。 4. **用户体验改进** - 表格设计简洁明了,便于管理者快速浏览和理解信息。 - 实现即反馈功能,在不刷新整个页面的情况下即可完成新评论添加操作(尽管这里未采用AJAX技术)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值