Как я могу изменить тег класса HTML-элемента с помощью PHP при нажатии кнопки ввода

#php #html

#php #HTML

Вопрос:

Прежде всего, я не могу использовать JavaScript для этого. В рамках этого домашнего задания мы можем использовать только PHP.

Мой текущий код прослушивает input type="submit" сообщение, а затем проверяет, являются ли некоторые текстовые входные данные пустыми или в них что-то есть. В настоящее время это просто повторит некоторый текст, который работает.

Я хочу, чтобы тег класса в текстовых полях ввода изменялся в зависимости от того, заполнены они или нет.

Ниже приведен мой текущий код:

 <?php
        $statusCodeClass='class="form-control"';
        $statusTextClass='class="form-control"';

        // Are all fields fill
        if(isset($_POST['post'])){
            checkStatusCodeIsEmpty();
            checkStatusTextIsEmpty();

            //Check if the fields are empty
            if(checkStatusCodeIsEmpty() amp;amp; checkStatusTextIsEmpty()){
                echo "move to the next page";
            }else{
                echo "not correct yet";
            }           
        }

        function checkStatusCodeIsEmpty(){
            if(empty($_POST['statusCode'])){
                $statusCodeClass='class="form-control is-invalid"';
                return false;
            }else{
                $statusCodeClass='class="form-control is-valid"';
                return true;
            }
        }
        function checkStatusTextIsEmpty(){
            if(empty($_POST['statusText'])){
                $statusTextClass='class="form-control is-invalid"';
                return false;
            }else{
                $statusTextClass='class="form-control is-valid"';
                return true;
            }
        }
    ?>

    <!-- Whole page -->
    <div class="container-fluid px-lg-5">
        <h1>Status Posting System</h1>
        <form method="post">
            <!-- Status code group. This has the label and input -->
            <div class="form-group row">
                <label for="statusCodeInput" class="col-sm-2 col-form-label">Status Code (required):</label>
                <div class="col-sm-4">
                    <input type="text" name="statusCode" <?php echo $statusCodeClass; ?> id="statusCodeInput" placeholder="eg: S0001">
                </div>
            </div>
            <!-- Status text group. This has the label and input-->
            <div class="form-group row">
                <label for="statusText" class="col-sm-2 col-form-label">Status (required):</label>
                <div class="col-sm-8">
                    <input type="text" name="statusText" <?php echo $statusTextClass; ?> id="statusText" placeholder="eg: programming my first assignement">
                </div>
            </div>

            <!-- Button Fields -->
            <div class="form-group">
                <input type="submit" class="btn btn-primary" name="post" value="submit">
            </div>
        </form>
    </div>
  

Ответ №1:

Измените свой PHP-код следующим образом, он будет работать:

 $statusCodeClass = 'class="form-control"';
$statusTextClass = 'class="form-control"';
// Are all fields fill
if (isset($_POST['post'])) {
        $isCodePresent = checkStatusCodeIsEmpty();
        $isTextPresent = checkStatusTextIsEmpty();

        //Check if the fields are empty
        if ($isCodePresent amp;amp; $isTextPresent) {
            echo 'move to the next page';
        } else {
            echo 'not correct yet';
        }

        $statusCodeClass = 'class="form-control '.($isCodePresent ? 'is-valid' : 'is-invalid').'"';
        $statusTextClass = 'class="form-control '.($isTextPresent ? 'is-valid' : 'is-invalid').'"';
    }

    function checkStatusCodeIsEmpty()
    {
        return !empty($_POST['statusCode']);
    }
    function checkStatusTextIsEmpty()
    {
        return !empty($_POST['statusText']);
    }
}
  

Вы пытались назначить переменную в функции, которая не была определена в этой области. Я изменил код, чтобы назначить переменную на основе вывода функции.

Комментарии:

1. Вам нужно определить эти переменные в верхней части, перед первым if-оператором, иначе OP получит «неопределенную переменную» перед отправкой формы.

2. Изменен мой ответ. Спасибо.

Ответ №2:

Возможно, вы могли бы попробовать функции, подобные этой:

  function checkStatusCodeIsEmpty($statusCode){
      $statusCodeClass= 'class="form-control"';
        if(!statusCode){
            $statusCodeClass='class="form-control is-invalid"';
        }else{
            $statusCodeClass='class="form-control is-valid"';
        }
       return $statusCodeClass;
    }
  

Тогда вы можете вызвать это следующим образом

  $statusCodeClass=checkStatusCodeIsEmpty($_POST['statusCode']);
  

То же самое с другой функцией

Комментарии:

1. Это также сработало бы, хотя только с этим кодом это означало бы, что при первом открытии страницы класс будет недействительным. Но это также будет работать хорошо. Спасибо

Ответ №3:

Для этого вы можете использовать встроенные операторы php if-else:

 //Define an error variable on the top of your page
<?php $error = 0; ?>

//Codes here

<div class="form-group row">
    <label for="statusText" class="col-sm-2 col-form-label">Status (required):</label>
    <div class="col-sm-8">
    <?php
        if(empty($_POST['statusText'])){
            echo '<input type="text" name="statusText" class="form-control is-invalid" id="statusText" placeholder="eg: programming my first assignement">';
            $error = 1;
        } else {
            echo '<input type="text" name="statusText" class="form-control is-valid" id="statusText" value="'.$_POST['statusText'].'">';
        }
    ?>
    </div>
</div>

//At the end of the page
<?php
    if($error != 0){
        echo 'Not correct yet';
    } else {
        echo 'Move to the next page';
    }
?>
  

Комментарии:

1. Это не учитывает сообщения, которые выводит OP.

2. Спасибо за напоминание, я отредактировал свой код, чтобы решить эту проблему.