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]   

> Описание: Не работает функция, вызванная как переменная в цикл
McLotos
Отправлено: 09 Марта, 2011 - 06:14:55
Post Id



Гость


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


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




Имеется некоторое условие
PHP:
скопировать код в буфер обмена
  1. if (!empty($_SESSION['login']) and !empty($_SESSION['password']) and $_SESSION['dostup'] == '0')
  2. {
  3. $dostup ='0'; //зашёл админ
  4. $status = "Администратор"; //права доступа
  5. $table=$tadmin; //вывести шапку таблицы для админа
  6. $head=$hadmin; //определить правильный заголовок страницы
  7. $tableconnect=admincontent($myrow);
  8. }
  9. elseif ($dostup='1') //зашёл офис-менеджер
  10. {
  11. $dostup ='1'; //зашёл OfficeManager
  12. $status = "Офис-Менеджер"; //права доступа
  13. $table=$tmanager; //вывести шапку таблицы для офис-менеджера
  14. $head=$hmanager; //определить правильный заголовок
  15. $tableconnect=managercontent($myrow);
  16. }

Далее в зависимости от того, кто зашёл, нужно вывести разные таблицы, это реализовывается в строке $tableconnect=
Если зашёл пользователь с доступом 0, то вызвать
PHP:
скопировать код в буфер обмена
  1. function admincontent($myrow=array()){printf("
  2.                   <tr>
  3.                   <td><a href=page.php?id=%s>%s</a></td>
  4.                   <td>%s</td>
  5.                   <td>%s</td>
  6.                   <td>%s</td>
  7.                   <td>%s</td>
  8.                 ",$myrow['id'],$myrow['login'],$myrow['phone_number'],$myrow['lastname'],$myrow['firstname'],$myrow['Email']);}
, а если пользователь с доступом 1, то
PHP:
скопировать код в буфер обмена
  1. function managercontent($myrow=array()){printf("
  2.                   <tr>
  3.                   <td><a href=page.php?id=%s>%s</a></td>
  4.                   <td>%s</td>
  5.                   <td>%s</td>
  6.                   <td>%s</td>
  7.                 ",$myrow['id'],$myrow['Lastname'],$myrow['Firstname'],$myrow['phone_number'],$myrow['month_limit']);}

Сам цикл
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM users WHERE dostup='$dostup' ORDER BY login"); //извлекаем логин и идентификатор пользователей
  2. $myrow = mysql_fetch_array($result);
  3. do {$tableconnect;}
  4. while($myrow = mysql_fetch_array($result));

Но почему-то ничего не работает, выводятся разные шапки, но табицы пустые.
Пробовал прописывать вместо переменной tableconnect саму таблицу, но в таком случае выводится одни таблица независимо от того кто зашёл, был ещё вариант встроить сам цикл в условие т.е.
PHP:
скопировать код в буфер обмена
  1. if (dostup=0) {print (бла-бла-бла)} elseif (dostup='1') {do {print(бла-бла-бла)} while(здесь то же самое)

(Отредактировано автором: 09 Марта, 2011 - 08:40:17)



-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
McLotos
Отправлено: 09 Марта, 2011 - 11:50:10
Post Id



Гость


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


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




Прикольно, вроде четко поставленный вопрос, подробные пояснения, а ответа нету =(
Я даже возможные варианты действий описал, а результата нету =(
печально


-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
cHameleon
Отправлено: 09 Марта, 2011 - 12:41:18
Post Id



Гость


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


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




del

(Отредактировано автором: 09 Марта, 2011 - 12:43:54)



-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2011 - 12:53:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




McLotos пишет:
Прикольно, вроде четко поставленный вопрос, подробные пояснения, а ответа нету =(

Не хватило соблюдения ещё одного пункта - краткости Радость

McLotos пишет:
do {$tableconnect;}
while($myrow = mysql_fetch_array($result));

А что, что-то должно выводиться? Переменная сама по себе не делает ничего. Это вообще-то равнозначно циклу

И нафига вообще для обхода результата запроса цикл с постусловием?


-----
PostgreSQL DBA
 
 Top
McLotos
Отправлено: 09 Марта, 2011 - 13:31:25
Post Id



Гость


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


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




$tableconnect это переменная, вместо которой подставляется функция 1 или функция 2 в зависимости от уровня доступа пользователя (сами функции я написал)
Суть в том чтобы пролистать БД и вывести оттуда список юзеров, которые соответствуют критериям поиска


-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2011 - 13:55:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Я понимаю, что это переменная. И, честно, мне глубоко всё равно, что в ней хранится, т.к. ошибка не в том. Переменная ничего не делает сама. Укажите действие для переменной, я уже написал, что собой представляет написанный вами цикл с точки зрения интерпретатора.

А, кажется понял, в чём именно ваше заблуждение и почему вы меня не поняли:
Конструкция $var=somefunc(); непосредственно исполняет функцию somefunc() и хранит в дальнейшем только ту информацию, что была получена от функции в return. Информация же, которая была выведена через print, echo, printf и т.д. выводится непосредственно из функции и в переменную никак не попадают. (кроме использования буферизации)

(Отредактировано автором: 09 Марта, 2011 - 14:05:18)



-----
PostgreSQL DBA
 
 Top
Stierus Супермодератор
Отправлено: 09 Марта, 2011 - 16:47:58
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




ты 1 раз вызвал функцию, написав
PHP:
скопировать код в буфер обмена
  1. $tableconnect=admincontent($myrow);
, код
не запускает функцию. Вы можете использовать call_user_func для того, что хотели изначально
 
My status
 Top
McLotos
Отправлено: 10 Марта, 2011 - 08:21:22
Post Id



Гость


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


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




Мелкий
Что-то теперь я не совсем понимаю что Вы хотите сказать.

Stierus
Такой вариант действий, которы вы предлагаете я уже выполнял, тоже не работает.
PHP:
скопировать код в буфер обмена
  1. do {$tableconnect;}
  2. while($myrow = mysql_fetch_array($result));
  3.      call_user_func($tableconnect, $myrow);
  4.            echo "</tr>
  5.           </table><br>";

Работать не будет! Точнее сказать, никакой реакции на подобную постановку задачи у пхп это не вызовет. Эффект будет тот же


Как ещё можно сделать? Ну к примеру, если доступ=0 тогда выполнить цикл1, если доступ=1, выполнить цикл2

(Отредактировано автором: 10 Марта, 2011 - 09:52:57)



-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
McLotos
Отправлено: 10 Марта, 2011 - 10:44:22
Post Id



Гость


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


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




Всё. Теперь всё работает! Нужно вот так
PHP:
скопировать код в буфер обмена
  1. do {
  2. switch($tableconnect) {
  3.   case "managercontent": managercontent($myrow); break;
  4.   case "admincontent": admincontent($myrow); break;
  5. }

=)


-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
Мелкий Супермодератор
Отправлено: 10 Марта, 2011 - 11:26:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




McLotos пишет:
Такой вариант действий, которы вы предлагаете я уже выполнял, тоже не работает.

Чтобы исполнялась функция в цикле, в цикле её вызывать и надо, а не после него.
PHP:
скопировать код в буфер обмена
  1. while($myrow = mysql_fetch_array($result)) {
  2.      call_user_func($tableconnect, $myrow);
  3. }


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 10 Марта, 2011 - 15:16:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




McLotos пишет:
elseif ($dostup='1') //зашёл офис-менеджер
Использование предполагаемой конструкции в целевом PHP-приложении, осуществляет как некорретное выполнение условие для кондициональной ветви кода являющейся константной истиной, так и обеспечивает непредполагаемую модификацию значения информационного поля хранимого к данном переменном объекте; процесс выполнение условных блоков базируемых на использовании конструкции if-else, осуществляется до определения первого истинного локального выражния компарации, вследствие чего каждый из пользователей данного web-приложения, кроме адиминистратора, будет идентифицирован в качестве офис-менеджера


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB