Вы здесь

Помогите пожалуйста с валидацией

0

Добрый вечер уважаемые гуру и гении . Проблема довольно сложная . Хоть я и дружу с php немного но моих знаний очень мало.

Краткое описание:
Пытаюсь сделать проверку и валидацию не по name и uid в таблице users , а по CardNum в таблице user_discounts в учетом того что номера** CardNum** введены заранее.

Длинное описание:
Ситуация такая , у нас есть отдельная таблица в бд, созданная не по канонам , а скорее вручную (творил ее не я) и выглядит она так
Скриншот

Требуется:

  1. Заменить логин пользователя специальным кодом.
  2. Сделать валидацию на уникальность.
    П.С. Как видим, коды уже вбиты в базу, по этому нам нужно только проверить на соответствие.

Вот что я пытался сделать:

  1. Сам хук
function mikan_validation_form_alter (&$form, $form_state, $form_id) {
 if ($form_id == 'user_register') {
  $form['#validate'][] = 'validate_card_pleace';
 }
}
  1. Попытка валидации
function validate_card_pleace($form, $form_state) {
  $account = $form['#user'];
  $name = $form_state['values']['name'];
  $card_number = db_query('SELECT CardNum FROM {user_discounts}');

  if (isset($name, $card_number)) {
    if ($name != $card_number ) {
      form_set_error('name', t('Wrong card number!'));
    } elseif ((bool) db_select('user_discounts')->fields('user_discounts', array('CardNum'))->condition('CardNum', $card_number->CardNum, '<>')->range(0, 1)->execute()->fetchField()) {
        form_set_error('name', t('Card number is already taken.'));
      }
  }
}

Прошу не смущатся вывода ошибок, суть не в них.
Саму эту валидацию я отчасти сам написал, отчасти взял из API Drupal - user.module

И я больше чем на 100% уверен что данный код не сработает.

Немножко опишу что я пытался сделать.
1. В первом if я пытаюсь проверять существует ли что нибудь в данных переменных. И тут же первый вопрос, правильно ли я выбрал ячейку.
2. Далее я пытаюсь выдать ошибку если поле name не равно номеру.
3. elseif уже выдернут user с моей попыткой подправить. Тобиж выдать ошибку если код уже кем то введен.

Что думаете ? В чем мои косяки , подскажите пожалуйсто. Спасибо.

Версия Drupal: 
7.x
Вопрос задан 20.12.2015 - 20:23

$form['#validete'][] = 'validate_card_pleace';

$form['#validate']

$card_number = db_select('SELECT CardNum FROM {user_discounts}');

в db_select() не передается строка запроса

Комментарий оставлен 20.12.2015 - 20:31

Спасибо за корректировку. db_select я уже успел заменить на db_query, а вот редактировать пост не смог сразу почему то.

Комментарий оставлен 20.12.2015 - 20:51

$card_number = db_query('SELECT CardNum FROM {user_discounts}');

В результате в $card_number содержится объект DatabaseStatementBase -перечитайте документацию db_query()
И таким запросом без условий вы хотите получить массив с номерами всех карт?

Комментарий оставлен 20.12.2015 - 21:01
  $card_number = db_select('user_discounts', 'ud')->fields('user_discounts', array('CardNum'));

Полагаю так наверное правильнее . Уф, сложновато конечно, уж явно я не готов к таким делам ... много еше чего не понимаю.

П.С. Я дело в том что птыюсь на этом примере писать , а особо не разгуляешься ... Мне буквально неоткуда больше оттолкнутся . А с учетом того что это вообще отдельно созданная таблица ... даже добавить нечего =(
Даже думаю уже что это тупиковая идея , если совсем в будет не выбраться попытаюсь создать еще одно поле и уже через него пытаться.

Комментарий оставлен 20.12.2015 - 21:20

Если взялись писать код, то нужно научиться его дебажить, чтобы пошагово смотреть результат выполнения каждой строки. Используйте xdebug или в коде вставляйте вывод полученных переменных через var_dump(), dpm(), debug() и других подобных.

Комментарий оставлен 20.12.2015 - 21:23

Вы мне уже очень помогли, спасибо большое, не решение но все же очень важно для меня. На самом деле я по части фронт энда и хоть и знаю синтаксис php , и книга Никсона для меня практически как бибилия , все же именно писать на php и думать как php программист я не умею. А тем более api drupal'а ... я совсем недавно его начал изучать, по этому для меня это вдвойне сложнее... А насчет дебагинга отдльное спасибо, я пользовался только devel'ом и его функцией dvm()

Комментарий оставлен 20.12.2015 - 22:35

Ответы