gpt4 book ai didi

post - Hunchentoot 处理复选框发布请求

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:56 26 4
gpt4 key购买 nike

我正在使用 Cl-who、Hunchentoot 和 Common Lisp 开发一个需要处理客户订单的 Web 应用程序。因为他们显然可以订购不止一件商品,所以我认为 Checkbox 最有意义。但是,问题是当我定义一个简单的处理程序时,如果您有一系列具有相同名称和不同值的复选框,它不会像 PHP 中的数组那样接收结果数组。相反,它将变量视为字符串,因此我无法遍历每个选中的 Box。这是我的代码片段:

(:input :type "checkbox" :name "food[]" :value "cheese balls")
(:input :type "checkbox" :name "food[]" :value "fries")
(:input :type "checkbox" :name "food[]" :value "hamburger")

这是我设置的处理程序(也许我需要在这里使用循环宏?)这只是一个示例,因为当我弄清楚这个问题时,我显然会处理传递给 easy-handler 的每个参数:

(define-easy-handler (process-order :uri "/process-order") 
(customer-name customer-address customer-city customer-phone order-type food[])
(standard-page (:title "order results"
:href "file.css")
(:h1 (if food[]
(dolist (x food[])
(:li (fmt "We see that you want ~A~%" x)))))))

这些只是有人可以检查的三个潜在输入。因此,让我们假设客户检查了所有三个......只有奶酪球会返回,因为 Lisp 将名称“food[]”视为一个单独的字符串。我的意思是,在 PHP 中,名称变量(“food[]”)将被处理为就好像它是一个数组一样。所以在 HTML 和 PHP 中它看起来像这样:

<input type="checkbox" name="food[]" value="cheese balls" class="check"/>
<input type="checkbox" name="food[]" value="fries" class="check"/>
<input type="checkbox" name="food[]" value="hamburger" class="check"/>

假设客户选择了所有三个复选框,我可以在 PHP 中执行类似的操作:

if( isset( $_POST['food'])) {
foreach ( $_POST['food'] as $food){
echo $food;
}
}

不过,目前尚不清楚您如何使用 Cl-WHO 和 Hunchentoot 在 Common Lisp 中实现类似的功能。我能想到的唯一其他替代方法是将大约 30 个参数传递给 easy-handler,但这听起来像是解决此问题效率最低的方法。我知道还有一个 CL 表单处理库,但我希望避免走那条路,尽管如果这是唯一可能的解决方案,我会这样做。给每个复选框一个不同的名字似乎是解决这个问题的最糟糕的方法。

最佳答案

进一步阅读文档后,您可以更改简单处理程序期望接收的参数类型。一旦它在参数定义中看到它是一个列表,它就会将其视为一个列表。我只是将我的食物参数更改为:

(food[] :parameter-type 'list)

它把它当作一个列表,并从我的复选框中检索多个结果。

关于post - Hunchentoot 处理复选框发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com