PHP.SU

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

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

> Найдено сообщений: 17
Wet Отправлено: 13 Апреля, 2017 - 05:11:40 • Тема: Ограничение доступа в yii2 по mysql • Форум: CMS и фреймворки

Ответов: 1
Просмотров: 934
Подскажите кто нить как реализовать ограничение доступа по определенной таблице mysql?

Допустим есть 4 таблицы mysql:
1) таблица юзеров

id _ name
1 _ Иван
2 _ Федя

2) таблица прав доступа

id _ userid _ grouptid _ acess ( 0 - доступ закрыт, 1 - просмотр, 2 - просмотр, изменение… )
1 _ 1 _____ 1 _______ 1
2 _ 2 _____ 2 _______ 2

3) таблица контента (представим, что у каждой группы свой контент)

id _ content
1 _ текст
2 _ /img/1.jpg

4) таблица групп

id _ groupname
1 _ Группа 1
2 _ Группа 2

К примеру авторизовались под 1м юзером, yii должно ограничить доступ по 2й таблице и вывести только текст.

Прописал в BaseController:
public function beforeAction($action)
{
if (Yii::$app->user->isGuest) {
return $this->redirect('/site/login');
}

if (!parent::beforeAction($action)) {
return false;
}

$content = [];
$id = Yii::$app->user->id;
$content = User::getGroup($id);

return true;
}

а в модели User:
public function getGroup($userID)
{
$array = SysAcl::find()->where(['userid' => $userID])->select(['grouptid'])->asArray()->indexBy('id')->all();

$arr = [];
foreach ($array as $key => $value) {
$arr[$key] = $value['grouptid'];
}

// возвращаем массив вида [id] => [grouptid]
return $arr;
}

В результате получил id группы, но что дальше делать пока еще не знаю. Как вывести привязаный к группе контент? Если не знаете как yii2 это реализовать, то хотя бы подскажите как вы это делаете в другой MVC, чтобы хотя бы примерно понять как наследуется наше значение от базового контроллера к другим контроллерам.
Wet Отправлено: 13 Апреля, 2017 - 03:15:19 • Тема: В YII2 связать 3 таблицы mysql • Форум: CMS и фреймворки

Ответов: 2
Просмотров: 1311
Спасибо за идею.
Wet Отправлено: 11 Апреля, 2017 - 05:07:44 • Тема: В YII2 связать 3 таблицы mysql • Форум: CMS и фреймворки

Ответов: 2
Просмотров: 1311
Есть таблицы mysql:
1)
id name
1 Вася
2 Иван
3 Таня

2)
id user_id employee_id
1 _2 ____ 2
2 _1 ____ 1
3 _3 ____ 2

3)
id employee
1 Директор
2 Продавец

Создал все необходимые модели для всех 3х таблиц в gii. В CRUD создал поисковую модель, контроллер и вьюхи по модели 2й таблицы. На выходе получаем данные из 2й таблицы. И наконец задача: Вывести(связать, наверное как-то в ActiveRecord) данные в таком виде:
Иван Продавец
Вася Директор
Таня Продавец

Подскажите пжл как это реализовать
Wet Отправлено: 30 Июня, 2016 - 02:10:57 • Тема: Округлить числа • Форум: Вопросы новичков

Ответов: 2
Просмотров: 218
Prizma пишет:

Вы противоречите сами себе, как на выходе может быть такой массив, если мы все результирующий значения будет округлять до 3600, 7200 или исключать?
Да, не правильно объяснил Радость Я имел ввиду что при сложении должны получить
PHP:
скопировать код в буфер обмена
  1.     array (
  2.       0 => 4000,
  3.       1 => 7000
  4.     )
А при округлении (конечный результат)
PHP:
скопировать код в буфер обмена
  1.     array (
  2.       0 => 3600,
  3.       1 => 7200
  4.     )
Wet Отправлено: 29 Июня, 2016 - 10:23:09 • Тема: Округлить числа • Форум: Вопросы новичков

Ответов: 2
Просмотров: 218
Есть массив
PHP:
скопировать код в буфер обмена
  1.   0 => 1500,
  2.   1 => 500,
  3.   2 => 2000,
  4.   3 => 7000,
  5.   4 => 10000
  6. )
Задача: подсчитать значения по порядку (по ключам от 0-4) и округлить с условием:
1) если значение < 5400, то округляем до 3600
2) если значение < 7200 и >= 5400, то округляем до 7200
Все что не входит в условие исключаем.

Там получается мы должны складывать значения до тех пор, пока не дойдет до 7200. Т.е. если складывать 1500+500+2000=4000 и если еще прибавить 7000, то превысит наш лимит, значит нужно сохранить 4000 и по новой начать считать. Следом идет 7000 (после 2000), берем ее складываем со след значением 7000+10000=17000(как видим снова превышает наш лимит, значит снова сохраняем 7000 и берем след значение 10000). 10000 не проходит по нашим условиям, значит исключаем.

На выходе должны получить такой массив
Wet Отправлено: 18 Марта, 2016 - 12:17:33 • Тема: Задача: перебрать массив ( рассортировать ключи и значения ) • Форум: Вопросы новичков

Ответов: 0
Просмотров: 90
Есть многомерный массив:
PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2. 'test.txt' => Array
  3.         (
  4.             'тестовый текст' => Array
  5.                 (
  6.                     0 => 58
  7.                 )
  8.  
  9.             'бла бла бла' => Array
  10.                 (
  11.                     0 => 59
  12.                 )
  13.         )
  14.  
  15.     'test2.txt' => Array
  16.         (
  17.             'сушка' => Array
  18.                 (
  19.                     0 => 7
  20.                 )
  21.  
  22.              'тестовый текст' => Array
  23.                 (
  24.                     0 => 8,
  25.                     1 => 18
  26.                 )
  27.         )
  28. );

Нужно найти совпадения в ключах и как то объединить их. На выходе должно получится такое:
test.txt:58 test2.txt:8 test2.txt:18
тестовый текст

test.txt:59
бла бла бла

test2.txt:7
сушка


Начал юзать array_search, но безрезультатно(
PHP:
скопировать код в буфер обмена
  1. foreach($arr as $file_name => $content )
  2.     {
  3.         foreach($content as $key => $val)
  4.         {
  5.             $find = array_search($key , $arr);
  6.             if($find === false)
  7.             {
  8.                 echo "no find<br>";
  9.             }
  10.             else
  11.             {
  12.                 echo "find: ".$find."<br>";
  13.             }  
  14.         }
  15.     }
Подскажите, пож, как решить эту задачку?
Wet Отправлено: 15 Марта, 2016 - 18:05:40 • Тема: Задача: найти в файле всё что находится в {t}{/t} • Форум: Регулярные выражения

Ответов: 0
Просмотров: 169
Нужно найти в файле всё что находится в {t}{/t} и записать в лог. А также при записи текста, который находится в {t}{/t} нужно указать из какого файла это взято и с какой строки. Подскажите, пож), как лучше реализовать данную задачу. Недопиленный вариант:
PHP:
скопировать код в буфер обмена
  1. // функция записи
  2. function log($filename, $mode, $data = false)
  3. {
  4.     $file = fopen($filename, $mode);
  5.     fwrite($file, $data);
  6.     fclose($file);
  7. }
  8. // массив ключей для array_combine
  9. $kArr = array();
  10. // массив значений для array_combine
  11.     $vArr = array();
  12. // регулярка
  13.     $gettext_pattern = array(
  14.       "~\{\"([^\"]+)\"\|_([^\}]*)\}~",  // {"Text"|_}
  15.       "~\{t\}([^\{]+)\{/t\}~"           // {t}Text2{/t}
  16.     );
  17. // пробегаемся по списку файлов
  18. foreach($p as $k=>$v)
  19. {
  20.   foreach(glob(str_replace('_','?',$v)) AS $_ => $file_disk)
  21.   {
  22.     $f=file($file_disk);
  23. //разбиваем файл на "номер строки => контент"
  24.     foreach ($f as $num => $str)
  25.     {
  26. //пробегаемся по регулярке      
  27. foreach ( $gettext_pattern as $patt)
  28.         {
  29. // если есть совпадения обрабатываем            
  30. if( preg_match_all($patt, $str, $reges) )
  31.             {  
  32. // отдельно пишем номер строки для ключей array_combine            
  33. $kArr[] = $num+1;
  34. // отдельно пишем найденый текст для значений array_combine            
  35. $vArr = array_merge($vArr, $reges[1]);
  36.                 /*$kArr = array('k1','k2');
  37.                 $vArr = array('v1','v2');*/
  38.             }  
  39.         }  
  40.     }
  41.   }
  42. }
  43. log( "log.txt", "w", serialize($vArr) );
  44. log( "log2.txt", "w", serialize($kArr) );
  45. /* объединяем найденые ключи с текстом (и тут начинаются проблемы, тк текст бывает встречается на одной и той же строке, пример: 'стр1: <span>{"Тестовый"|_}</span>{"текст"|_}' - это будет засчитано как два значения на 1 строку) Дальше пока не решил как добавить имя файла*/
  46. $resArr = array_combine($kArr, $vArr);
  47.     if( $resArr )
  48.     {  
  49.         log( "log3.txt", "w", serialize($resArr) );
  50.     }

Как быть? Подскажите, кто нить)
Wet Отправлено: 20 Ноября, 2015 - 07:02:37 • Тема: Помогите разобраться с массивом • Форум: Вопросы новичков

Ответов: 5
Просмотров: 328
Stierus пишет:
PHP:
скопировать код в буфер обмена
  1. $this->newArr[$key] = $newValue;
замени на
PHP:
скопировать код в буфер обмена
  1. $this->newArr[] = Array($key => $newValue);
так же для
Спасибо, я на днях сделал так:
PHP:
скопировать код в буфер обмена
  1. private function filterData($importArray, $arrayToExport = array(), $newKeys)
  2. {
  3.         foreach($importArray as $newdata)
  4.         {
  5.                 foreach($newdata as $index=>$val)
  6.                 {
  7.                         if(is_array($val))
  8.                         {      
  9.                                 $combineArray = array_combine($newKeys, $val);
  10.  
  11.                                 foreach($combineArray as $key=>$value){
  12.                                         if( $key == 'ID' ){}
  13.                                         elseif( $key == 'key1' )
  14.                                         {
  15.                                                 if($value == 0){ $newValue = false; } else { $newValue = true; }
  16.                                                 $arrayToExport[$index][$key] = $newValue;
  17.                                         }      
  18.                                         elseif( ($key == 'date1' || $key == 'date2') && $value != '' )
  19.                                         {
  20.                                                 $date = date("Ymd His", strtotime($value));
  21.                                                 $arrayToExport[$index][$key] = $date;
  22.                                         }      
  23.                                         else
  24.                                         {
  25.                                                 $arrayToExport[$index][$key] = $value;
  26.                                         }      
  27.                                 }
  28.                         }      
  29.                 }
  30.         }
  31.         return $arrayToExport;
  32. }
Wet Отправлено: 17 Ноября, 2015 - 14:43:40 • Тема: Помогите разобраться с массивом • Форум: Вопросы новичков

Ответов: 5
Просмотров: 328
сделал все в точности, но все равно перезаписывается((
Wet Отправлено: 17 Ноября, 2015 - 13:22:52 • Тема: Помогите разобраться с массивом • Форум: Вопросы новичков

Ответов: 5
Просмотров: 328
Подскажите люди добрые как создать массив в массиве.
Задача: Принять массив, подготовить массив для отправки (убрать лишние ключи и их значения).
PHP:
скопировать код в буфер обмена
  1. //нужен примерно такой массив
  2. (
  3.     [0] => Array
  4.         (
  5.             [a] => 0
  6.             [b] => 1
  7.         ),
  8.     [1] => Array
  9.         (
  10.             [a] => 0
  11.             [b] => 11
  12.         )
  13. )
  14. //а получается только такой(
  15. (
  16.             [a] => 0
  17.             [b] => 1
  18. )
  19. class newClass {
  20.   //массив для отправки
  21.   $newArr = array();
  22.  
  23.   //принимаем массив
  24.   function importData ($array){
  25.     //передаем массив функции дабы убрать лишние ключи и их значения
  26.     $this->filterData($array);
  27.    
  28.     //выводит только 1 массив, а нужно все что пришли в данную переменную $array
  29.     echo '<pre style="color:green;">'; var_export($this->newArr); echo '</pre>';
  30.   }
  31.    
  32.     //функция для фильтрации массива
  33.     private function filterData($array)
  34.     {
  35.         //пробегаемся по массиву (добираемся до нужных ключей и значений)
  36.         foreach($array as $arrays)
  37.         {
  38.                 foreach($arrays as $item)
  39.                 {
  40.                         foreach($item as $key => $value)
  41.                         {
  42.                                 //фильтруем массив
  43.                                 if($key == 'ID'){}
  44.                                 elseif($key == 'map')
  45.                                 {
  46.                                         if($value == 0){ $newValue = false; } else { $newValue = true; }
  47.                                         //тут начинаются проблемы, ключи просто на просто перезаписываются
  48.                                         $this->newArr[$key] = $newValue;
  49.                                 }      
  50.                                 else
  51.                                 {
  52.                                         //тут начинаются проблемы, ключи просто на просто перезаписываются
  53.                                         $this->newArr[$key] = $value;
  54.                                 }      
  55.                         }
  56.                 }
  57.         }
  58.     }
  59.   }
  60. }
  61. $newClass = new newClass;
  62. //передаем некий массив
  63. $newClass->$importData($array)
Wet Отправлено: 12 Ноября, 2015 - 08:59:42 • Тема: Soap не отправляет запрос • Форум: Вопросы новичков

Ответов: 0
Просмотров: 185
Подскажите кто нить почему авторизуюсь, но данные не могу отправить.
client.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. ini_set("soap.wsdl_cache_enabled", "0");
  3.                        
  4. $client = new SoapClient
  5. (
  6.         "http://site.ru/wsdl.wsdl",
  7.         array(
  8.                 'login' => "login",
  9.                 'password' => "password"
  10.         )
  11. );
  12. //авторизацию проходит
  13. if($client){ print_r($client); } else { echo 'false';}
  14.  
  15. //Функции выводит
  16. var_dump($client->__getFunctions());
  17.  
  18. //но на запросе виснит
  19. $soapCall = $client->Test('11111111');
  20. if($soapCall){ var_dump($soapCall); } else { echo 'false';}
  21.  

Вопрос решен, нужно было просто указывать правильные параметры.
PHP:
скопировать код в буфер обмена
  1. $params["ParamData"] = array( 'Param1' => '111', 'Param2' => '222' );
  2. $soapCall = $client->Test($params);
Wet Отправлено: 03 Октября, 2013 - 02:50:53 • Тема: unserialize, как правильно сделать? • Форум: Вопросы новичков

Ответов: 0
Просмотров: 318
Дело такое - есть массив со стандартными ключами, его нужно загнать в бд, а потом вывести обратно. Использовал serialize, если сделать так:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.       $ser = serialize($res);
  4.     $sdrg = unserialize($ser);
  5.     print_r($sdrg); //то всё отлично работает,
  6.        
  7.         //но если сделать так:
  8.         $ins =("INSERT INTO `table` ( `name` ) VALUES ('".$ser."');");
  9.     mysql_query($ins) or die(mysql_error());
  10.  
  11.         $hrth = array();
  12.     $out = mysql_query("SELECT * FROM `table`") or die(mysql_error());
  13.     while($row  = mysql_fetch_array($out)){
  14.         $hrth = unserialize($row);
  15.     }
  16.         print_r($hrth);
  17. //то выдаёт ошибку - Warning: unserialize() expects parameter 1 to be string, array given in...

Подскажите как правильно сделать.
(Добавление)
Тема закрыта, решил вопрос таким образом:
Wet Отправлено: 01 Октября, 2013 - 09:44:21 • Тема: Массив загнать в бд • Форум: Вопросы новичков

Ответов: 4
Просмотров: 324
teddy пишет:
Wet пишет:
$r = mysql_fetch_object($out);

Wet пишет:
Warning: unserialize() expects parameter 1 to be string, object given in

Остальное даже и не читал. Ошибка означает, что функция unserialize() в качестве параметра ожидает строку, а вы передаете туда объект(fetch_object)
(Добавление)
Выберите значение того поля которое содержит в себе сериализованную строку и передайте её в качестве параметра в unserialize $r->serializedStr

Если в бд не забивать, то всё нормально Однако Черти что, рехнуться можно...
Может кто знает выход?
Wet Отправлено: 30 Сентября, 2013 - 13:01:51 • Тема: Массив загнать в бд • Форум: Вопросы новичков

Ответов: 4
Просмотров: 324
Tek пишет:

Благодарю за совет, загнать загнал, а вот unserialize не выходит Не понял
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.                 $out = mysql_query("SELECT * FROM `table`") or die(mysql_error());
  3.                 $r  = mysql_fetch_object($out);
  4.                 $L1 = unserialize($r);
  5.                 // выводим первый уровень массива
  6.                 echo "
  7.                 <h1>";
  8.                 print_r($L1);
  9.                 echo "</h1>
  10.                 ";
  11.  

Выдает:
Warning: unserialize() expects parameter 1 to be string, object given in
взял от сюда - http://web-grand[dot]ru/2010/02/06/f[dot][dot][dot]serialize-v-php/
Wet Отправлено: 30 Сентября, 2013 - 04:40:20 • Тема: Массив загнать в бд • Форум: Вопросы новичков

Ответов: 4
Просмотров: 324
Дело такое - есть массив со стандартными ключами, его нужно загнать в бд. Написал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $res = array();
  3. if(isset($res)){
  4.                         foreach($res as $mas){
  5.                                 mysql_query("INSERT INTO table (`tovar_id`,`price`,`name`) VALUES ('".$mas ['0']."','".$mas ['1']."','".$mas ['2']."')");
  6.                         }
  7.                 }
  8.  

но выдает ошибку: Notice: Uninitialized string offset: 1 !!!
Уже мозги кипят(

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB