За последние 24 часа нас посетили 15159 программистов и 1675 роботов. Сейчас ищут 845 программистов ...

Область видимости переменной??

Тема в разделе "Вопросы от блондинок", создана пользователем basist, 2 май 2008.

  1. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Здравствуйте!
    Проблема в следующем: есть 2 скрипта: index.php и history.php
    причем второй вызывается в первом, но не работает. пишет
    Код (Text):
    1. Notice: Undefined variable: main_tpl in y:\home\localhost\www\571\history.php on line 2
    В чем проблема?

    index.php:

    PHP:
    1.  
    2. <?php
    3.  
    4. $main_tpl   = file_get_contents("tamplates/main.tpl");
    5. $header_tpl = file_get_contents("tamplates/header.tpl");
    6. $footer_tpl = file_get_contents("tamplates/footer.tpl");
    7. $left_tpl   = file_get_contents("tamplates/left.tpl");
    8. $right_tpl  = file_get_contents("tamplates/right.tpl");
    9. $center_tpl = file_get_contents("tamplates/center.tpl");
    10.  
    11.  
    12. $main_tpl = str_replace("{header}", $header_tpl, $main_tpl);
    13. $main_tpl = str_replace("{footer}", $footer_tpl, $main_tpl);
    14. $main_tpl = str_replace("{left}",   $left_tpl,   $main_tpl);
    15. $main_tpl = str_replace("{right}",  $right_tpl,  $main_tpl);
    16. $main_tpl = str_replace("{center}", $center_tpl, $main_tpl);
    17.  
    18.     if (!isset($do)) {
    19.         include 'news.php';
    20.     }
    21.     else {
    22.         switch ($do) {
    23.             case 'news':
    24.                 include 'news.php'; break (0);
    25.             case 'foto':
    26.                 include 'foto.php'; break (0);
    27.             case 'board':
    28.                 include 'board.php'; break (0);
    29.             case 'register':
    30.                 include 'register.php'; break (0);
    31.             case 'history':
    32.                 include 'history.php'; break (0);
    33.             case 'spravka':
    34.                 include 'spravka.php'; break (0);
    35.             case 'transport':
    36.                 include 'transport.php'; break (0);
    37.         }
    38.     }
    39. echo $main_tpl;
    40. ?>
    41.  
    history.php:

    PHP:
    1.  
    2. <?php
    3.     $main_tpl = str_replace("{content}", 'История', $main_tpl);
    4. ?>
    5.  
    center.tpl:
    HTML:
    1. {content}
    надеюсь я понятно разъяснил проблему...
    Заранее всем спасибо
     
  2. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ищите на форуме ссылку "На танке". Там как раз эти основы расписаны.
     
  3. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    topas, "На танке" я читал.
    конкретнее можете сказать в чем ошибка?
     
  4. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Проверь имена переменных.
     
  5. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    basist
    Прогнал твой пример у себя. Никаких нотисов, все в порядке...
     
  6. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Dagdamor, аналогично. на связке php+mysql+apache работало (пол года назад), но сейчас у меня нет возможности установить такое ПО, ибо нахожусь в армии :). работаю с Денвером. видимо какие-то настройки надо сделать?
     
  7. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    PHP какой версии стоит? Денвер когда скачивал?
    tamplates - правильное название каталога? Не templates случаем?
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    basist
    эй! Это я хотел сайт в армии делать!
     
  9. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Johnatan, PHP Version 4.4.4, Денвер скачивал довольно-таки давно, tamplates - правильное название каталога.
    Kreker, что помешало?
     
  10. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Попробуй в третьей строчке подписать echo
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    basist
    Еще не был в армии :)
     
  12. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Kreker, и делать там нечего... если конечно хочешь собирать лопаткой мазут, как у вас в городе около РКК "Энергия" в январе собирали солдаты из нашей части - то добро пожаловать;)
    Johnatan, в 3 строчке какого файла и зачем?
     
  13. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    В третьей строчке index.php
    Она тебе покажет, нормально ли присваивается переменная. Если ничего не выведет, значит file_get_contents возвращает false. А значит она просто не может достучаться до файла.
     
  14. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Johnatan,

    значит проблема не в скрипте, а всё же в настройках ПО?
     
  15. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Ок, я скажу тебе по-другому. Определи, корректно ли работает у тебя функция file_get_contents("tamplates/main.tpl");
    Я могу создать файл main.tpl в каталоге tamplates и у меня всё будет прекрасно работать.. А у тебя существует файл mein.tpl в каталоге tamplates и у тебя работать не будет сие чудо. Всё дело в настройке ПО?
     
  16. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    file_get_contents("tamplates/main.tpl"); работает..

    ситуация такая: если скрипту не передавать никаких переменных то он показывает новости, и причём показывает нормально, без ошибок..
    PHP:
    1.  
    2. <?php
    3. if (!isset($do)) {
    4.          include 'news.php';
    5. }
    6. ?>
    7.  
    а вот если в меню вибирать что-то другое, то показывает ошибку...
    содержание файла history.php аналогично news.php.
    ещё одно - я использую mod_rewrite, может быть тут что-то не так?

    Код (Text):
    1.  
    2. RewriteEngine On
    3. Options +FollowSymlinks
    4. RewriteBase /
    5.  
    6. RewriteRule ^(news|foto|board|register|history|spravka|transport)$ 571/index.php?do=$1 [L]
    и ещё один момент:
    если выбирать раздел "Новости" принудительно, то опять возникает ошибка.
    т.е.

    вот это срабатывает нормально:
    PHP:
    1.  
    2. <?php
    3.      ...
    4.      if (!isset($do)) {
    5.          include 'news.php';
    6.      }
    7. ...
    8. ?>
    9.  
    а вот это выдает ошибку:

    PHP:
    1.  
    2. <?php
    3.              ...
    4.              case 'news':
    5.                  include 'news.php'; break (0);
    6. ...
    7. ?>
    8.  
     
  17. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Всё же поставил связку РНР+Apache+MySql и всё заработало. В чем была проблема так и не понял :(