Всем привет. В программировании новичок, пытаюсь сделать простенький код добавления кошельков на сайте. Появилась проблема проверки дальнейших данных, на данный момент код выглядит вот так:
$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>';
}
};