<input type="hidden" name="order_id" value="<%=orderId%>"><%=orderId%>
<input type="text" name="order_id" value="<%=orderId%>">
主要区别如下:
1. 页面显示效果
type="hidden":
字段完全隐藏,用户在页面上看不到输入框,仅在表单提交时后台能获取值。
示例效果:页面只显示订单号文本(<%=orderId%>),看不到输入框。
type="text":
字段会显示为一个可见的文本输入框,输入框中默认值为 orderId,用户可以看到并修改这个值。
示例效果:页面会显示一个文本框,框内有订单号,用户可点击输入框修改内容。
2. 用户交互性
type="hidden":
无交互性,用户无法看到或修改该字段的值,值完全由服务器端控制(通过 value="<%=orderId%>" 赋值)。
type="text":
有交互性,用户可以:
看到输入框中的订单号
点击输入框修改内容(如误操作修改为其他数字)
清空输入框内容
3. 数据安全性
type="hidden":
虽然用户看不到,但可通过浏览器开发者工具(F12)找到并修改,并非绝对安全,但能防止普通用户误操作。
type="text":
完全暴露给用户,修改门槛极低(直接在输入框中编辑),更容易导致数据被篡改。
→ 风险:若服务器未校验,可能接收被篡改的订单号,导致业务逻辑错误(如修改为他人的订单号)。
4. 适用场景
type="hidden"(原写法):
适用于需要隐式传递数据的场景(如订单号、用户 ID 等关键标识),用户无需关注但服务器需要使用。
例:订单确认页传递订单号,用户只需看到订单号,无需修改。
type="text":
适用于需要用户输入或确认文本信息的场景(如收件人姓名、联系电话等)。
若用于订单号,仅适合特殊场景(如客服协助用户手动输入订单号)。
代码对比示例

总结
将 hidden 改为 text 会让订单号字段从 “隐藏不可改” 变为 “可见可改”,这在大多数订单流程中是不合适的,因为订单号属于系统生成的唯一标识,不应允许用户修改。只有在明确需要用户输入或确认该标识的特殊场景下,才适合使用 type="text",且必须在服务器端加强校验(如验证订单号的合法性及归属权)。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2503_91361793/article/details/149674294