PHP цикл foreach в проверке формы - PullRequest
0 голосов
/ 09 октября 2011

У меня уже работает проверка формы, мне просто нужно применить класс CSS к полю ввода, чтобы дать ему красную рамку при возникновении ошибки. Есть 2 возможных ошибки. Каждый из них отлично работает в отдельности, но когда срабатывают обе ошибки, только один из блоков получает границу. Использовал этот же код в другой форме, но не в функции, и он работал нормально. Чего мне не хватает?

//function stackoverflow($pet, $grab, $errors_NaN)
...
...
//testing here to make sure all errors are in the array
    var_dump($errors_NaN);
        echo '<br />';
        foreach($errors_NaN as $error){
            echo $error . '<br />';
        }


        echo '<div class="edit_col3">';
        echo '<div class="formrow">';
        echo '<label for="weight">Weight</label>'; //no text validation
            echo '<input ';


            if (!empty($errors_NaN)) {
                foreach($errors_NaN as $error){
                    if($error == 'weight_NaN'){
                        echo 'class="edit_mfwa"';
                                              //this triggers if ONLY weight_NaN is in the array but not if both weight_NaN and age_NaN
                    }
                    else {
                        echo 'class="weight"'; 
                    }
                }
            }
            elseif (empty($errors_NaN)){
                echo 'class="weight"';
            }


            echo ' type="text" name="weight" value="' . $grab['weight'] . '" id="weight" />';
            echo '<div class="pet_units">lbs</div>';
            echo '<div class="clear"></div>';
        echo '</div>';// end form row

        echo '<div class="formrow">';
        echo '<label for="age">Age</label>';  //no text validation
            echo '<input ';


            if (!empty($errors_NaN)) {
                foreach($errors_NaN as => $error){
                    if($error == 'age_NaN'){
                        echo 'class="edit_mfwa"';
                                              //this triggers properly in both situation
                    }
                    else {
                        echo 'class="age"';
                    }
                }
            } 
            elseif (empty($errors_NaN)) {
                echo 'class="age"';
            }


            echo ' type="text" name="age" value="' .  $grab['age'] . '" id="age" />';
            echo '<div class="pet_units">years</div>';
            echo '<div class="clear"></div>';
        echo '</div>'; //end form row

Комментарий в нескольких местах, где кажется, что проблема возникает

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Если в вашем массиве присутствуют и weight_NaN, и age_NaN, вы сработаете оба (поэтому также используйте оператор else: echo 'class = "weight"';

Я бы сказал, если вы используете следующее:

        $useClass = 'class="weight"';

        if (!empty($errors_NaN)) {
            foreach($errors_NaN as $error){
                if($error == 'weight_NaN'){
                    $useClass 'class="edit_mfwa"';
                }
            }
        }

        echo $useClass;

Это будет работать правильно:)!

1 голос
/ 09 октября 2011

Попробуйте это:

echo '<div class="edit_col3">';
echo '<div class="formrow">';
echo '<label for="weight">Weight</label>'; //no text validation
echo '<input class="'.(in_array('weight_NaN', $errors_NaN)?'edit_mfwa':'weight';
echo '" />';
0 голосов
/ 09 октября 2011

заменить:

if (!empty($errors_NaN)) {
            foreach($errors_NaN as => $error){
                if($error == 'age_NaN'){
                    echo 'class="edit_mfwa"';
                                          //this triggers properly in both situation
                }
                else {
                    echo 'class="age"';
                }
            }
        } 
        elseif (empty($errors_NaN)) {
            echo 'class="age"';
        }

с этим:

if (!empty($errors_NaN)) {
                foreach($errors_NaN as $error){
                    if($error == 'age_NaN'){
                        echo 'class="edit_mfwa"';
                                              //this triggers properly in both situation
                    }
                    else {
                        echo 'class="age"';
                    }
                }
            } 

Чтобы увидеть, где вы допустили ошибку: foreach($errors_NaN as => $error){ -> foreach($errors_NaN as $error){

...