- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个用 Pug 编写的表单。我从表单的 POST 中获取了所有正确的参数,除了我的复选框数组是一个包含一个值的字符串——最近选择的一天。每个复选框都有一个等于数组的名称,因此表单应该返回所有选中的复选框。然而,这并没有发生。
下面是复选框选择的相关代码:
form#create-shift-form(action='/shifts/new', method='post')
div.form-group
p Select which days this shift should apply:
div.checkbox-inline
input.checkbox-input#create-shift-mon(type='checkbox', name='days[]', value='Mon')
label(for='create-shift-mon') Mon
div.checkbox-inline
input.checkbox-input#create-shift-tue(type='checkbox', name='days[]', value='Tue')
label(for='create-shift-tue') Tue
div.checkbox-inline
input.checkbox-input#create-shift-wed(type='checkbox', name='days[]', value='Wed')
label(for='create-shift-wed') Wed
div.checkbox-inline
input.checkbox-input#create-shift-thur(type='checkbox', name='days[]', value='Thur')
label(for='create-shift-thur') Thur
div.checkbox-inline
input.checkbox-input#create-shift-fri(type='checkbox', name='days[]', value='Fri')
label(for='create-shift-fri') Fri
div.checkbox-inline
input.checkbox-input#create-shift-sat(type='checkbox', name='days[]', value='Sat')
label(for='create-shift-sat') Sat
div.checkbox-inline
input.checkbox-input#create-shift-sun(type='checkbox', name='days[]', value='Sun')
label(for='create-shift-sun') Sun
为什么没有在表单的 POST 中捕获所有选中的复选框值?为什么它只返回最后一个选定值的字符串而不是所有选定值,这是预期的 HTML 行为?
如果有帮助,我的 Node/Express 服务器已设置为使用以下行解析内容:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
根据 this W3C Spec ,我应该能够给每个复选框输入相同的名称,它们将在 POST 时被解析为一个值数组(参见规范中的示例 2)。我也试过这个,这导致了与我的问题相同的行为 - 只返回最后选择的项目,并且作为字符串,而不是数组。
更新:我上面代码的原始设置是正确的。只需为每个属性的 name
字段指定相同的名称,即可将响应组装到一个数组中。我设置了middleware我忘记了将阻止数组响应作为一种安全措施。删除该库,或将此表单 POST 发送到的路由列入白名单,允许原始代码正常工作。
最佳答案
经过一番研究,我发现:
这种传递数组的方法在很大程度上取决于服务器,它如何理解数据有效负载,PHP 理解这种语法,但 JSON 对象的处理方式不同。
form#create-shift-form(action='/shifts/new', method='post')
div.form-group
p Select which days this shift should apply:
each val, index in ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
div.checkbox-inline
input.checkbox-input(type='checkbox', name=`days[${index}]`, value=val, id=`create-shift-${val}`)
label(for=`create-shift-${val}`)=val
这将有效载荷将等同于这样的东西:
days[0]=Mon
days[1]=Tue
days[2]=Wed
days[3]=Thur
days[4]=Fri
days[5]=Sat
days[6]=Sun
这相当于 json 中的这个有效载荷:
{
days: ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
}
来源:https://darobin.github.io/formic/specs/json/
供将来引用:OP 解决了这个问题,解决方案 (days[${index}])
是正确的,但是 express body parser extended:true
使用 querystring
代替qs
。
使用 extended:false
,JSON 将按预期运行。负载变为 "days[0]"="Mon", "day[1]"="Tues", etc.
app.use(bodyParser.urlencoded({ extended: false }); //instead of true
关于node.js - Pug (RIP Jade) 表单复选框 - 无论选择多少,只返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299995/
我熟悉这种形式的内存引用: XXX ptr [base + index * size + displacement] 其中XXX是某个大小(字节/字/双字/等),base和index都是寄存器,siz
问题是我不能强制 gnu as 将 jmp 解释为 short 或 near,它不断解释它作为 far。 例如,下面的代码会导致segfault: int main() { asm volatil
问题是我不能强制 gnu as 将 jmp 解释为 short 或 near,它不断解释它作为 far。 例如,下面的代码会导致segfault: int main() { asm volatil
考虑以下 x64 Intel 程序集中的变量引用,其中变量 a在 .data 中声明部分: mov eax, dword ptr [rip + _a] 我很难理解这个变量引用是如何工作的。自 a是变量
Call triggers vulnerability in function children() 389: ⇑ $this->children ($relativePath) 384: $rela
这个问题在这里已经有了答案: Reading program counter directly (7 个回答) 4年前关闭。 #include uint64_t rip; int main() {
我正在尝试修改 rip 寄存器(只是为了好玩)。 buffer 应该是内存地址,所以不知道为什么会得到Error: operand type mismatch for 'movq' #include
对于我们的一个应用程序,我们在/var/log/messages 中看到了以下提到的几条消息: Sep 18 03:24:23 kernel: application_name[14682] tra
当我的 linux 应用程序崩溃时,它会在日志中生成如下一行: 段错误在 0000000 rip 00003f32a823 rsp 000123ade323 错误 4 那些 rip 和 rsp 地址是
我正在尝试实现最小内核,并且正在尝试实现克隆系统调用。在手册页中,您可以看到克隆系统调用定义如下: int clone(int (*fn)(void *), void *stack, int flag
对于计算机体系结构和处理器/内存级别发生的低级内容,我完全是新手。我首先要说的是。我对计算机所做的工作几乎一直处于高级编程水平。 C++、Java等话虽这么说,我目前正在读一本开始深入研究低级编程内容
我正在尝试在 Linux x86_64 上获取 sys_call_table 的偏移量。 首先,我通过从 MSR_LSTAR 读取指向 system_call 条目的指针,它是正确的 static u
rax是否获得偏移量加上该指令或下一条指令的地址?从微代码的角度来看,如果答案是下一条指令,则可能会更容易。 最佳答案 下一个。这是x86的一般规则(另请参见分支)。 在英特尔手册第2卷中的2.2.1
我有一个适用于 Mac OS X 的程序集 hello world 程序,如下所示: global _main section .text _main: mov rax, 0x2000004
这个问题已经有答案了: Why is the address of static variables relative to the Instruction Pointer? (1 个回答) Why
来自 Rubymonk ascent 教程“Ripping the Guts”,这段代码有什么区别:(我的) # compute([[4, 8], [15, 16]]) def compute(ary
基本上,我使用 ptrace 将 shell 代码注入(inject)远程进程以供执行。但是我发现了一些关于 RIP 寄存器的奇怪行为。 我所做的是将我的 shell 代码复制到程序映射的起始地址。然
我有一段简单的汇编代码,可以在 Mac OS X (x86-64) 上正常工作,但在 Linux (x86-64) 上不能正常工作: .data .align 4 foo: .quad 1,2 .te
我正在尝试读取内存中相对于 X86_64 上的 %rip 的值。在我的第一个例子中,我只想阅读 如果我用 C 语言编写以下代码,我可以调用它并获得正确的结果 (\x....C3C9): void *
我想展开一个 x64 调用堆栈,所以我尝试按照我在此处找到的“UNWIND 过程”进行操作: http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
我是一名优秀的程序员,十分优秀!