#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. Спасибо за напоминание, я отредактировал свой код, чтобы решить эту проблему.