За последние 24 часа нас посетили 62939 программистов и 1743 робота. Сейчас ищут 859 программистов ...

Вызов функции внутри цикла не пашет =(

Тема в разделе "Прочие вопросы по PHP", создана пользователем McLotos, 5 мар 2011.

  1. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    Есть короче функции
    PHP:
    1. function admincontent($myrow){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']);}
    и
    PHP:
    1. function managercontent($myrow){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']);}
    я установил парочку переменных в условие ну там типа если зашёл юзер 1 то переменной присваивается admincontent, а если зашёл пользоатель 2 то переменная принимает значение managercontent
    В принципе эта схема по логике должна работать, но есть прикол. Сами эти функции должны вызываться в цикле do while. Именно это и не работает. У меня отображается только шапки таблиц, а содержимого нет, пустые таблицы.
    вот кстати как происходит вызов
    PHP:
    1. do {$tableconnect;
    2. }while($myrow = mysql_fetch_array($result));
    3.           echo "</tr>
    4.           </table><br>";
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    $tableconnect; со скобочками и без $? tableconnect();
     
  3. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    Пробовал
    Ругается типа функция не определена
     
  4. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    ну если я правильно понял, вам нужна php.net/call_user_func
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    кружок любопытных извращенцев с соседней ветке.
     
  6. ridraider

    ridraider Активный пользователь

    С нами с:
    23 окт 2010
    Сообщения:
    65
    Симпатии:
    0
    $tableconnect($myrow);
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему просто функцию туда не записать? =)
     
  8. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    при варианте $tableconnect($myrow); ругается Function name must be a string in S:\home\Panalpina\www\userlist.php on line 64

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

    neverlose Активный пользователь

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

    PHP:
    1.  
    2. while($myrow = mysql_fetch_array($result)) // <<- CHANGED CHANGED CHANGED CHANGED CHANGED
    3.     call_user_func($tableconnect, $myrow); // <<- CHANGED CHANGED CHANGED CHANGED CHANGED
    4.            echo "</tr>
    5.           </table><br>";
     
  10. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    Не сработало =(
     
  11. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Что пишет?
     
  12. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    Ничего, просто выводит соответствующую шапку таблицы, как и раньше, а содержимое таблицы не выводит
    А как ещё можно сделать подобную штуку? Ну к примеру если срабатывает условие 1 то выполнить 1 цикл, либо выполнить 2 цикл.
    Я пробовал реализовать эту идею без использования функций, просто тупо брал и запихивал do(printf("бла-бла-бла")) в сами условия, но тогда страница начинает материться на какие-то запятые, ковычки, точки с запятой и т.д.
    Есть ещё вот такой рабочий вариант
    PHP:
    1. if (!empty($_SESSION['login']) and !empty($_SESSION['password']) and $_SESSION['dostup'] == '0') {
    2.     // это администратор
    3.     $dostup ='1';
    4. } else {
    5.     // это офис-менеджер
    6.     $dostup ='2';
    7. }
    8. echo "<table cellspacing='10'>
    9.           <tr>
    10.           <th>Логин</th>
    11.           <th>Номер телефона</th>
    12.           <th>Фамилия</th>
    13.           <th>Имя</th>
    14.           <th>Зачислено на баланс:</th>
    15.           </tr>";
    16. $result = mysql_query("SELECT * FROM users WHERE dostup='$dostup' ORDER BY login"); //извлекаем логин и идентификатор пользователей
    17. $myrow = mysql_fetch_array($result);
    18. do {
    19.     //выводим их в цикле
    20.           <tr>
    21.           <td><a href=page.php?id=%s>%s</a></td>
    22.           <td>%s</td>
    23.           <td>%s</td>
    24.           <td>%s</td>
    25.           <td>%s</td>
    26.         ",$myrow['id'],$myrow['login'],$myrow['phone_number'],$myrow['lastname'],$myrow['firstname'],$myrow['month_limit']);
    27. }
    28. while($myrow = mysql_fetch_array($result));
    29.           echo "</tr>
    30.           </table><br>";
    Он выводит разное содержимое таблиц. Допусти зашёл Админ, выводит свписок всех офис-менеджеров, зашёл офис-менеджер, выводит список всех пользователей. Но в одну и ту же таблицу. Хотя по идее таблицы должны быть разные. Т.е. информация, которую видит офис-менеджер нафиг не нужна админу, ему нужны совсем другие данные
     
  13. McLotos

    McLotos Активный пользователь

    С нами с:
    24 фев 2011
    Сообщения:
    90
    Симпатии:
    0
    Всё заработало, тему можно закрывать, пришёл вот к такому варианту действий
    PHP:
    1. do {
    2. switch($tableconnect) {
    3.   case "managercontent": managercontent($myrow); break;
    4.   case "admincontent": admincontent($myrow); break;
    5. }