今天前端和我提了个严肃的问题,关于 PHP 获取 html 的表单数组

2016-01-25 11:12:51 +08:00
 alex321
话说,我一直以来都是用 php 来做公司微信公众号平台的,在图文素材中我是用了类似如下的表单:

<input type="text" name="Title[]" class="form-control" placeholder="标题" />
<input type="text" name="Description[]" class="form-control" placeholder="摘要" />
<input type="text" name="PicUrl[]" class="form-control" placeholder="图片地址" />
<input type="text" name="Url[]" class="form-control" placeholder="跳转地址" />

然后,前端和我说,最讨厌这种包含 [] 的表单数组设计了,这个是 PHP 作为后端时前端表单中独有的,虽然现在 ASP.NET 也可以兼容获取到,比如通过: http://stackoverflow.com/questions/4561686/handling-arrays-of-html-input-elements-with-request-form-like-php
正常在 C# 中可以直接重复 name=Title ,然后 post 或者 get 到后端时会自动变成 Title1=1&Title2=2&Title3=3 这样的形式。
然后,前端严肃地说,在他看过的书中,有指出过这个是 PHP 当时的设计失误。

那个,我就偶尔玩一下 PHP ,想问下这个是否确实是 PHP 独有的,甚至是 PHP 当初的设计失误呢?两者我觉得是同一个意思,如果强迫一个语言 A 为另一个语言 B 而改变或者新增一些特性,可能对 A 算是功能上的完善或者补充,但对 B 可能就算是设计上的不完善了吧。

PS ,此贴仅限 html 数组表单的处理讨论,是否是当时 html 专门为了兼容 PHP 后端获取而做了调整,没有什么引发圣战的意思。
5461 次点击
所在节点    PHP
33 条回复
iyaozhen
2016-01-25 14:42:47 +08:00
关键是你 input 不是这样玩的吧。 name="title" 不就行了,楼主还是比较超前呀。我一开始压根就不知道数组这种用法 2333
bk201
2016-01-25 14:46:34 +08:00
java 可以这样玩,也可以类似 c#这样玩。但是这不应该是前端自己的问题么,非要用 name 表单提交。
moro
2016-01-25 14:50:33 +08:00
@slixurd php 自带解析[]作为数组。
Tr0y
2016-01-25 15:20:50 +08:00
楼上各位,这不是什么后端语言特有的,这是 w3c 制定的 web 页面提交多维数据的格式(也就是数组),理论上所有的后端环境都可以获取的到。
ppwangs
2016-01-25 15:25:51 +08:00
我们 java 用框架的时候都是这样:
<input type="text" name="entity[0].title" class="form-control" placeholder="标题" />
<input type="text" name="entity[0].description" class="form-control" placeholder="摘要" />
<input type="text" name="entity[0].url" class="form-control" placeholder="跳转地址" />

<input type="text" name="entity[1].title" class="form-control" placeholder="标题" />
<input type="text" name="entity[1].description" class="form-control" placeholder="摘要" />
<input type="text" name="entity[1].url" class="form-control" placeholder="跳转地址" />

这样 server 段处理的时候可以获取到一个 entity 的数组。
zhujinliang
2016-01-25 15:40:57 +08:00
@Tr0y 有相关网址么?

我一直以为是 php 特有的,因为 php 语法允许 $foo[] = 'bar' ,相当于 array_push($foo, 'bar')
另外这个先后顺序有约定么?依据文档出现先后顺序?
falcon05
2016-01-25 15:43:18 +08:00
我一直是这么处理的。。。
wt12312345
2016-01-25 16:37:14 +08:00
@dapang1221 举四爪同意
wt12312345
2016-01-25 16:38:08 +08:00
@alex321 这个也可以直接用于 ajax ,只不过和传输 JSON 调用的方法不一样而已。
slixurd
2016-01-25 18:21:57 +08:00
@Tr0y
吓死我了,然后我赶紧去 W3C 找了个 HTML5 标准看看。
少年你在哪看的 W3C 规范?为什么和我看的不一样
Successful controls have exactly one value, except for select controls and file upload controls, which have zero or more values depending on how many items or files they have selected.

http://dev.w3.org/html5/web-forms-2/
v1024
2016-01-25 18:59:13 +08:00
如果不是为了 noscript 环境,还是异步提交数据吧。
xiamingchong
2016-01-26 09:50:54 +08:00
这跟 php 有毛关系,任何语言都从标准输入都可以读到,怎么解析都行
klgd
2016-02-10 17:57:55 +08:00
post 一个数组表单 不这么用要怎么用?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253147

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX