Вопрос-Ответ по php

Печать RSS
6067
Кураторы темы:


Оранжевые штаны
0
5776. iNeeXT, а если категории в цикле выводятся? То все равно можно через css организовать?
М

Пацак
0
Есть тейбл:
CREATE TABLE IF NOT EXISTS `status` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `min_karma` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `status`
--

INSERT INTO `status` (`id`, `name`, `min_karma`) VALUES
(1, 'Новичок', 0),
(2, 'Чайник', 5);

Как правильно сделать запрос чтобы получить верный статус для юзера в зависимости от кол-а его кармы? Например у него кармы 6 единиц, значит должно выводить "Чайник".
Изменил: Михаил (15.07.2013 / 18:20)
П

Пацак
0
Если сама карма уже получена
select * from status order by ($carma-min_karma)<0, ($carma-min_karma) limit 1
Если известен, например, только id пользователя:
select *,(select name from status order by (karma-min_karma)<0, (karma-min_karma) limit 1) from users where id=$id
Если нужно для списка пользователей, то как-нибудь так
select * from (select *, name from users, status order by users.id, (carma-min_karma)<0, carma-min_karma ) X group by id

Пришелец
0
Ребят в чем ошибка? Не вырезает.sad
<?php
$str = preg_replace('#<span style="color:( .*?)">(.*?)</span>#su','\2', $str);
?>

Оранжевые Трусы
0
С точки хрения безопасности: не опасно брать данные из $_GET для формирования номера страницы
$stran=@$_GET['page'];
$stran=intval($stran);
$stran= $stran /5;
$stran= ceil($stran);
if ($stran!=0)
{
$add2title		=	' (стр.'.$stran.')';
}
else 
{
$add2title		=	'';
}
или надо ещё как-то фильтровать?
И

Пацак
0
5781. Капец Прокофьевич, если фильтруешь числа то abs(intval($stran)) или (int) $stran,хотя в твоем случае скорей всего безопасно т.к. после делаешь деление, используешь ceil.
P.S. не стоит давить ошибки через @, лучше так:
$stran = !empty($_GET['page']) ? (int) $_GET['page'] : 0;
Изменил: Изнаур (01.08.2013 / 21:28)
М

Пришелец
0
Какой самый простой, и частоиспользуемых способ сделать смену языков на сайте?

Пришелец
0
У себя так всегда определял.. Вариант универсальный
На сайте есть например 3 языка (RUS | EN | UA )

При первом заходе на сайт, определение берется из HTTP_ACCEPT_ENCODING, или же если в url была ссылка по шаблону /(ua|ru|en) он подключает язык из моего конфига далее все это записывает в Cookies и уже при следующем обновлении страницы берет из Cookies . Сменить в Cookies другую локализацию, можно перейдя по ссылкам на сайте /(ua|ru|en) и он снова перезапишет локаль

Добавлено через 01:10 сек.
/**
* initLocale(MvcEvent $e) метод установки локализации сайта
* по URL , запись в кукис или сессию (по defaul из HTTP_ACCEPT_LANGUAGE )
* @param \Zend\Mvc\MvcEvent $e
* @access public
* @return null
*/
public function initLocale(MvcEvent $e)
{
$app = $e->getApplication(); // приложение

//$response = $e->getRequest()->getHeaders()->get('Accept-Language')->getPrioritized();
$acceptLocale = \Locale::acceptFromHttp($e->getRequest()->getServer('HTTP_ACCEPT_LANGUAGE'));
$acceptLang = substr(strtolower($acceptLocale), 0, 2);
$translator = $app->getServiceManager()->get('MvcTranslator'); // получаем объект translator'a
$cookies = $app->getRequest()->getCookie(); // достаю куки
$shortLang = $e->getRouteMatch()->getParam('lang'); // ищу в url &lang=??
$config = $app->getServiceManager()->get('Config'); // достаю настройки
$translator->setCache($this->__setCacheStorage(1)); // кэширую локаль

Пришелец
0
if(isset($shortLang) && preg_match("/[a-z]{2}?/i", $shortLang)) // если нашли в URL
{
if(isset($config['languages'][$shortLang]))
{
// Устанавливаю локаль и куки на 1 мес
$translator->setLocale($config['languages'][$shortLang]['locale']);
setcookie('lang', $shortLang, time()+2878400, '/', $e->getRequest()->getServer('HTTP_HOST'));
$e->getViewModel()->setVariables(array('lang' => $shortLang)); // устанавливаю в layout
}
}
else // если не нашли в URL, читаем сначала из кук
{
if(isset($cookies['lang']) && preg_match("/[a-z]{2}?/", strtolower($cookies['lang'])))
{
if(isset($config['languages'][$cookies['lang']]['locale'])) {
$translator->setLocale($config['languages'][$cookies['lang']]['locale']);
$e->getViewModel()->setVariables(array('lang' => $cookies['lang'])); // устанавливаю в layout
}
else {
$translator->setLocale($config['languages'][$acceptLang]['locale']);
$e->getViewModel()->setVariables(array('lang' => $acceptLang)); // устанавливаю в layout
}
}
else
{
$translator->setLocale($config['languages'][$acceptLang]['locale']); // ставлю из браузера
$e->getViewModel()->setVariables(array('lang' => $acceptLang)); // устанавливаю в layout
}
}
}

Добавлено через 01:07 сек.
Вызываю так
[php]
/**
* onBootstrap(MvcEvent $e) Этот метод слушатель (listeners) события bootstrap
* в рамках событийной модели ZF2
* инкапсулятор различных палагинов (сервисов) при автозагрузке
* @access public
* @param \Zend\Mvc\MvcEvent $e
* @return object
*/
public function onBootstrap(MvcEvent $e)
{
$app = $e->getApplication(); // Наше приложение
$sm = $app->getServiceManager(); // Сервис менеджер
$e = $app->getEventManager(); // Менеджер событий

$e->attach(MvcEvent:E VENT_ROUTE, array($this, 'initLocale'), 1); // локаль
}
[/php]

Пришелец
0
PS. Это Zend 2 . но легко переделать под себя и будет у вас теперь универсальный LocalSetup.

О , Боже, кто администратор этого убожества ? Почему я раскладываю свое сообщение на 3!!!! Куска !!! И каждый раз пишет что надо ждать 60 сек! Вы че блин ? Как в танке сидите )) Я же зарегистрировался тут , почему не имею права писать сообщения.. Ужс, 19 век
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск