Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проверка номера телефона по базе


Recommended Posts

Привет всем.
Есть такая нужда, чтобы номер телефона при регистрации проверялся по базе (как email), дабы не было дубликатов. Подскажите пожалуйста в каких файлах и что добавить. Заранее благодарю. (OpenCart 2.3.0.2, стандартный шаблон)

Надіслати
Поділитися на інших сайтах


15 минут назад, drmodjo сказал:

Подскажите пожалуйста в каких файлах и что добавить.

Файл catalog/controller/account/register.php

В функцию validate() по аналогии:

if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match($this->config->get('config_mail_regexp'), $this->request->post['email'])) {
	$this->error['email'] = $this->language->get('error_email');
}

if ($this->model_account_customer->getTotalCustomersByEmail($this->request->post['email'])) {
	$this->error['warning'] = $this->language->get('error_exists');
}

Затем в файле catalog/model/account/customer.php

Ищем функцию getTotalCustomersByEmail() и по аналогии делаем для телефона.

 

Это если не заморачиватся с форматом телефона.

При поиске и записи телефона, обязательно записывайте его в одном формате. Так как может не сработать Ваша проверка

Надіслати
Поділитися на інших сайтах

2 минуты назад, drmodjo сказал:

В этом файле очень много кода связанного с email.

Внимательно перечитайте мое сообщение выше

4 часа назад, OCappLab сказал:

Затем в файле catalog/model/account/customer.php

Ищем функцию getTotalCustomersByEmail()

 

Надіслати
Поділитися на інших сайтах

4 минуты назад, drmodjo сказал:

Если использовать только эту часть кода, то опенкарт ругается.

Вы по аналогии сделайте.

Тоесть создайте функцию, например, getTotalCustomersByPhone

И проверку делайте уже использую эту функцию.

А в контроллере, ее уже использовать по-аналогии с

4 часа назад, OCappLab сказал:

В функцию validate() по аналогии:


if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match($this->config->get('config_mail_regexp'), $this->request->post['email'])) {
	$this->error['email'] = $this->language->get('error_email');
}

if ($this->model_account_customer->getTotalCustomersByEmail($this->request->post['email'])) {
	$this->error['warning'] = $this->language->get('error_exists');
}

 

Надіслати
Поділитися на інших сайтах

1 час назад, OCappLab сказал:

 

Я очень извиняюсь.

Что-то никак не получается. Могу я вам прислать эти два файла (register.php и customer.php), сделаете правку, чтобы я наглядно увидел а проверку других полей при регистрации уже сделаю по шаблону? Буду вам очень благодарен. Замучали некоторые пользователи, а это их ограничит.

Змінено користувачем drmodjo
Надіслати
Поділитися на інших сайтах


1 час назад, drmodjo сказал:

чтобы я наглядно увидел а проверку других полей при регистрации уже сделаю по шаблону?

У вас в файлах есть шаблон.

 

Копируете:

1 час назад, OCappLab сказал:

В функцию validate() по аналогии:


if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match($this->config->get('config_mail_regexp'), $this->request->post['email'])) {
	$this->error['email'] = $this->language->get('error_email');
}

if ($this->model_account_customer->getTotalCustomersByEmail($this->request->post['email'])) {
	$this->error['warning'] = $this->language->get('error_exists');
}

Эти строчки, получится, примерно:

if (utf8_strlen($this->request->post['telephone']) > 96) {
	$this->error['phone'] = $this->language->get('error_phone'); //тут нужно не забыть языковую переменную в файл добавить
}

if ($this->model_account_customer->getTotalCustomersByPhone($this->request->post['telephone'])) {
	$this->error['warning'] = $this->language->get('error_exists');
}

И в модели так же само, по аналогии создаем функцию:

public function getTotalCustomersByPhone($phone) {
	$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE LOWER(telephone) = '" . $this->db->escape(utf8_strtolower($phone)) . "'");

	return $query->row['total'];
}

В идеале, конечно нужно чтоб телефоны были одного формата, чтоб проверка успешная была.

А то кто-то напишет 555-55-55, а кто-то 5555555

Надіслати
Поділитися на інших сайтах

3 часа назад, OCappLab сказал:

 

Благодарю. Получилось.
Вот только теперь надо править еще в catalog/controller/checkout/register.php. (тут поправил)
А в catalog/model/checkout/customer.php такого не существует. Как тут быть?

 

Надіслати
Поділитися на інших сайтах


5 часов назад, OCappLab сказал:

 

 

1 час назад, drmodjo сказал:

Вот только теперь надо править еще в catalog/controller/checkout/register.php. (тут поправил)
А в catalog/model/checkout/customer.php такого не существует. Как тут быть?

Соответственно выдает такую ошибку.

(PHP Notice:  Indirect modification of overloaded property ControllerCheckoutRegister::$error has no effect in .../catalog/controller/checkout/register.php on line 162)

Помогите пожалуйста.

Надіслати
Поділитися на інших сайтах


7 часов назад, OCappLab сказал:

 

 

3 часа назад, drmodjo сказал:

Вот только теперь надо править еще в catalog/controller/checkout/register.php. (тут поправил)
А в catalog/model/checkout/customer.php такого не существует. Как тут быть?

В общем с этим тоже разобрался.
Единственная проблема осталась в аккаунте пользователя. Нет возможности отредактировать информацию пользователя не сменив номер. Так как пишет:

Данный номер телефона уже зарегистрирован!
Как сделать, чтобы он писал ошибку только в том случае, если есть идентичный номер у других пользователей, а на свой чтобы не ругался? (Как email)

Надіслати
Поділитися на інших сайтах


8 часов назад, OCappLab сказал:

 

 

4 часа назад, drmodjo сказал:

Вот только теперь надо править еще в catalog/controller/checkout/register.php. (тут поправил)
А в catalog/model/checkout/customer.php такого не существует. Как тут быть?

28 минут назад, drmodjo сказал:

В общем с этим тоже разобрался.
Единственная проблема осталась в аккаунте пользователя. Нет возможности отредактировать информацию пользователя не сменив номер. Так как пишет:

Данный номер телефона уже зарегистрирован!
Как сделать, чтобы он писал ошибку только в том случае, если есть идентичный номер у других пользователей, а на свой чтобы не ругался? (Как email)

Все, разобрался )). Большое спасибо вам OCappLab.

Надіслати
Поділитися на інших сайтах


  • 4 years later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.