Используйте PHP, чтобы остановить отправку страницы, если данные отсутствуют или неверны - PullRequest
0 голосов
/ 06 февраля 2019

Я почти закончил свое первое задание по PHP для колледжа.Это была головная боль, но я нахожусь в homestretch.У меня сейчас проблема с проверкой.Я подтвердил, что поля ввода содержат соответствующие данные.Инструкции говорят мне, чтобы убедиться, что если пользователь нажмет кнопку «Подтвердить» без ввода данных, он будет перенаправлен обратно на index.php (та же страница).Прямо сейчас пользователь может нажать «подтвердить» и, даже если поля ввода пусты, он направит их на следующую страницу.Я пробовал несколько способов без успеха.Я прокомментировал последнюю попытку.Я смущен многими примерами, которые я нашел в Интернете, потому что они также включают проверку, которую я уже сделал.Я также нахожу много примеров, которые используют JavaScript.Я должен использовать PHP для всей проверки.Помощь будет очень ценится.

Я обновил свой код сейчас, когда он у меня работает.Но другая проблема была создана.Сообщения об ошибках появляются рядом с полями ввода еще до того, как данные введены ... вместо того, чтобы появляться после отправки страницы с отсутствующими или неточными данными.

<?php

/*
 * Course : Server-Side Programming
 * Student: Sherrie Teague
 * Assignment: HW2 - Quote
 * Date : 2/6/2019
*/

// get the data from the form
$sales_price = filter_input(INPUT_POST,'sales_price', FILTER_VALIDATE_FLOAT);
$discount_percent = filter_input(INPUT_POST,'discount_percent',FILTER_VALIDATE_FLOAT);
$total_price = filter_input(INPUT_POST,'total_price', FILTER_VALIDATE_FLOAT);


/*// validate sales_price
if ($sales_price === FALSE) {
    $sales_priceError = 'Sales price must be a valid amount';
} else if ($sales_price < 1.0) {
    $sales_priceError = 'Sales price must be greater than 0';
} else {
    $sales_priceError = '';
}

// validate discount_percent
if ($discount_percent === FALSE) {
    $discount_percentError = 'Discount percent must be a valid amount';
} else if ($discount_percent < 1.0) {
    $discount_percentError = 'Discount percent must be greater than 0';
} else {
    $discount_percentError = '';
}*/


if( isset( $_POST['confirmSubmit'] )) {
    echo 'Validation Error';
    // or store it in a variable and post later
    $validation_error = 'Validation Error';
}

$sales_valid = true;
$sales_priceError = '';
if ($sales_price === FALSE) {
    $sales_priceError = 'Sales price must be a valid amount';
    $sales_valid = false;
} else if ($sales_price < 1.0) {
    $sales_priceError = 'Sales price must be greater than 0';
    $sales_valid = false;
}

$discount_valid = true;
$discount_percentError = '';
// validate discount_percent
if ($discount_percent === FALSE) {
    $discount_percentError = 'Discount percent must be a valid amount';
    $discount_valid = false;
} else if ($discount_percent < 1.0) {
    $discount_percentError = 'Discount percent must be greater than 0';
    $discount_valid = false;
}


// calculate the discount and the discounted price
$discount_amount = $sales_price * $discount_percent / 100;
$total_price = $sales_price - $discount_amount;

?>

<!doctype html>
<html lang="en">
<head>
    <title>Quote</title>
    <link rel="stylesheet" type="text/css" href="quote.css">
</head>
<body>
<section>
    <h1>Price Quotation</h1>
    <form id="priceForm" name="priceForm" method="post" action=''>
        <label for="sales_price">Sales Price </label>
        <input type="text" id="sales_price" name="sales_price" required
               value="<?php echo $sales_price; ?>"/>
        <?php if (!empty($sales_priceError)) : ?>
            <span style="color:red;background-color: white">
                    <?php echo $sales_priceError; ?>
            </span>
        <?php endif; ?>
        <br/>
        <br/>
        <label for="discount_percent">Discount Percent </label>
        <input type="text" id="discount_percent" name="discount_percent" required
               value="<?php echo $discount_percent; ?>"/>
        <?php if (!empty($discount_percentError)) : ?>
            <span style="color:red;background-color: white">
                    <?php echo $discount_percentError; ?>
                </span>
        <?php endif; ?>
        <p class="discount">Discount Amount <?php echo '&nbsp;&nbsp;&nbsp;&nbsp;$' . number_format($discount_amount, 2); ?></p>
        <p class="total">Total Price <?php echo '&nbsp;&nbsp;&nbsp;&nbsp;$' . number_format($total_price, 2); ?></p>
        <input type="submit" class=inline name="submitButton" id="submitButton" value="Calculate"/>
    </form>

<!--     <form id="confirmForm" name="confirmForm" method="post" action="confirm.php">-->
         <form id="confirmForm" name="confirmForm" method="post" action="<?php echo ( ( $sales_valid && $discount_valid ) ? 'confirm.php' : '' ); ?>">
            <input type="hidden" id="sales_price" name="sales_price" value="<?php echo $sales_price ?>" />
            <input type="hidden" id="discount_amount" name="discount_amount" value="<?php echo $discount_amount ?>"/>
            <input type="hidden" id="total_price" name="total_price" value="<?php echo $total_price ?>"/>
            <input type="submit" class= inline name="confirmSubmit" id="confirmSubmit" value="Confirm"/>
     </form>

    <div>
        <p> Enter price and discount amount and click Calculate</p>
    </div>
</section>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Используйте это и попробуйте отправить форму.Сообщите мне, если проблема не устранена.

if ($ _ POST && $ _POST ['sales_price']! = '' && $ _POST ['discount_amount']! = '') {

// На следующую страницу

var_dump($_POST);exit;

} else {

// вернуться на главную страницу

// header ('Location: http://www.example.com/');

}

0 голосов
/ 06 февраля 2019

Вы можете сделать что-то вроде:

if( isset( $_POST['confirmSubmit'] ) ) {
   echo 'Validation Error';
  // or store it in a variable and post later
   $validation_error = 'Validation Error';
}

$sales_valid = true;
$sales_priceError = '';
if ($sales_price === FALSE) {
    $sales_priceError = 'Sales price must be a valid amount';
    $sales_valid = false;
} else if ($sales_price < 1.0) {
    $sales_priceError = 'Sales price must be greater than 0';
    $sales_valid = false;
}

$discount_valid = true;
$discount_percentError = '';
// validate discount_percent
if ($discount_percent === FALSE) {
    $discount_percentError = 'Discount percent must be a valid amount';
    $discount_valid = false;
} else if ($discount_percent < 1.0) {
    $discount_percentError = 'Discount percent must be greater than 0';
    $discount_valid = false;
}

А затем для вашей формы обновите его до:

<form id="confirmForm" name="confirmForm" method="post" action="<?php echo ( ( $sales_valid && $discount_valid ) ? 'confirm.php' : '' ); ?>">

Это будет эхом, если confirm.php в действии, если оба $sales_valid и $discount_valid имеют значение true, в противном случае возвращается пустое значение, что обновит страницу.

РЕДАКТИРОВАТЬ -------------------- Я бы запустилмой код похож на это, хотя все еще может быть оптимизирован для лучшей работы:

   <?php

// set default values
$sales_price = '';
$sales_valid = true;
$sales_priceError = '';

$discount_percent = '';
$discount_valid = true;
$discount_percentError = '';

$discount_amount = 0;
$total_price = 0;

$validation_error = '';

// check for validation error submit
if( isset( $_POST['confirmSubmit'] ) ) {
   $validation_error = 'Validation Error';
   $discount_valid = false;
   $sales_valid = false;
}
// check for submit 
if( isset( $_POST['submitButton'] ) ) {

    $sales_price = filter_input(INPUT_POST,'sales_price', FILTER_VALIDATE_FLOAT);
    $discount_percent = filter_input(INPUT_POST,'discount_percent',FILTER_VALIDATE_FLOAT);
    $total_price = filter_input(INPUT_POST,'total_price', FILTER_VALIDATE_FLOAT);

    if ($sales_price === FALSE || $sales_price == '') {
        $sales_priceError = 'Sales price must be a valid amount';
        $sales_valid = false;
    } else if ($sales_price < 1.0) {
        $sales_priceError = 'Sales price must be greater than 0';
        $sales_valid = false;
    }

    // validate discount_percent
    if ($discount_percent === FALSE || $discount_percent == '') {
        $discount_percentError = 'Discount percent must be a valid amount';
        $discount_valid = false;
    } else if ($discount_percent < 1.0) {
        $discount_percentError = 'Discount percent must be greater than 0';
        $discount_valid = false;
    }

    // calculate the discount and the discounted price
    $discount_amount = $sales_price * $discount_percent / 100;
    $total_price = $sales_price - $discount_amount;
}    


?>

<!doctype html>
<html lang="en">
<head>
    <title>Quote</title>
    <link rel="stylesheet" type="text/css" href="quote.css">
</head>
<body>
<section>
    <h1>Price Quotation</h1>
    <form id="priceForm" name="priceForm" method="post" action=''>
        <label for="sales_price">Sales Price </label>
        <input type="text" id="sales_price" name="sales_price" value="<?php echo $sales_price; ?>" required />

        <?php

        if ( ! empty($sales_priceError) ) { ?>
            <span style="color:red;background-color: white">
                    <?php echo $sales_priceError; ?>
            </span>
        <?php } ?>
        <br/>
        <br/>
        <label for="discount_percent">Discount Percent </label>
        <input type="text" id="discount_percent" name="discount_percent" value="<?php echo $discount_percent; ?>" required"/>

        <?php if (!empty($discount_percentError)) : ?>
            <span style="color:red;background-color: white">
                    <?php echo $discount_percentError; ?>
                </span>
        <?php endif; ?>
        <p class="discount">Discount Amount <?php echo '&nbsp;&nbsp;&nbsp;&nbsp;$' . number_format($discount_amount, 2); ?></p>
        <p class="total">Total Price <?php echo '&nbsp;&nbsp;&nbsp;&nbsp;$' . number_format($total_price, 2); ?></p>
        <input type="submit" class=inline name="submitButton" id="submitButton" value="Calculate"/>
    </form>
    <form id="confirmForm" name="confirmForm" method="post" action="<?php echo ( ( isset( $_POST['confirmSubmit']) && $sales_valid && $discount_valid ) ? 'confirm.php' : '' ); ?>">
            <input type="hidden" id="sales_price" name="sales_price" value="<?php echo $sales_price ?>" />
            <input type="hidden" id="discount_amount" name="discount_amount" value="<?php echo $discount_amount ?>"/>
            <input type="hidden" id="total_price" name="total_price" value="<?php echo $total_price ?>"/>
            <input type="submit" class= inline name="confirmSubmit" id="confirmSubmit" value="Confirm"/>
     </form>

    <div>
        <p> Enter price and discount amount and click Calculate</p>
    </div>
</section>
</body>
</html>
0 голосов
/ 06 февраля 2019

Возможно, что-то вроде этого:

IF ( got a submission ) {
   do validations
   IF (!valid) {
      show errors or message
   } 
   ELSE  { // its all ok
     show confirmation html (could be included file)
   }
}
ELSE { // no submission  - first time here
   show initial html 
}

Еще один способ взглянуть на это: Прямо сейчас ваша форма отправляется на веб-сайт verify.php.Можно выполнить проверку в index.php и, если она действительна, затем перенаправить на подтверждение.php, НО тогда не нужно, чтобы люди, заканчивающие на файле verify.php, приходили из формы отправки.

Если вы оставите проверкув файле verify.php вам придется перенаправить обратно на index.php, если он не прошел проверку.Можно перенаправить, используя http://php.net/manual/en/function.header.php. Это также может помочь: PHP - Перенаправление на другую страницу .

Лично я предпочитаю хранить его в одном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...