Konstantin18ko
@Konstantin18ko
Стоматолог

Почему php сбрасывает значение селектора?

Есть форма:
<?php
if (isset($_POST['send'])) {
$type_of_payment = $_POST['type_of_payment'];
$in_card_number = $_POST['in_card_number'];
if (!empty($type_of_payment&&!empty($in_card_number){
echo 'Заполнено!';
}else {
        echo 'Одно из полей не заполнено!';
        $check = TRUE;
    }
if ($check) {
    ?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                    <div>
                        <b>
                            Вид оплаты: 
                        </b>
                        <select name="type_of_payment" form="new_patient">
                            <option value="ОМС" selected="selected">ОМС</option>
                            <option value="ВМП">ВМП</option>
                            <option value="Х/Р">Х/Р</option>
                        </select>
                    </div>
                    <div>
                        <b>
                            № медицинской карты стационарного больного:
                        </b>
                        <input type="number" name="in_card_number" value="<?php echo $in_card_number;?>"/>
                    </div>
                    <input type="submit" name="send" id="send" value="Отправить"/>
                </form>


Почему при отправке формы значение селектора сбрасывается, а значение инпута нет? Как можно это исправить?

Еще выскакивает ошибка, если селектор не выбран Notice: Undefined index: type_of_payment in F:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\pages\patient\new_patient.php on line 3
Третья линия это и есть $type_of_payment
  • Вопрос задан
  • 334 просмотра
Решения вопроса 1
@AlikDex
Эхх, пришлось немного наговнокодить ;D
<?php
$paymentOptions = [
	'ОМС',
	'ВМП',
	'Х/Р',
];

$errors = [];

if (isset($_POST)) {

	if (empty($_POST['type_of_payment']) || !in_array($_POST['type_of_payment'], $paymentOptions)) {
		$errors[] = 'Необходимо правильно заполнить тип оплаты';
	}

	$in_card_number = intval($_POST['in_card_number']);
	
	if ($in_card_number === 0) {
		$errors[] = 'Необходимо правильно заполнить номер медицинской карты';
	}
	
	if (empty($errors)) {
		// вставляем в бд или че там делаем. Потом редиректим на экран "все ништяк так держать"
	}
}

?>

<form method="post" action="">
	<?php if (!empty($errors)): ?>
		<?php foreach ($errors as $error): ?>
			<?= htmlspecialchars($error) ?><br>
		<?php endforeach; ?>
	<?php endif; ?>

	<div>
		<b>Вид оплаты: </b>
		<select name="type_of_payment">
			<?php foreach ($paymentOptions as $paymentOption): ?>
				<option value="<?= $paymentOption ?>" <?= (isset($_POST['type_of_payment']) && $paymentOption === $_POST['type_of_payment'])? 'selected' : ''?>><?= $paymentOption ?></option>
			<?php endforeach; ?>
		</select>
	</div>
	<div>
		<b>№ медицинской карты стационарного больного: </b>
		<input type="number" name="in_card_number" value="<?php echo $in_card_number;?>">
	</div>

	<input type="submit" name="send" id="send" value="Отправить">
</form>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы