在PHP中验证数组值

在PHP中验证数组值,php,Php,我有这个(注意文本框是一个数组) echo” 然后在验证代码中,我有以下内容: if(isset($_POST['Save'])) { if($_POST['allocas']=='') { echo "<table border='1'><tr><td>mikies</td></tr></table>"; echo "Empty field";} else {

我有这个(注意文本框是一个数组)

echo”
然后在验证代码中,我有以下内容:

if(isset($_POST['Save']))
{
    if($_POST['allocas']=='')
    {
    echo "<table border='1'><tr><td>mikies</td></tr></table>";
    echo "Empty field";} 
    else 
    {
    echo "<table border='1'><tr><td>mikies</td></tr></table>";
    echo "Saved!";}
}
if(设置($\u POST['Save']))
{
如果($_POST['allocas']='')
{
回声“麦克”;
回显“空字段”;}
其他的
{
回声“麦克”;
回显“已保存!”;}
}
我的问题是
($\u POST['allocas']=='
似乎没有做这项工作,因为它没有验证,无论我在
allocas
中是否有值,它都会转到'else'验证并打印
保存!

如果我通过将名称改为
name='allocas'
而不是
name='allocas[]'
将文本框从数组更改为独立文本,那么它就可以工作了。因此,问题是我对数组值的验证不正确,正在努力寻找替代方法。您能提供帮助吗

注意:所有这些都不是硬编码和动态填充的。(在
echo
标记内直播)

谢谢你的改变

name='allocas[]' 

在您的表单/输入中。

如果您的输入字段是一个“数组”,则以后不能像检查字符串一样检查它

if(isset($_POST['Save']))
{
    if(count($_POST['allocas']) == 0)
    {
        echo "<table border='1'><tr><td>mikies</td></tr></table>";
        echo "Empty field";
    } else 
    {
        echo "<table border='1'><tr><td>mikies</td></tr></table>";
        echo "Saved!";
    }
}
if(设置($\u POST['Save']))
{
如果(计数($_POST['allocas'])==0)
{
回声“麦克”;
回声“空场”;
}否则
{
回声“麦克”;
回声“救了!”;
}
}

如果要尝试该值是否为空,请尝试以下操作

if (empty($_POST['allocas']))

要检查PHP中是否有某个值,可以使用
empty
函数。我还建议检查该值是否确实是一个数组(你永远不知道人们会对表单做什么)

参考资料


您应该迭代每个POST值并验证每个值:

// Sanity check
if(is_array($_POST['allocas'])) {
  foreach($_POST['allocas'] as $oneTextFieldsValue) {
    // Validate $oneTextFieldsValue...
  }
}

使用
allocas[]
作为字段名迫使PHP将其视为一个潜在的多值字段,它将创建一个数组。无论有多少实际字段使用该名称,都将创建该数组

当你这样做的时候

$_POST['allocas'] == ''
实际上,您正在将数组与字符串进行比较。由于这种比较毫无意义,PHP会将数组类型转换为原始字符串
ARRAY
(字面上的字母
a
r
r
,等等),其结果为false

您需要计算数组中有多少个值,然后检查这些值是否为“空”,例如


出于好奇:为什么要将文本字段设置为数组?我从来没有这样做过,可能是因为它有它的用途,了解这一点会很好。假设我可以从一个下拉列表中选择一个值,该下拉列表包含数据库中的一系列数字,在选择后,你必须在Uitehanks中打印xxx个文本框,但我仍然看不到h现在,从下拉列表中选择一个值(可能是一个
)转换为将文本框转换为数组。我的意思是,只有一个好的旧循环可以做到这一点。无论如何,如果你写过关于这个的文章(advantanges/disadvantanges)请考虑更新这个问题。我的故事实际上是一个更复杂的故事。但是我明白你的意思。但是对我来说,这个选择不起作用。我试过了。
if(isset($_POST['allocas']) && is_array($_POST['allocas']) && !empty($_POST['allocas'])) {
    //Yay! Something is here
}
// Sanity check
if(is_array($_POST['allocas'])) {
  foreach($_POST['allocas'] as $oneTextFieldsValue) {
    // Validate $oneTextFieldsValue...
  }
}
$_POST['allocas'] == ''
if (count($_POST['allocas']) > 0) {
   ... got some values
   foreach($_POST['allocas'] as $value) {
      ... test $value
   }
}