如果输入字段包含占位符文本,则从变量中删除数据

时间:2012-03-13 13:28:08

标签: php forms validation foreach

我正在使用以下代码验证'set'的输入字段。每组4个字段(宽度/高度/长度/重量)。 如果我的一组输入字段为空,那么它将不会在我的最终 $ all变量中显示该行数据。

以下是关于此主题的上一个主题:Removing Data from Variable if Input Fields incomplete - PHP - 这很有效。

但是,这次我使用“占位符”文本(输入字段 value 属性),因此我需要使用PHP来检查该占位符值是否存在。

这是我的伪代码,但我不确定如何使用常规PHP实现:

if ((pNUM-VALUEheight = "Height (cm)" OR pNUM-VALUEwidth = "Width (cm)" OR pNUM-VALUElength = "Length (cm)" OR pNUM-VALUEweight = "Weight (kg)"))
Then 
// Don't store in $all variable
Else
// Do store set of values in $all variable
End If

这是我目前的PHP代码:

    ...
    $ierrors = array();
    $all = '';

    // Loop over the values 1 through 20
    foreach( range( 1, 20) as $i)
    {
        // Create an array that stores all of the values for the current number
        $values = array( 
            'p' . $i . 'height' => $_POST['p' . $i . 'height'], 
            'p' . $i . 'width' => $_POST['p' . $i . 'width'], 
            'p' . $i . 'length' => $_POST['p' . $i . 'length'], 
            'p' . $i . 'weight' => $_POST['p' . $i . 'weight']
        );

        // Assume all values are empty.
        $allEmpty = true;

        // Validate every value
        foreach( $values as $key => $value)
        {
            if( empty($value))
                $ierrors[] = "Value $key is not set";
            else
                $allEmpty = false;


            // You can add more validation in here, such as:
            if( !is_numeric( $value) ) 
                $ierrors[] = "Value $key contains an invalid value '$value'";
        }

        // Join all of the values together to produce the desired output
        if (!$allEmpty)
            $all .= implode( '|', $values) . "\n\n";
    }
    ...

非常感谢您的任何指示,或者如果需要明确的话,请告诉我。

谢谢

2 个答案:

答案 0 :(得分:1)

当你使用jQuery时,我会使用一些JavaScript清除提交时的输入字段:

$('form').submit(function() {
    $(this).find('input[type=text]').each(function() {
        var domElement = $(this).get(0);
        if (domElement.value == domElement.defaultValue) {
            domElement.value = '';
        }
    });
});

注意拼写错误,没有测试。

然后,您可以在PHP文件中检查空字符串,而不必显式声明所有可能的值(毕竟它们可能略有变化):     if($ _POST ['inputName'] =='')

OR

你可以使用一个简单的for循环:

for ($i = 0, $numFields = 20; $i <= $numFields; ++$i) {
    if ($_POST['p' . $i . 'width'] != 'Width (cm)' && $_POST['p' . $i . 'height'] != 'Height (cm)') {
        // add row to table
    }
}

答案 1 :(得分:1)

用HTML做这样的事情怎么样:

<input type="text" name="length[]">
<input type="text" name="width[]">

然后你可以在PHP中做这样的事情:

if(array_keys($_POST['length']) != array_keys($_POST['width']))
{
    // Incomplete post
}

$all_keys = array_merge(array_keys($_POST['length']), array_keys($_POST['width']));

foreach($all_keys as $curr_key)
{
    // $_POST['length'][$curr_key]
    // $_POST['width'][$curr_key]
}

使用JS可以在提交之前验证来自客户端的信息。您应该始终检查您的值服务器端。