Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка записей в базе данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите написать простенький PHP код. ПОЖАЛУЙСТА!!!
scabden
Отправлено: 16 Октября, 2012 - 15:35:49
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Здравствуйте!
Мои знания о PHP оставляют желать лучшего. Поэтому прошу вас помочь реализовать следующую задачу:
Сайт работает на Joomla, база данных MySQL.
Есть таблица "fabrik_promo_code" - по сути это список промо-кодов с их описанием. В таблице три столбца:
1. fabrik_internal_id - порядковый номер записи, присваивается автоматически каждой новой записи.
2. promo_code - буквенно-числовое значение (например NY387849), вводится администратором.
3. descrip - описание промо кода, как правило, размер скидки которую можно получить, вводится администратором.

Есть форма заказа, через которую клиенты на сайте оформляют заказ. Одно из полей этой формы - "Промо-код". Помимо прочей информации о заказе, пользователь может ввести промо-код и получить скидку.

Задача: Написать PHP код для проверки введенного в форму заказа "промо-кода". Введенный "промо-код" должен соответствовать одному из значений столбца "promo_code". Если соответствие найдено, то возвращаем значение из столбца "descrip", стоящее в одной строке с введенным "промо-кодом". Если соответствие не найдено, то выводим сообщение об ошибке: "Введите правильный промо-код или оставьте поле пустым".

Форма заказа сделана с помощью Fabrik - компонент Joomla для создания форм и таблиц. Если это вам ни о чем не говорит, то просто дайте образец Php кода, с помощью которого можно реализовать такую проверку.

Заранее БЛАГОДАРЮ за ПОМОЩЬ!!!
 
 Top
Stivir
Отправлено: 16 Октября, 2012 - 18:32:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Май 2012  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_POST['promo_code']) && !empty($_POST['promo_code']))
  3. {
  4.     $pc = $_POST['promo_code'];
  5.     $filter = '/^[A-Z]{2}\d{6}$/';
  6.     if(preg_match($filter, $pc))
  7.     {
  8.         $query="select * from fabrik_promo_code WHERE promo_code='{$pc}'";
  9.         $result = mysql_query($query) or die(mysql_error());
  10.         $line = mysql_fetch_assoc($result);
  11.         if(!strcmp($pc,$line['promo_code']))//сравниваю то что ввел пользователь с содержимым таблицы базы
  12.         {
  13.             echo $line['fabrik_internal_id'];
  14.             echo $line['promo_code'];
  15.             echo $line['descrip'];
  16.         }
  17.     }
  18.     else
  19.         echo 'Введите правильный промо-код или оставьте поле пустым';
  20. }
  21.  
 
 Top
scabden
Отправлено: 17 Октября, 2012 - 14:23:21
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Stivir, спасибо! Направление логики понятно. Проблема в том, что Fabrik (компонент Joomla) не воспринимает этот код в таком виде как он есть.
Например: вместо $pc = $_POST['promo_code']; нужно использовать $pc = JRequest::getVar('fabrik_user_promo_code___user_code');

Таким образом получил "немного" рабочий код:

$pc = JRequest::getVar('fabrik_user_promo_code___user_code');
$db =&JFactory::getDBO();
$db->setQuery("SELECT descrip from fabrik_promo_code WHERE promo_code='{$pc}'");
$descrip = $db->loadResult();
return $descrip;

Работает он так: Если введен правильный "промо-код", то после подтверждения формы заказа в таблицу заказов вносится не сам "промо-код", а его описание, взятое из таблицы fabrik_promo_code. Если введен несуществующий "промо-код", то после подтверждения формы заказа ошибка не выдается. Заказ успешно сохраняется, а поле где должно быть описание "промо-кода" - пустое.

На скриншоте можно посмотреть как выглядит настройка текстового поля в которое нужно вводить "промо-код". Скриншот: https://docs[dot]google[dot]com/open?id=[dot][dot][dot]dSzVJSHFXcDJSMGc

В общем теперь пытаюсь понять, как сделать так чтобы в случае ввода неверного "промо-кода", форма выдавала ошибку. Если у кого есть какие идеи, буду признателен за помощь.

(Отредактировано автором: 17 Октября, 2012 - 14:41:37)

 
 Top
Stivir
Отправлено: 17 Октября, 2012 - 19:32:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Май 2012  


Помог: 2 раз(а)




scabden, откровенно сказать мне не интересно как работает фабрик), а по теме в моем примере есть кое-что лишнее - это условие не нужно:

в самом запросе к базе уже заложено сравнение и этот запрос вынет все содержимое конкретно этого промо-кода и если Вам нужно описание, то оно в $line['descrip'], просто вставьте этот эл. массива туда куда Вам надо. А если произошел случай что пользователь ввел промо-код и он прошел фильтр, но его нет в базе, то один из вариантов(по моему mysql_fetch_assoc вернет false) - проверка на содержимое $line.
PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_POST['promo_code']) && !empty($_POST['promo_code']))
  3. {
  4.     $pc = $_POST['promo_code'];
  5.     $filter = '/^[A-Z]{2}\d{6}$/';
  6.     if(preg_match($filter, $pc))
  7.     {
  8.         $query="select * from fabrik_promo_code WHERE promo_code='{$pc}'";
  9.         $result = mysql_query($query) or die(mysql_error());
  10.         $line = mysql_fetch_assoc($result);
  11.         if(false != $line)//
  12.         {
  13.             echo $line['descrip'];//описание промо-кода
  14.         }
  15.         else
  16.             print 'Вы ввели не верный промо-код';//или что-то типа этого
  17.     }
  18.     else
  19.         echo 'Введите правильный промо-код или оставьте поле пустым';
  20. }
  21.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB