php post特别用法 name="bblstpl.pl" name="bblstpl[pl]"

本文探讨了在使用DWZ框架时遇到的表单数据提取问题,详细介绍了如何正确设置和提取包含特殊字符(如点号)的表单字段名称。

使用dwz 时遇到 带回功能。 值带回后,无法获取表单数据。 于是仔细研究。

文本框name为  bblstpl.pl

<input name="bblstpl.pl"  type="text"   />


提交后页面 使用$_post["bblstpl.pl"] 无法提取到值

因为. 被转译为_

故而使用  $_POST["bblstpl_pl"]  提取成功。


---------------------------------解决过程----------------------------------

本以为pl 为bblstpl.pl子元素 dump(bblstpl)时会显示   bblstpl[1]->pl "value"; 测试结果完全不是那么回事。

网上四处搜索,找到类似使用方法 

<input name="bblstpl[pl]"  type="text"  />

dump($_POST["bblstpl"]["pl"] );

提取成功

但是 bblstpl.pl 还是无法提取。

郁闷20多分钟。直接dump($_POST) 显示所有post值。 发现  ["bblstpl_pl"] => string(11)

$_POST["bblstpl_pl"]  

提取成功.

<think>嗯,用户提供的这段代码看起来像是处理表单提交的JavaServlet代码。他们现在的问题是图片上传的格式问题。首先,我需要确认用户当前是如何处理文件上传的。原代码中没有涉及文件上传的部分,所以可能用户没有处理这部分,或者处理方式有问题。首先,我应该想到处理文件上传需要使用Servlet的Part接口或者Apache Commons FileUpload库。原代码使用的是request.getParameter来获取普通表单字段,这在处理multipart/form-data时是无效的。所以用户可能没有正确设置表单的enctype为multipart/form-data,或者没有正确处理文件上传部分。 接下来,我需要提供一个解决方案,指导用户如何修改表单和Servlet代码。首先,表单必须设置enctype为multipart/form-data,并且有文件输入字段。然后在Servlet中,使用@MultipartConfig注解,并通过request.getPart或request.getParts来获取上传的文件。然后,我需要给出示例代码,展示如何处理文件上传,包括保存文件到服务器,并将文件名保存到数据库。同时,要处理可能出现的异常,比如目录不存在,文件大小限制等。还需要确保正确处理中文字符,设置编码,防止文件名乱码。另外,用户原来的代码中使用了indexDAO和xq类,这些可能是用户自定义的,所以在处理完文件上传后,需要将文件名设置到xq对象中,并调用DAO的插入方法。同时,要确保数据库表中有对应的字段来存储文件名。 可能用户的问题还涉及到如何限制上传文件的格式,比如只允许图片类型(jpg、png等),这可以在Servlet中进行检查,通过Part的contentType或文件名后缀来判断。如果不符合要求,返回错误提示。 最后,需要提醒用户注意安全性,比如防止路径遍历攻击,对上传的文件进行重命名,限制文件大小,避免服务器存储过多文件等。同时,要处理可能出现的IO异常,确保程序的健壮性。 总结步骤:修改表单enctype,添加文件输入;在Servlet中使用Part处理上传,检查文件类型,保存文件到指定目录,将文件名存入数据库,返回结果。同时处理异常情况和安全措施。</think>这是典型的Java Web文件上传处理问题。需要结合Servlet的Part接口和前端表单配置,以下是完整的解决方案: 1. 前端表单需要修改(关键点:enctype设置): ```html <form action="yourServlet" method="post" enctype="multipart/form-data"> <!-- 原有表单字段 --> <input type="file" name="productImage" accept="image/*"> <!-- 其他表单元素 --> </form> ``` 2. Servlet处理代码示例: ```java @WebServlet("/upload") @MultipartConfig( fileSizeThreshold = 1024 * 1024 * 1, // 1MB maxFileSize = 1024 * 1024 * 10, // 10MB maxRequestSize = 1024 * 1024 * 100 // 100MB ) public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); // 处理普通表单字段 String name = request.getParameter("name"); // 处理文件上传 Part filePart = request.getPart("productImage"); String fileName = getFileName(filePart); // 创建上传目录 String uploadPath = getServletContext().getRealPath("/uploads"); File uploadDir = new File(uploadPath); if (!uploadDir.exists()) uploadDir.mkdir(); // 保存文件 String safeFileName = System.currentTimeMillis() + "_" + fileName; String filePath = uploadPath + File.separator + safeFileName; try (InputStream fileContent = filePart.getInputStream()) { Files.copy(fileContent, Paths.get(filePath)); } // 将文件名保存到数据库 xq x = new xq(); x.setImagePath(safeFileName); // 需要实体类添加对应字段 // 其他业务处理... } private String getFileName(Part part) { String contentDisposition = part.getHeader("content-disposition"); String[] items = contentDisposition.split(";"); for (String item : items) { if (item.trim().startsWith("filename")) { return item.substring(item.indexOf("=") + 2, item.length()-1) .replace("\\", "/") // 处理Windows路径 .substring(item.lastIndexOf("/") + 1); // 获取纯文件名 } } return "unknown"; } } ``` 代码关键点解释: 1. 前端必须设置`enctype="multipart/form-data"`才能上传文件 2. Servlet需要添加`@MultipartConfig`注解启用文件上传支持 3. 通过`request.getPart()`获取上传文件 4. 使用时间戳重命名文件防止重复 5. 文件存储路径建议使用ServletContext获取真实路径 6. 需要处理中文文件名(已通过UTF-8编码设置)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值