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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как оптимально в скрипте получить из файла-шаблона строку с веденными переменными, полученными через POST?
cat
Отправлено: 25 Июня, 2009 - 11:43:00
Post Id


Новичок


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


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




Нужна часть скрипта для следующей задачи.
Есть на сервере файл-шаблон.phtml вида:
...
<p>Текст первого абзаца - <?=$_POST[abs1]?></p>
<p>Текст второго абзаца - <?=$_POST[abs2]?></p>
...
И соответственно переменные $_POST, которые приходят из формы.
В скрипте нужно получить строку с введенными значениями.
Если делать через file_get_contents(), то значения в строке не подставляются.

Пока решаю через require шаблона и получение строки в буфер вывода. Но плохо, что при этом шаблон (строка) выводится в браузер. Приходится делать принудительный возврат браузера. А мне нужно эту строку только заполнить и перезаписать в новый файл. Без вывода в поток! Есть ли более оптимальное решение?
 
 Top
JustUserR
Отправлено: 25 Июня, 2009 - 11:48:41
Post Id



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


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


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




Ммм то есть у вас есть файл-шаблон в котором заместо $_POST[чтототут] надо подставить аналогичную переменную и все это не выводить на экран а сохранить в другую переменную?
Тогда пользуйтесь к примеру регулярными выражениями типа такого (Я как обычно привожу на Perlе) - s/\$_POST\[(.*?)\]/$_POST["$1"]/gs


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
cat
Отправлено: 25 Июня, 2009 - 12:25:03
Post Id


Новичок


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


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




JustUserR пишет:
Ммм то есть у вас есть файл-шаблон в котором заместо $_POST[чтототут] надо подставить аналогичную переменную и все это не выводить на экран а сохранить в другую переменную?
Тогда пользуйтесь к примеру регулярными выражениями типа такого (Я как обычно привожу на Perlе) - s/\$_POST\[(.*?)\]/$_POST["$1"]/gs


К сожалению не понял.
Куда вставить ваше выражение? В шаблон или как-то в строку в PHP скрипте?
Т.е. при выполнении скрипта, встретив регулярное выражение, сервер сделает в строке замену переменной на ее значение? Без вывода в поток?
Извините, может я непонятно сформулировал?
Мне нужно, чтобы в скрипте сервер без вывода на экран прочитал строку с переменными и сохранил эту строку в другую переменную. Уже со значениями.
 
 Top
JustUserR
Отправлено: 25 Июня, 2009 - 13:01:24
Post Id



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


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


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




cat Дадада это часть кода Регулярное выражение как раз делает различные замены внутри переменной-строки не выводя ничего на экран
Вообще чс помощью них можно заменить все что угодно Вообще советую вам немного про них почитать http://php.su/functions/?cat=pcre


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
valenok Модератор
Отправлено: 25 Июня, 2009 - 13:06:26
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




$template = include 'tpl.php';
--
tpl.php

return "Привет $_POST['name']";


-----
Truly yours, Sasha.
 
My status
 Top
cat
Отправлено: 25 Июня, 2009 - 13:31:34
Post Id


Новичок


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


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




JustUserR пишет:
cat Дадада это часть кода Регулярное выражение как раз делает различные замены внутри переменной-строки не выводя ничего на экран
Вообще чс помощью них можно заменить все что угодно Вообще советую вам немного про них почитать http://php.su/functions/?cat=pcre


Спасибо.
Но прошу прощения еще раз. Если у меня 5-6 переменных POST. Я должен написать столько же регулярных выражений для замены? Или же может быть одно универсальное, которое меняет ключ на значение? А нет ли для этого встроенной функции?
Нельзя ли показать на конкретном примере кусочек кода для двух пар переменных/значение:
$_POST[tema]=обзор и $_POST[data]=24.06.2009
Заранее еще раз спасибо.
(Добавление)
valenok пишет:
$template = include 'tpl.php';
--
tpl.php

return "Привет $_POST['name']";



В том-то и вся суть. Когда применяю incluide замена в строке происходит, но при этом содержание выводится на экран. Хотя вроде функция должна передавать строку ТОЛЬКО в переменную.
 
 Top
JustUserR
Отправлено: 25 Июня, 2009 - 14:38:26
Post Id



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


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


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




cat Нет регулярка она универсальная и может вырезать люббые замены ПО ШАБЛОНУ


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Ch_chov
Отправлено: 25 Июня, 2009 - 15:29:38
Post Id



Постоянный участник


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


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




Цитата:
Когда применяю incluide замена в строке происходит, но при этом содержание выводится на экран. Хотя вроде функция должна передавать строку ТОЛЬКО в переменную.

Можно использовать буферизацию вывода: http://www.php.su/functions/?cat=outcontrol
CODE (text):
скопировать код в буфер обмена
  1.   ob_start();
  2.     include $tpl;
  3.     $tplContent =  ob_get_clean();

Или специальный php шаблонизатор,
например такой http://forum[dot]dklab[dot]ru/viewtopic.php?t=16364
 
 Top
valenok Модератор
Отправлено: 25 Июня, 2009 - 15:40:18
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




расширение файла поменяй на .php
и echo в файле убери если есть.
Открыавающий тег <?php не забудь.

tpl.php
PHP:
скопировать код в буфер обмена
  1. <?PHP return "Привет $_POST['name']";


-----
Truly yours, Sasha.
 
My status
 Top
cat
Отправлено: 25 Июня, 2009 - 15:52:29
Post Id


Новичок


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


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




Ch_chov пишет:
Цитата:
Когда применяю incluide замена в строке происходит, но при этом содержание выводится на экран. Хотя вроде функция должна передавать строку ТОЛЬКО в переменную.

Можно использовать буферизацию вывода: http://www.php.su/functions/?cat=outcontrol
CODE (text):
скопировать код в буфер обмена
  1.   ob_start();
  2.     include $tpl;
  3.     $tplContent =  ob_get_clean();

Или специальный php шаблонизатор,
например такой http://forum.dklab.ru/viewtopic.php?t=16364


Я сейчас так и делаю (про буферизацию писал в самом начале). Но вывод в поток (браузер) остается и приходится его подавлять обратной переадресацией через Header('location:') в конце кода. Что не совсем корректно. Хотя зрительно вывод незаметен. Спрашивал, потому что может кто подскажет изящнее решение.
(Добавление)
valenok пишет:
расширение файла поменяй на .php
и echo в файле убери если есть.
Открыавающий тег <?php не забудь.

tpl.php
PHP:
скопировать код в буфер обмена
  1. <?PHP return "Привет $_POST['name']";


Но тогда (если шаблон чистый php) строка его содержания будет вся из кусков:
"какой-то текст html".$_POST[0]."продолжение текста html".$_POST[1]."еще текст" .... и т.д.?

Надо попробовать. Но опять же наверно не лучший вариант. Ведь шаблон все равно надо будет как-то подключать в скрипт. Огорчение А в целом спасибо.
 
 Top
valenok Модератор
Отправлено: 25 Июня, 2009 - 16:12:51
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Для тебя есть HEREDOC.
Есть двойные кавычки в которых значение переменных обрабатываются.


-----
Truly yours, Sasha.
 
My status
 Top
Ch_chov
Отправлено: 25 Июня, 2009 - 16:16:57
Post Id



Постоянный участник


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


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




Цитата:
Я сейчас так и делаю (про буферизацию писал в самом начале). Но вывод в поток (браузер) остается

Что это за буферизация такая, которая ничего не буферизирует? Покажи код.

Валенок, а для чего нужно расширение у файла шаблона менять?

(Отредактировано автором: 25 Июня, 2009 - 16:22:03)

 
 Top
cat
Отправлено: 25 Июня, 2009 - 16:42:06
Post Id


Новичок


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


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




Ch_chov пишет:
Цитата:
Я сейчас так и делаю (про буферизацию писал в самом начале). Но вывод в поток (браузер) остается

Что это за буферизация такая, которая ничего не буферизирует? Покажи код.

Валенок, а для чего нужно расширение у файла шаблона менять?


Привожу скрипт полностью:
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2.   require("config.php");
  3.  
  4.   // Запись на сервер новой статьи
  5.   ob_start(); //открываем буфер вывода
  6.   require("template.html"); //выводим шаблон с данными из формы
  7.   $stroka=ob_get_contents(); //отправляем новое содержание в буфер
  8.   $nom=nfiles("../articls/"); //номер последней статьи (кол-во файлов)
  9.   $name_fl="../articls/".++$nom.".html"; //имя записываемого файла
  10.   $fid=fopen($name_fl,'w+');
  11.   $new_fl=fwrite($fid,$stroka); //записываем новую статью в файл
  12.   chmod($name_fl,0666);
  13.   flush();
  14.   Header("location:index.html");
  15. ?>
  16.  

Здесь функция nfiles() самопальная подгружается из config.php.
 
 Top
Ch_chov
Отправлено: 25 Июня, 2009 - 16:55:47
Post Id



Постоянный участник


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


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




Замени flush() на ob_end_clean()
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. $stroka=ob_get_contents(); //отправляем новое содержание в буфер

Наверно правильней писать: // получаем новое содержание из буфера.

(Отредактировано автором: 25 Июня, 2009 - 16:59:02)

 
 Top
cat
Отправлено: 25 Июня, 2009 - 17:04:15
Post Id


Новичок


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


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




Ch_chov пишет:
Замени flush() на $tplContent = ob_get_clean()


Прошу прощения не так быстро (уловить не хватает опыта).
Для чего новая переменная $tplContent = ob_get_clean(). Что с ней дальше делать?
И почему очистку буфера надо заменять на ob_get_clean()?
(Добавление)
Ch_chov пишет:
Замени flush() на ob_end_clean()
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. $stroka=ob_get_contents(); //отправляем новое содержание в буфер

Наверно правильней писать: // получаем новое содержание из буфера.


Да конечно. Скрипт полуфабрикат и коменты от ранее записанных строк.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB