Jump to content
drmodjo

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

Recommended Posts

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

Share this post


Link to post
Share on other sites
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() и по аналогии делаем для телефона.

 

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

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

Share this post


Link to post
Share on other sites
4 часа назад, OCappLab сказал:

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, drmodjo сказал:

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

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

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

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

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

 

Share this post


Link to post
Share on other sites
5 минут назад, OCappLab сказал:

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

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

Share this post


Link to post
Share on other sites
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');
}

 

Share this post


Link to post
Share on other sites
Posted (edited)
1 час назад, OCappLab сказал:

 

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

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

Edited by drmodjo

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
3 часа назад, OCappLab сказал:

 

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

 

Share this post


Link to post
Share on other sites
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)

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

Share this post


Link to post
Share on other sites
7 часов назад, OCappLab сказал:

 

 

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

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

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

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

Share this post


Link to post
Share on other sites
8 часов назад, OCappLab сказал:

 

 

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
9 часов назад, drmodjo сказал:

 

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

Не за что

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.