@Kutuz25

Как выполнить проверку не дублируя код?

Всем привет. В программировании новичок, пытаюсь сделать простенький код добавления кошельков на сайте. Появилась проблема проверки дальнейших данных, на данный момент код выглядит вот так:
$error = '';
$ps = htmlspecialchars($_POST['system']);

if (empty($ps) || !isset($_POST['purse'])) {
    $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Ошибка! Обновите страницу</div></div>';
}
$purse = htmlspecialchars($_POST['purse']);

$paymentSystems = ['payeer', 'yoomoney',];

if (!in_array($ps, $paymentSystems)) {
    $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Система указана неверно</div></div>';
} elseif ($ps == 'payeer') {
    if (substr($purse,0,1) != "P" || !preg_match("#^[0-9]{7,12}$#", substr($purse,1))) {
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Кошелек указан неверно</div></div>';
    }
} elseif ($ps == 'yoomoney') {
    if (!preg_match("#^41001[0-9]{7,17}$#", $purse)) {
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Кошелек указан неверно</div></div>';
    }
} else {
	$result = $pdo->prepare("SELECT * FROM `zka_purse` WHERE `purse` = ? AND `system` = ?");
	$result->execute([$purse,$ps]);
	if($result->rowCount() != 0){
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Данный кошелек занят</div></div>';
    } else {
		$result = $pdo->prepare("SELECT * FROM `zka_purse` WHERE `user_id` = ? AND `system` = ?");
		$result->execute([$uID,$ps]);
		if($result->rowCount() != 0){
            $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Для редактирования обратитесь в поддержку</div></div>';
        }
    }
}
if ($error != '') {
    die(json_encode([
        'status' => 'error',
        'message' => $error
    ]));
}

# Сохранение кошелька
$result = $pdo->prepare("INSERT INTO `zka_purse` (`user_id`,`system`,`purse`) VALUES (?,?,?)")->execute([$uID,$ps,$purse]);

die(json_encode([
    'status' => 'success',
    'message' => '<div class="toast-top-right" id="toast-container"><div class="toast toast-success">Кошелек успешно сохранен</div></div>'
]));


Проблема в том, что после проверки на валидность кошелек можно сохранять хоть 20 раз, т.к. дальнейшая проверка не идет она расположена в самом низу. А если после каждого кошелька делать проверку на занят кошелек или нет / попытка редактирования, то получится слишком много кода. Пробовал делать так, работает, но правильно ли это или есть способ получше?
if (!in_array($ps, $paymentSystems)) {
    $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Система указана неверно</div></div>';
} elseif ($ps == 'payeer') {
    if (substr($purse,0,1) != "P" || !preg_match("#^[0-9]{7,12}$#", substr($purse,1))) {
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Кошелек указан неверно</div></div>';
    } $ok;
} elseif ($ps == 'yoomoney') {
    if (!preg_match("#^41001[0-9]{7,17}$#", $purse)) {
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Кошелек указан неверно</div></div>';
    } $ok;
}

$ok =
	$result = $pdo->prepare("SELECT * FROM `zka_purse` WHERE `purse` = ? AND `system` = ?");
	$result->execute([$purse,$ps]);
	if($result->rowCount() != 0){
        $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Данный кошелек занят</div></div>';
    } else {
		$result = $pdo->prepare("SELECT * FROM `zka_purse` WHERE `user_id` = ? AND `system` = ?");
		$result->execute([$uID,$ps]);
		if($result->rowCount() != 0){
            $error = '<div class="toast-top-right" id="toast-container"><div class="toast toast-error">Для редактирования обратитесь в поддержку</div></div>';
        }
    };
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы