0

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

echo "<td><input style='width:60px' type='text' name='allocas[]' id='vtext' class='sc_two' size='80' maxlength='5'></td>

然后在验证码中我有以下内容;

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!";}
}

我的问题($_POST['allocas']==''似乎没有完成这项工作,因为它没有验证并且无论我是否具有价值,allocas它都会进入 'else' 验证和打印Saved!

name='allocas'如果我通过将名称更改为而不是将文本框从数组更改为独立文本,name='allocas[]'则它可以工作。所以问题是我对数组值的验证不正确并且努力寻找替代方法。你能帮我吗?

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

谢谢

4

6 回答 6

1

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

当你这样做

$_POST['allocas'] == ''

您实际上是在将 ARRAY 与字符串进行比较。由于这种比较没有意义,PHP 会将数组类型强制转换为原始字符串Array(字面意思是字母Arr等...),其计算结果为 false。

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

if (count($_POST['allocas']) > 0) {
   ... got some values
   foreach($_POST['allocas'] as $value) {
      ... test $value
   }
}
于 2013-07-23T16:58:03.013 回答
0

改变

name='allocas[]' 

name='allocas' 

在您的表单/输入中。

于 2013-07-23T16:55:49.570 回答
0

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

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!";
    }
}
于 2013-07-23T16:55:51.503 回答
0

如果您想尝试该值是否为空,请尝试以下

if (empty($_POST['allocas']))
于 2013-07-23T16:56:04.087 回答
0

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

if(isset($_POST['allocas']) && is_array($_POST['allocas']) && !empty($_POST['allocas'])) {
    //Yay! Something is here
}

参考

is_array

空的

于 2013-07-23T16:56:57.663 回答
0

您应该遍历每个 POST 值并验证每个值:

// Sanity check
if(is_array($_POST['allocas'])) {
  foreach($_POST['allocas'] as $oneTextFieldsValue) {
    // Validate $oneTextFieldsValue...
  }
}
于 2013-07-23T16:56:57.670 回答