Область видимости

Mozart

Новичок
Область видимости

Есть две функции!
Первая преобразует сообщение пришедшее постом.
function f(m){
$m = ereg_replace("<","&lt;",$m);
}
И тому подобное
Вторая функция записывает преобразованное сообщение в файл
function s();
Но при записи $m - оказывется пустое в первой функции внутри выводит нормальное сообщение а как это сообщение сделать видимым для второй функции?
 

iliah

Новичок
1)
>function f(m)
надеюсь, это опечатка

2) используй вместо ereg_* - preg_* , за аргументацией можешь обратиться в поиск
именно такие преобразования ывполняются функцией htmlspecialchars() и подобными

3)
> function s();
в первой ф-ции добавить return $m;
заменить function s(); на function s($m); и передавать в нее $m, тогда все будет нормально,
почитай в мане про variable scope
 

SiMM

Новичок
Re: Область видимости

Автор оригинала: Mozart
Есть две функции!
Первая преобразует сообщение пришедшее постом.
О целях подобного преобразования пришедшего сообщения можно поинтересоваться? Что-то мне подсказывает, что делать это надо при выводе, а не вводе, да и вообще обойтись [m]htmlspecialchars[/m]
 

Mozart

Новичок
Да это просто фильтрация собщения в гостевой...Замена смайлов антимат и все такое!В первой функции делал return но все равно в файл пишется пустое сообщение...Вторая фунция просто не видит преобразований...
 

SiMM

Новичок
Автор оригинала: Mozart
Да это просто фильтрация собщения в гостевой...
Вот и делай эту фильтрацию при выводе (например, при помощи [m]htmlspecialchars[/m]) - от того, что в файл попадут HTML-тэги, сервер не рухнет, а клиенту вообще плевать, что там у тебя на сервере.
В первой функции делал return
Что-то я не вижу, где и как ты его делаешь.
но все равно в файл пишется пустое сообщение...
А она вообще ничего и никуда не пишет.
Вторая фунция просто не видит преобразований...
А почему она должна их видеть? Читать например сюда, а так же в обязательном порядке читать PHP FAQ: Ничего не работает! Что делать??? и многое другое, там же расположенное.
 

Фанат

oncle terrible
Команда форума
Симм, я все понимаю, но фак по отладке ему не поможет.
Отладка помогает тем,кто может написать правильно работающую программу. Теоретически.
А этот не может.
Ему сначала надо объяснить, синтаксис.
Что ретурн, вообще-то, ему не поможет.

Да и замены пускай все свои сразу делает.
Ну гостевая ж, на файле.
 

Mozart

Новичок
<b>SiMM</b>я имел в виду, что вот есть фунция
PHP:
function f($m){
$m = ereg_replace("<","&lt;",$m);
//ну и все такое жe
return $m;
}
вторая функция
PHP:
function s(){
global $m;
$fp=fopen($base, "a+");
$string = "$m\r\n";
fputs($fp,$string);
fclose($fp); 
}
такой механизм если быть более подробнее...
в скрипте просто вызваю функцию f($_POST['m']); и потом s();
вот так вот ничего не пишется...Все ссылки читал до написания поста... Но где-то до меня не доходит...Проблема конечно будет решена если преобразовывать при выводе, но все же будет полезно на будуещее знать в чем ошибка...
 

Фанат

oncle terrible
Команда форума
если не умеешь пользоваться функциями - не пиши их вовсе.
 

StUV

Rotaredom
Mozart
как ты думаешь, что делает оператор
return $m;
в функции function f($m) ?
 

Mozart

Новичок
Возвращает значение $m...Всмысле преобразованное значение.
 

Mozart

Новичок
всмысле получается нулевое значение...:)Как мне решить-то эту проблему?
 

Фанат

oncle terrible
Команда форума
тебе задали вопрос.
изволь отвечать.
или ты от балды пишешь, не понимая сам, что городишь?
 

Mozart

Новичок
Я думал что возвращает в глобальную видимость уже отформатированную строку...Но на проверке он вообще возвращет пустое значение.
 

Фанат

oncle terrible
Команда форума
Вот думать не надо.
Надо читать.
На основании какой информации ты "думал"? Своей богатой фантазии?
Рекомендую думать на основании документации.
на проверке он вообще возвращет пустое значение.
гон.
наглый и беспардонный.

СЕЙЧАС ЖЕ идешь и пишешь в самом начале скрипта
error_reporting(E_ALL);
а еще лучше - выставляешь это значение у себя в php.ini
Если еще раз увижу что ты пишешь не под эту директиву - закрываю твои вопросы без суда и следствия.
 

Mozart

Новичок
директиву проставил...ошибок не выдает.
усли в функции сначала сделать вывод $m - выдает отредактированную строку
если return $m;
и потм echo"$m"; - ничего не выдает
Как мне сделать чтобы $m отформатированная была доступна для следующей функции!
 

StUV

Rotaredom
Mozart
скажи пожалуйста, ты на чем-нить кроме пхп когда-нибудь програмил ?
 
Сверху