【问题标题】:Remove Data from Variable if Input Fields contain Placeholder text如果输入字段包含占位符文本,则从变量中删除数据
【发布时间】:2012-03-13 13:28:07
【问题描述】:

我正在使用以下代码来验证输入字段的“集合”。每组 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";
    }
    ...

非常感谢这里的任何指示,或者如果需要任何澄清,请告诉我。

谢谢

【问题讨论】:

  • >> jsfiddle.net/bj8Ua/1 虽然这个例子在 JSFiddle 中不起作用,但这是我当前 HTML 和 JS 代码的 sn-p。谢谢。

标签: php forms validation foreach


【解决方案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'] == '')

或

你可以使用一个简单的 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 行的“表单”部分是否应该替换为我的表单 ID/名称?
  • 我应该提到,我正在使用:digitalbush.com/projects/watermark-input-plugin 来生成占位符值,因此它们实际上并未存储在 value="" 属性中。这很复杂吗?
  • 是的,您可以根据需要将其更改为表单的 id,以上内容适用于页面上的所有表单。水印插件应该不是问题。我不知道这个插件,但你已经在 onBlur 和 onFocus 中使用 defaultValue,所以它应该保持正确的值。
  • 好的。我会考虑如何最好地做到这一点。我只是对这一切感到有点困惑。我的 PHP 正在检查空字符串。上面的JS是否应该清除我存​​储水印文本的字段?
【解决方案2】:

用你的 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 可以在提交之前验证来自客户端的信息。您还应该始终检查您的值服务器端。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2015-02-18
    • 2011-11-14
    • 1970-01-01
    • 2014-08-11
    • 2021-07-10
    • 2021-05-16
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多