Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


 Поделиться

Рекомендованные сообщения

Привет всем.
Есть такая нужда, чтобы номер телефона при регистрации проверялся по базе (как 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()

 

Ссылка на комментарий
Поделиться на других сайтах

5 минут назад, OCappLab сказал:

Ищем функцию 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.

Ссылка на комментарий
Поделиться на других сайтах


9 часов назад, drmodjo сказал:

 

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

Не за что

Ссылка на комментарий
Поделиться на других сайтах

  • 4 года спустя...

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.