V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csensix
V2EX  ›  PHP

PHP 动态输入框获取输入值

  •  
  •   csensix · 2015-11-20 10:38:40 +08:00 · 3530 次点击
    这是一个创建于 3052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    模仿微信公众号后台投票管理功能。
    可以动态添加多个问题,每个问题下面默认有两个选项,也可动态添加多个。已经通过 JS 实现动态添加功能,但在 PHP 中无法获取到问题选项的值,单个选项的 html 如下

    <input type="text" class="fyinput" name="options[][]" /><span class="red">*</span>
    <input type="file" name="pic[][]" class="file" size="28" />
    因为每个问题下面都有选项,如果 name="options[]" 这样就无法获知那个选项属于哪个问题。

    请问如何正确设置 input 元素的 name 属性。

    14 条回复    2015-11-23 08:35:58 +08:00
    patosky
        1
    patosky  
       2015-11-20 10:41:57 +08:00
    加个序号呗
    csensix
        2
    csensix  
    OP
       2015-11-20 10:43:38 +08:00
    @patosky 如果不加序号,是不是没有办法获取呢?
    csensix
        3
    csensix  
    OP
       2015-11-20 10:45:35 +08:00
    @patosky 考虑到加序号也不好处理,因为问题和选项既可以动态添加,也可以删除,而删除后剩下元素的序号也成了问题
    Light3
        4
    Light3  
       2015-11-20 10:51:41 +08:00
    你这个提交是什么样的提交阿 ajax 还是直接提交阿 我感觉你可以 js 加新的选项的时候在后面 i++一样加序列号 这样不就对上了
    patosky
        5
    patosky  
       2015-11-20 10:53:38 +08:00
    @csensix 删除了剩下元素的序号重新排序一下呗。
    csensix
        6
    csensix  
    OP
       2015-11-20 10:54:17 +08:00
    @Light3 直接提交。刚开始也是打算 js 加序号上去,由于页面上 html 元素以及一些元素类比较多,觉得不方便添加,试图用数组命名的方式来实现,却发现用不了二维的数组。
    b821025551b
        7
    b821025551b  
       2015-11-20 10:56:26 +08:00
    <div class="q_and_a">
    <input value="question">
    <div class="answer_list">
    <input value="answer">
    <input value="answer">
    </div>
    </div>
    这种结构,用 jquery 选择器选择 q_and_a 类的子 input 值,存入数组 questionArr ;遍历选择 q_and_a 类下的 answer_list 所有 input 值,存入 questionArr 对应的问题下
    csensix
        8
    csensix  
    OP
       2015-11-20 10:59:29 +08:00
    @b821025551b 还有图片上传呢
    b821025551b
        9
    b821025551b  
       2015-11-20 11:03:56 +08:00
    @csensix 图片上传用单独接口啊,用这个接口拿到 path 或者 id 再走主流程,不然失败几率会很高
    gdtv
        10
    gdtv  
       2015-11-20 11:09:27 +08:00
    我的项目也遇到类似的问题,我就是加序号的,至于删除后剩下元素的序号这个在 php 端处理一下就行了
    csensix
        11
    csensix  
    OP
       2015-11-20 11:14:09 +08:00
    谢谢大家,我试着添加序号看能否顺利解决
    BOYPT
        12
    BOYPT  
       2015-11-20 11:20:53 +08:00
    显然应该在服务器端建立好每个问题的 input 的唯一键值。
    loveyu
        13
    loveyu  
       2015-11-20 23:00:47 +08:00
    感觉复杂的表单就应该前端把对象 JSON.stringify()一下,然后 ajax 传过去再 json_decode(),一堆$_POST ,实在不好理清
    csensix
        14
    csensix  
    OP
       2015-11-23 08:35:58 +08:00
    谢谢大家的帮助。通过增加一个隐藏字段来存储问题数组,新增和删除问题时都去修改该字段值,如 1,2,3

    问题内的选项就直接通过 options_1[] options_2[] 这样存储就 ok 了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5404 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:05 · PVG 15:05 · LAX 00:05 · JFK 03:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.