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