感谢您阅读:D
我正在创建在线订购系统。你会看到3个输入。 Partnumber
,Quantity
和Price
。您只会填写“部件编号”和“数量”。价格将以合适的价格通过我的数据库进行检查。我试图创建该功能,仍然无法正常工作。但无论如何。我包含了一个jQuery函数,因此当您想订购更多产品时,可以在表单中添加额外的行。
一小段代码,让你知道我的意思。
$('#addpart').click(function(){
var loop = $('#loop').val();
var html;
html = '<p>';
html += '<input type="text" name="part[]" style="margin-left:20px;" class="text medium" id="part" placeholder="SP partnumber" />';
html += '<input type="text" name="qty[]" style="margin-left:20px;" class="text small" placeholder="Qty" />';
html += '<input type="text" style="margin-left:20px;" class="text small" id="price" placeholder="Price" tabindex="-1" readonly />';
html += '</p>';
for (i = 0; i < loop; i++) {
$("#form").append(html);
}
});
因此,当您发布此表单时,我们不知道它将包含多少字段。有时它会是5个订单行,有时是10个。
所以我开始在输入字段中使用[]
。
输入name
属性将如下所示:"part[]"
。
表格将通过课程Validation
进行验证。
为了向我的班级展示这个页面将是非常长的ghehe。
这里有一个小片段如何使用这个类/函数让你知道结构。
if(toxInput::exists()){
if(toxtoken::check(toxInput::get('token'))){
$toxValidate = new toxValidate();
$toxValidation = $toxValidate->check($_POST, array(
'name' => array(
'required' => true,
'min' => 2,
'max' => 50
)
));
if($toxValidation->passed()){
etcetcetc..
因此,订单表格应该是这样的:
$toxValidate = new toxValidate();
$toxValidation = $toxValidate->check('$_POST', array(
'part1' => array('required' => TRUE, 'maxlength' => 14),
'part2' => array('required' => TRUE, 'maxlength' => 14),
'part3' => array('required' => TRUE, 'maxlength' => 14),
'part4' => array('required' => TRUE, 'maxlength' => 14),
'part5' => array('required' => TRUE, 'maxlength' => 14)
));
如何为每个填写的行打印此行'part1' => array('required' => TRUE, 'maxlength' => 14)
。我使用foreach
和[]
尝试了几种方法。
一切都没有用.. :(
答案 0 :(得分:0)
我认为您需要扩展Validation
类才能以最舒适的方式验证数组。
你可以尝试像这样处理数组变量(只是一个例子):
$toxValidate->check($_POST, [
'name' => [
'required' => TRUE,
'min' => 2,
'max' => 50,
],
'qty' => [
'required' => TRUE,
'array' => TRUE,
'min' => 2,
'max' => 14,
],
]);
在Validation
类的引擎下,只需循环传递qty
数组的值is_array($toxValue)
并将规则应用于该数组的每个成员(min,max,等)。
另外,我建议重构你的Validation
类:使用回调或类成员函数调用单独的验证规则(不是最好的OOP方式,但对于简单的情况是可行的)。像这样:
class Validation
{
...
public function ruleMax($value)
{
... // Validate value max
}
public function ruleMin($value)
{
... // Validate value min
}
}
使用这种方法,如果需要向类(或子类)添加更多验证规则,则无需完全重写check
函数。
顺便说一下,我建议看看它是如何在像Laravel这样的流行框架中制作出来的: https://laravel.com/docs/5.4/validation#validating-arrays
这个类本身就是一个简单的例子(当然不是最好的)规则解耦:https://github.com/laravel/framework/blob/5.1/src/Illuminate/Validation/Validator.php