Ruslan.nut
Всем доброго времени суток!) Я новичок в PHP.
Есть вопрос. Есть сайт, на нём потенциальные клиенты оставляют заявку. Заявка отправляется в CRM, Google Таблицу и нужно чтобы она отправлялась в БД MySQL.
Написал скрипт авторизации и добавления заявки. Заявки добавляются. Но бывает скрипт php думает очень долго и не пойму почему, после закрытия и открытия страницы скрипт начинает работать корректно.
Так вот сам вопрос, как сделать так, чтобы на всякий случай все ошибки игнорировались и конечный пользователь видел сообщения об успешной отправке заявки? И как-то ограничить время работу скрипта.
PHP:
class DB { private static function connectDB() { return new PDO(‘mysql:dbname=логин;host=localhost’, ‘,bd’, ‘pass’); } $stmt = self::connectDB()->prepare($query); $stmt->execute($params); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); return $data; } $sth = self::connectDB()->prepare($query); $data = $sth->fetchAll(PDO::FETCH_COLUMN); return $data; } }PHP:
class Auth { public function check($data) { #Подключаем БД include(«../bd/bd.php»); $dbh = new DB; /// КОНСТРУКТОР $result[«id»] = $this->check_company_id($data[«id»], $dbh); #Смотрим есть ли такой id $result[«token»] = $this->check_company_token($data[«id»], $data[«token»], $dbh); #Сверяем токены $result[‘auth’] = $this->check_auth($data, $result); #Проверяем результат авторизации return $result[‘auth’]; #Возвращаем результат } else { return false; } } function check_company_id($id, $dbh) { /*Проверка есть ли текущий ID в таблице. Если есть вернуть true*/ #Запрос к БД $arr_id = $dbh->query_fetchAll_column(«SELECT `id` FROM `company`»); #Ищем совпадения foreach ($arr_id as $key => $value) { if ($arr_id[$key] == $id) { return true; } } #Если ничего не найдено return false; } function check_company_token($id, $token, $dbh){ /*Сверяем токен авторизации. Если есть вернуть true*/ #Запрос к БД $secret_key = $dbh->query_fetchAll_column(«SELECT `secret_key` FROM `company` WHERE `id` = :id», array(‘id’ => $id)); #Проверяем совпадение if ($secret_key[0] == $token) { return true; } else { return false; } } function check_auth($data, $result){ if ($result[«id»] == true and $result[«token»] == true) { return true; } else{ return false; } } else { return false; } } /// ДЕБАГ //echo «<br><br><b>Результат поиска ID:</b> «.$result[«id»].»<br>»; //echo «<b>Результат сверки токена с секретным ключом:</b> «.$result[«token»].»<br>»; }PHP:
/// ВЫВОВ КЛАССОВ include(«../core/auth.php»); #Класс авторизации $auth = new Auth(); /// КОНСТРУКТОР $result[«auth»] = $auth->check($_GET); #Авторизовываемся (Возврат true или false)
MouseZver
PHP:
<?php declare ( strict_types = 1 ); /* php код … */
Ruslan.nut
Спасибо!)
Вероломство
за что, за вывод всех ошибок?
— Добавлено —за пробелы доплачивают?
Ruslan.nut
В смысле?
MouseZver
Ruslan.nut
Да не, так удобнее читать сейчас)
_ne_scaju_
ты хотел закрыть вывод ошибок для пользователя, тебе предложили вывести все ошибки для пользователя)
У нас маусзверь умный мужик, так что верь ему, плохому не посоветует, но для реального сайта лучше убрать вывод ошибок, для конечного пользователя.
roboformation
https://www.php.net/manual/ru/function.error-reporting
ADSoft
ну и кстати — условия надо в сам запрос передавать, а не выбирать ВСЕ значения а потом в цикле сравнивать
PHP:
#Запрос к БД $arr_id = $dbh->query_fetchAll_column(«SELECT `id` FROM `company`»); #Ищем совпадения foreach ($arr_id as $key => $value) { if ($arr_id[$key] == $id) { return true; } }заменяется одним запросом
Код (Text):
SELECT `id` FROM `company` WHERE id = $id
Ruslan.nut
Понял. Спасибо!)
Да конечный пользователь их не увидит. С сайта отправляется webhook на обработчик. Мне нужно, чтобы если вдруг в обработчике ошибка, то функция отправки на сайте продолжила работу.
— Добавлено —Благодарю!)
— Добавлено —А что вернёт функция по результатам? Если результат верный и не верный? true или false?
Вероломство
научись логически мыслить
смотри: если функция возвращает true и больше ничего не возвращает, то проверить обратное можно проверив её на НЕ true
ферштейн?
Ruslan.nut
Да, это то логично))
Sail
@Ruslan.nut, прочитайте про Ошибки и Исключения.
Если научиться их перехватывать и обрабатывать — можно будет сделать так, чтобыИли же выводить пользователю сообщение соответствующее ситуации, а так-же писать в лог отладочную информацию о содержании переменных и других условиях, при которых произошёл казус (инцидент).
Ruslan.nut
Понял, спасибо! Буду изучать
Sail
Например, для обработки ошибок, вызванных при работе с СУБД посредством PHP: PDO, существует PHP: PDOException