Php 数组验证中的Foreach表单

Php 数组验证中的Foreach表单,php,arrays,forms,Php,Arrays,Forms,感谢阅读:D 我正在创建一个在线订购系统。您将看到3个输入零件号,数量和价格。您将只填写零件号和数量。价格将通过我的数据库检查正确的价格。我试图创建该函数,但仍然不起作用。但无论如何。我包括了一个jQuery函数,这样当您想要订购更多产品时,可以在表单中添加额外的行 一个小片段,让你知道我的意思 $('#addpart').click(function(){ var loop = $('#loop').val(); var html; html = '<p>';

感谢阅读:D

我正在创建一个在线订购系统。您将看到3个输入<代码>零件号,
数量
价格
。您将只填写零件号和数量。价格将通过我的数据库检查正确的价格。我试图创建该函数,但仍然不起作用。但无论如何。我包括了一个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);
}

});
所以订单应该是这样的:

$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)
    ));
如何打印每一行的数组('required'=>TRUE,'maxlength'=>14)。我用
foreach
[]
尝试了几种方法。
所有这些都不起作用(

我想您需要扩展
验证类,以便能够以最舒适的方式验证数组

您可以尝试这样处理数组变量(仅举一个示例):

验证
类的引擎盖下,如果
是数组($toxValue)
,只需循环通过传递的
数量
数组的值,并将规则应用于该数组的每个成员(最小值、最大值等)

此外,我建议重构
验证
类:使用回调或类成员函数调用单独的验证规则(这不是最好的OOP方法,但对于简单的情况是可行的)。如下所示:

class Validation
{
    ...

    public function ruleMax($value)
    {
        ... // Validate value max
    }

    public function ruleMin($value)
    {
        ... // Validate value min
    }
}
使用这种方法,如果需要向类(或子类)添加更多验证规则,则无需完全重写
check
函数

顺便说一句,我建议看看它是如何在像Laravel这样的流行框架中实现的:


类本身是规则解耦的一个简单示例(当然不是最好的例子):

发布一个指向类
验证
文档的链接。现在开始:但它只需要在
验证->检查
函数中为创建数组。从提交的表单中。检查需要检查每个
输入
部分[0]
part[1]
etc当您提交一个带有数组输入的表单时,例如
part[]
,那么
$\u POST['part']
将是一个数组。注意,我说的是
$\u POST['part']
不是
$\u POST['part[]
。您的类仅限于非数组输入,因为它正在寻找后者。您需要添加逻辑来处理数组输入。谢谢,但是是否无法转换foreach
部分[]
to
part'=>TRUE,
因此它将由我的
验证
类检查?我的
验证
类将检查数组中的
所有就绪。我需要将
part
数组与
check
函数中使用的
表单
数组相结合。还是最好绕过t他将
验证
类并用另一种方法检查它,这样会更简单吗?谢谢你的回答。仍然没有真正理解你建议的结构,但我会尝试一些东西。数组不是我最强的技能。关于我的
验证
类在函数中使用验证规则,这部分我真的不懂。我不知道现在重新编写我的验证规则?当我需要一个新规则时,我只添加一个新的
开关
案例
。关于Laravel。几个月前我试图查找,但仍然没有得到结构。我学了很多旧的PHP。旧的Scool PHP,现在我尝试使用OOP/PDO,但有时仍然像现在这样很难。我想我无论如何都会绕过它是系统这一部分的
验证
类,因为
有多个未知表单
。尤其是它们实际上并不需要真正的验证规则。>旧的Scool PHP,现在我尝试使用OOP/PDO,但有时仍然很难,就像现在一样,这是有意义的。试着看看这个函数:代码很常见ted.Find foreach循环-您将看到
$this->validate()
调用。接下来看
$this->validate($attribute,$rule)
-它使用
$method=“validate{$rule}”
作为函数名。示例调用:
$this->validate('name”,“min')
将导致
$this->validateMin()
调用。此构造将帮助您摆脱
开关/case
。关于数组验证:在表单请求之后,您将在
$\u POST['qty']
中获得一个数组。如下所示:
$arr=$\u POST['qty']
。接下来您需要检查变量是否是真实数组,如下所示:
是\u array($arr)
。如果您有一个数组(函数返回
true
),您可以通过
验证器中该数组的所有元素执行
foreach
循环,如下所示:这是一个伪代码。此外,如果您想在PHP中刷新有关数组的知识,请尝试使用官方文档:您的意思是我需要修改
验证
类。因此,不要应用
'part'=>array('required'=>TRUE)
,我可以这样应用它:`$Validate->('required',toxInput::get('po');这就是你的意思吗?
$toxValidate->check($_POST, [
    'name' => [
        'required' => TRUE,
        'min' => 2,
        'max' => 50,
    ],
    'qty' => [
        'required' => TRUE,
        'array' => TRUE,
        'min' => 2,
        'max' => 14,
    ],
]);
class Validation
{
    ...

    public function ruleMax($value)
    {
        ... // Validate value max
    }

    public function ruleMin($value)
    {
        ... // Validate value min
    }
}