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 » PHP » Программирование на PHP » Переменная в цикле

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

1. McLotos - 09 Марта, 2011 - 06:14:55 - перейти к сообщению
Имеется некоторое условие
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(здесь то же самое)
2. McLotos - 09 Марта, 2011 - 11:50:10 - перейти к сообщению
Прикольно, вроде четко поставленный вопрос, подробные пояснения, а ответа нету =(
Я даже возможные варианты действий описал, а результата нету =(
печально
3. cHameleon - 09 Марта, 2011 - 12:41:18 - перейти к сообщению
del
4. Мелкий - 09 Марта, 2011 - 12:53:53 - перейти к сообщению
McLotos пишет:
Прикольно, вроде четко поставленный вопрос, подробные пояснения, а ответа нету =(

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

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

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

И нафига вообще для обхода результата запроса цикл с постусловием?
5. McLotos - 09 Марта, 2011 - 13:31:25 - перейти к сообщению
$tableconnect это переменная, вместо которой подставляется функция 1 или функция 2 в зависимости от уровня доступа пользователя (сами функции я написал)
Суть в том чтобы пролистать БД и вывести оттуда список юзеров, которые соответствуют критериям поиска
6. Мелкий - 09 Марта, 2011 - 13:55:44 - перейти к сообщению
Я понимаю, что это переменная. И, честно, мне глубоко всё равно, что в ней хранится, т.к. ошибка не в том. Переменная ничего не делает сама. Укажите действие для переменной, я уже написал, что собой представляет написанный вами цикл с точки зрения интерпретатора.

А, кажется понял, в чём именно ваше заблуждение и почему вы меня не поняли:
Конструкция $var=somefunc(); непосредственно исполняет функцию somefunc() и хранит в дальнейшем только ту информацию, что была получена от функции в return. Информация же, которая была выведена через print, echo, printf и т.д. выводится непосредственно из функции и в переменную никак не попадают. (кроме использования буферизации)
7. Stierus - 09 Марта, 2011 - 16:47:58 - перейти к сообщению
ты 1 раз вызвал функцию, написав
PHP:
скопировать код в буфер обмена
  1. $tableconnect=admincontent($myrow);
, код
PHP:
скопировать код в буфер обмена
  1. do {$tableconnect;}
не запускает функцию. Вы можете использовать call_user_func для того, что хотели изначально
8. McLotos - 10 Марта, 2011 - 08:21:22 - перейти к сообщению
Мелкий
Что-то теперь я не совсем понимаю что Вы хотите сказать.

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
9. McLotos - 10 Марта, 2011 - 10:44:22 - перейти к сообщению
Всё. Теперь всё работает! Нужно вот так
PHP:
скопировать код в буфер обмена
  1. do {
  2. switch($tableconnect) {
  3.   case "managercontent": managercontent($myrow); break;
  4.   case "admincontent": admincontent($myrow); break;
  5. }

=)
10. Мелкий - 10 Марта, 2011 - 11:26:30 - перейти к сообщению
McLotos пишет:
Такой вариант действий, которы вы предлагаете я уже выполнял, тоже не работает.

Чтобы исполнялась функция в цикле, в цикле её вызывать и надо, а не после него.
PHP:
скопировать код в буфер обмена
  1. while($myrow = mysql_fetch_array($result)) {
  2.      call_user_func($tableconnect, $myrow);
  3. }
11. JustUserR - 10 Марта, 2011 - 15:16:21 - перейти к сообщению
McLotos пишет:
elseif ($dostup='1') //зашёл офис-менеджер
Использование предполагаемой конструкции в целевом PHP-приложении, осуществляет как некорретное выполнение условие для кондициональной ветви кода являющейся константной истиной, так и обеспечивает непредполагаемую модификацию значения информационного поля хранимого к данном переменном объекте; процесс выполнение условных блоков базируемых на использовании конструкции if-else, осуществляется до определения первого истинного локального выражния компарации, вследствие чего каждый из пользователей данного web-приложения, кроме адиминистратора, будет идентифицирован в качестве офис-менеджера

 

Powered by ExBB FM 1.0 RC1