Игнорирование ошибок в php

Ruslan.nut

Всем доброго времени суток!) Я новичок в PHP.

Есть вопрос. Есть сайт, на нём потенциальные клиенты оставляют заявку. Заявка отправляется в CRM, Google Таблицу и нужно чтобы она отправлялась в БД MySQL.

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

Так вот сам вопрос, как сделать так, чтобы на всякий случай все ошибки игнорировались и конечный пользователь видел сообщения об успешной отправке заявки? И как-то ограничить время работу скрипта.

PHP:
  1. class DB {
  2.  
  3.     private static function connectDB() {
  4.         return new PDO(‘mysql:dbname=логин;host=localhost’, ‘,bd’, ‘pass’);
  5.     }
  6.  
  7.     public static function query($query, $params = array()) {
  8.         $stmt = self::connectDB()->prepare($query);
  9.         $stmt->execute($params);
  10.         $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
  11.         return $data;
  12.     }
  13.  
  14.     public function query_fetchAll_column($query, $params = array()){
  15.         $sth = self::connectDB()->prepare($query);
  16.         $sth->execute((array) $params);
  17.         $data = $sth->fetchAll(PDO::FETCH_COLUMN);
  18.         return $data;
  19.     }
  20.  
  21. }
PHP:
  1. class Auth
  2. {
  3.  
  4.     public function check($data)
  5.     {
  6.         if (!empty($data[«id»] and !empty($data[«token»]))) {
  7.  
  8.             #Подключаем БД
  9.            include(«../bd/bd.php»);
  10.             $dbh = new DB;
  11.  
  12.             /// КОНСТРУКТОР
  13.             $result[«id»] = $this->check_company_id($data[«id»], $dbh); #Смотрим есть ли такой id
  14.            $result[«token»] = $this->check_company_token($data[«id»], $data[«token»], $dbh); #Сверяем токены
  15.            $result[‘auth’] = $this->check_auth($data, $result); #Проверяем результат авторизации
  16.            return $result[‘auth’]; #Возвращаем результат
  17.        } else {
  18.             return false;
  19.         }
  20.     }
  21.  
  22.     function check_company_id($id, $dbh)
  23.     {
  24.  
  25.         /*Проверка есть ли текущий ID в таблице. Если есть вернуть true*/
  26.  
  27.         #Запрос к БД
  28.        $arr_id = $dbh->query_fetchAll_column(«SELECT `id` FROM `company`»);
  29.  
  30.         #Ищем совпадения
  31.        foreach ($arr_id as $key => $value) {
  32.             if ($arr_id[$key] == $id) {
  33.                 return true;
  34.             }
  35.         }
  36.  
  37.         #Если ничего не найдено
  38.        return false;
  39.  
  40.     }
  41.     function check_company_token($id, $token, $dbh){
  42.  
  43.         /*Сверяем токен авторизации. Если есть вернуть true*/
  44.  
  45.         #Запрос к БД
  46.        $secret_key = $dbh->query_fetchAll_column(«SELECT `secret_key` FROM `company` WHERE `id` = :id», array(‘id’ => $id));
  47.  
  48.         #Проверяем совпадение
  49.        if ($secret_key[0] == $token) {
  50.             return true;
  51.         } else {
  52.             return false;
  53.         }
  54.  
  55.     }
  56.     function check_auth($data, $result){
  57.         if (!empty($data[«id»] and !empty($data[«token»]))) {
  58.             if ($result[«id»] == true and $result[«token»] == true) {
  59.                 return true;
  60.             } else{
  61.                 return false;
  62.             }
  63.         } else {
  64.             return false;
  65.         }
  66.     }
  67.  
  68.     /// ДЕБАГ
  69.     //echo «<br><br><b>Результат поиска ID:</b> «.$result[«id»].»<br>»;
  70.     //echo «<b>Результат сверки токена с секретным ключом:</b> «.$result[«token»].»<br>»;
  71.  
  72. }
PHP:
  1.   /// ВЫВОВ КЛАССОВ
  2.     include(«../core/auth.php»); #Класс авторизации
  3.    $auth = new Auth();
  4.  
  5.     /// КОНСТРУКТОР
  6.     $result[«auth»] = $auth->check($_GET); #Авторизовываемся (Возврат true или false)
  7.  
  8.     var_dump($result[«auth»]);
 

MouseZver

PHP:
  1. <?php
  2.  
  3. declare ( strict_types = 1 );
  4.  
  5. error_reporting ( E_ALL );
  6.  
  7. /* php код … */
 

Ruslan.nut

Спасибо!)

 

Вероломство

за что, за вывод всех ошибок? :)
— Добавлено —

за пробелы доплачивают? :)

 

Ruslan.nut

В смысле?

 

MouseZver

 

Ruslan.nut

Да не, так удобнее читать сейчас)

 

_ne_scaju_

ты хотел закрыть вывод ошибок для пользователя, тебе предложили вывести все ошибки для пользователя)
У нас маусзверь умный мужик, так что верь ему, плохому не посоветует, но для реального сайта лучше убрать вывод ошибок, для конечного пользователя.

 

roboformation

ADSoft

ну и кстати — условия надо в сам запрос передавать, а не выбирать ВСЕ значения а потом в цикле сравнивать

PHP:
  1.  #Запрос к БД
  2.       $arr_id = $dbh->query_fetchAll_column(«SELECT `id` FROM `company`»);
  3.         #Ищем совпадения
  4.       foreach ($arr_id as $key => $value) {
  5.             if ($arr_id[$key] == $id) {
  6.                 return true;
  7.             }
  8.         }

заменяется одним запросом

Код (Text):
  1. 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

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *