Удалить данные из переменной, если поля ввода содержат текст заполнителя - PullRequest
2 голосов
/ 13 марта 2012

Я использую следующий код для проверки 'набора' полей ввода . 4 поля в наборе (ширина / высота / длина / вес). Если набор моих полей ввода пуст , то эта строка данных не будет отображаться в моей окончательной переменной $ all .

Вот предыдущая тема по теме: Удаление данных из переменной, если поля ввода не заполнены - PHP - это прекрасно работает.

Однако , на этот раз я использую текст "Placeholder" (поле ввода * атрибут 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 ]

1 голос
/ 13 марта 2012

Как насчет того, чтобы сделать что-то подобное с вашим 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 полезно для проверки информации изклиент перед подачей.Вы также должны всегда проверять свою сторону значений.

1 голос
/ 13 марта 2012

Поскольку вы используете 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
    }
}
...