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
Форумы портала PHP.SU :: Версия для печати :: ассоциативный массив)
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » ассоциативный массив)

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

1. PATCH - 12 Июня, 2011 - 21:59:37 - перейти к сообщению
как правильно реализовать функцию по следующей аналогии.
1.делаем выработку из базы и заносим в ассоциативный массив
2.делаем проверку есть ли в ассоциативном массиве допустим целочисленое значение = 1 (там все числа целые округлять ненада)
3.если есть то создаем новую переменую и присвоить ей значение 1 .

или проще говоря сделать выборку из массива и вытянуть переменую с ключом и со значением равной 1. (если конечно существует в массиве значение 1)

выборку производить foreach на скока я помню однако она не для ассоциативных вроде массивов ибо уже попытался) не совсем правильно вывело.
2. OrmaJever - 12 Июня, 2011 - 22:42:12 - перейти к сообщению
PATCH пишет:
выборку производить foreach на скока я помню однако она не для ассоциативных вроде массивов ибо уже попытался) не совсем правильно вывело.

какраз foreach для асоциативных масивов.
Как пытались? Как получилось? И как нужно?
PATCH пишет:
3.если есть то создаем новую переменую и присвоить ей значение 1 .

это плохая идея, лутше зделть это всё в масиве для того они и существуют чтобы собирать большое количество переменых.
3. PATCH - 12 Июня, 2011 - 22:59:16 - перейти к сообщению
foreach ($prov_acc_mass as $key => $value)
{print "<b>$value - $key</b><br>";}


выводит
1 - 0
1 - имя столбца

хотя запрос был

@$prov_acc = mysql_query ("SELECT id_acc FROM acc_party WHERE id_party =".$user_party."");
@$prov_acc_mass = mysql_fetch_array($prov_acc);

в таблице данные

1 1
1 2
выбираем второй столбец
(Добавление)
P.S нашел альтернативу . займет меньше места в БД да и без выборки обойдусЬ)
(Добавление)
OrmaJever пишет:
это плохая идея, лутше зделть это всё в масиве для того они и существуют чтобы собирать большое количество переменых.

не получится дело в том что я реализую как бы динамические группы которым можно устанавливать права, проверка прав такая, в этот раздел есть доступ если в бд стоит значение 1) я думал сделать в 2 столбца) 1ый ID группы 2 права доступа (права доступа различаются по 1 допустим вход в админ панель 2 работа с категориями 3 работа с постом)) тупанул) если б я так сделал пришлось бы все через массив делать + каждое новое право записывалось с каждой строкИ) я сча решил для каждого доступа создать столбец) в итоге для 1 группы будет 1 строка с правами доступа 1 или 0 , 1 пустить 0 запретить
4. OrmaJever - 12 Июня, 2011 - 23:30:37 - перейти к сообщению
PATCH пишет:
foreach ($prov_acc_mass as $key => $value)
{print "<b>$value - $key</b><br>";}


выводит
1 - 0
1 - имя столбца
...
в таблице данные

1 1
1 2

А?! а как должно быть? нулевой индекс и значение 1 и id_acc и значение 1.

Я не очень понял как у вас права устроены но предлогаю всё переделать.
PHP:
скопировать код в буфер обмена
  1.  
  2. // устанавливаем права
  3. $access = array('admin' =>0,
  4.                         'category'=>1,
  5.                         'post'=>1);
  6. // любое количество индексов и любые значения
  7. // затем в бд в колонке с групой или пользователем (что там у вас) одна колонка для прав например access
  8. mysql_query('UPDATE `acc_party` SET `access` = "'.serialize($access).'" WHERE `id_party` = "'.$user_party.'"');
  9. // затем при выборке
  10. $row = mysql_fetch_array($query);
  11. $row['access'] = unserialize($row['access']);
  12. // и теперь масив прав доступа лежит в $row['access']
  13. print_r($row['access']);
5. White - 13 Июня, 2011 - 09:11:04 - перейти к сообщению
В mysql_fetch_array указывайте второй аргумент. Не будете путаться в результате.

$prov_acc_mass = mysql_fetch_array($prov_acc, MYSQL_ASSOC);

http://php.net/manual/ru/functio...-fetch-array.php
(Добавление)
Цитата:
CODE (htmlphp):
скопировать код в буфер обмена
  1. mysql_query('UPDATE `acc_party` SET `access` = "'.serialize($access).'" WHERE `id_party` = "'.$user_party.'"');


функция serialize в результирующей строке выдает большое количество двойных кавычек, поэтому непременно вызовет ошибку в синтаксисе SQL
6. serega_dgl20 - 13 Ноября, 2018 - 14:32:12 - перейти к сообщению
PATCH пишет:

Преобразование объекта PHP в ассоциативный массив
foreach ($prov_acc_mass as $key => $value)
{print "<b>$value - $key</b><br>";}


выводит
1 - 0
1 - имя столбца

хотя запрос был

@$prov_acc = mysql_query ("SELECT id_acc FROM acc_party WHERE id_party =".$user_party."");
@$prov_acc_mass = mysql_fetch_array($prov_acc);

в таблице данные

1 1
1 2
выбираем второй столбец
(Добавление)
P.S нашел альтернативу . займет меньше места в БД да и без выборки обойдусЬ)
(Добавление)
OrmaJever пишет:
это плохая идея, лутше зделть это всё в масиве для того они и существуют чтобы собирать большое количество переменых.

не получится дело в том что я реализую как бы динамические группы которым можно устанавливать права, проверка прав такая, в этот раздел есть доступ если в бд стоит значение 1) я думал сделать в 2 столбца) 1ый ID группы 2 права доступа (права доступа различаются по 1 допустим вход в админ панель 2 работа с категориями 3 работа с постом)) тупанул) если б я так сделал пришлось бы все через массив делать + каждое новое право записывалось с каждой строкИ) я сча решил для каждого доступа создать столбец) в итоге для 1 группы будет 1 строка с правами доступа 1 или 0 , 1 пустить 0 запретить


PROFIT Радость
1.делаем выработку из базы и заносим в ассоциативный массив
2.делаем проверку есть ли в ассоциативном массиве допустим целочисленое значение = 1 (там все числа целые округлять ненада)
3.если есть то создаем новую переменую и присвоить ей значение 1 .
7. Строитель - 13 Ноября, 2018 - 16:13:17 - перейти к сообщению

Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1