Forum Webscript.Ru
Программирование => PHP => Тема начата: BarT от 12 Июня 2004, 15:40:41
-
Здравствуйте, уважаемые!
Вопрос такой (конечно понимаю, что он, скорее всего дурацкий, но я только начинаю изучать РНР да и вообще программирование, поэтому такие вопросы имеют место быть...) нужно сделать нечто напоминающее примитивную гостевую, смысл такой:
на странице (forma.php) выводится:
многострочная форма, кнопка-submit и содержание текстового файла с сообщениями (файл наз. texta.txt).
В другом файле (template2.php) находится шаблон, создающий "ячейки" для сообщений.
Напр., если пользователь ввел:
"курсив
жирным
просто так"
то в результате сообщение выводится 2 раза:
первый так:
курсив жирным просто так /* без обработки курсив-курсивом, жирный соответственно - жирным и т.п. */
а второй раз так:
курсив
жирным
просто так
/*точно так как пользователь написал в форму со всеми html-ями и переводом строк, т.е. с дополнительной обработкой */
и все вроде бы нормально, не оптимизировано, страшновато, но работает...
...дальше выяснилось, что в файле со всеми сообщениями каждая строка должна быть наиболее близка к тому, что написал пользователь, т.е. быть только такой и никак по-другому:
jjjj\\r\\nhhhh /*с переводом строк, возвратом каретки и т.п., */
а у меня в файле с сообщениями получается так:
курсив
жирным
просто так
Нужно использовать функции
addcslashes() и stripcslashes(),
как выглядят эти функции, тоже понимаю
$no_esc="bbb\\r\\naaa";
//заэкранировать строку с сообщением
$esc=addcslashes($no_esc, "\\r\\n");
//прочие действия...
//------в другом файле, где шаблон с ячейкой для сообщения---
//перед выводом текста вернуть обратно:
$final=stripcslashes($esc);
echo "$final";
Все бы ничего, но у меня нет соображений, куда написать addcslashes($message, "\\r\\n");
т.к. дело в том, что сообщение я беру из $_POST [\'text1\']=$message."\\n";
и итогом все стараний получается либо так, что все сообщения в одну кучу собираются либо каждая строка в отдельной ячейки идет, т.е. разбивается многострочное сообщений.
:(
Может кто-нибудь подскажет и напишет примерчик для зеленого-зеленого чайника о том, как можно обработать сообщения, чтобы хранить их в файле ввиде:
курсив\\r\\nжирным\\r\\n просто так ...?
Вот ссылка на то, что работает внешне почти как надо, но не подходит из-за неправильного хранения сообщений в файле:
http://bart.pochtamt.ru/PHP_work_forma.zip (http://bart.pochtamt.ru/PHP_work_forma.zip)
очень благодарный зеленый чайник, желающий все-таки научиться и надеющийся на помощь людей знающих :)
Татьяна (aka BarT).
-
В forma10.php вместо
$_POST[\'text2\']=str_replace("\\n","
",$_POST[\'text2\']);
напиши
$_POST[\'text2\']=preg_replace("/\\r\\n|\\n/","
",$_POST[\'text2\']);
и в файле texta.txt сообщение переданное из поля textarea будет храниться в одну строку.
-
Нужно использовать функции
addcslashes() и stripcslashes(),
кому нужно?
это ты такое задание себе придумала?
а почему именно эти, а не другие?
Все бы ничего, но у меня нет соображений, куда написать addcslashes
нету? и НЕ ПИШИ!
-
дальше выяснилось, что в файле со всеми сообщениями каждая строка должна быть наиболее близка к тому
как выяснилось?
кем выяснилось?
Танечка.
Давайте вы будете нас информировать не о своих неправильных выводах, а о тех собыытиях, из которых вы выводы сделали.
Я, конечно, понимаю, что проще сказать "мне надо!"
но, к сожалению, такие заявления выглядят очень глупо.
извините, конечно, но строка
RomikChef:
jjjj\\r\\nhhhh
не будет выглядеть так, как ввел пользователь, НИ в форме, ни в хтмл.
то есть, вообще ни при каком раскладе.
и поэтому все требования "надо" выглядят довольно бессмысленными.
Может быть, все-таки описать задачу не на уровне "мне нужна такая-то и такая-то бессмысленная функция, и я не знаю, куда ее впихнуть", а на уровне "я решаю такую-то задачу. такие-то данные. используются для того-то. как это сделать лучше?"
Спасибо
-
RomikChef
По порядку:
RomikChef:
?
?
?
Нет, придумала не сама, препод дал такое задание и, после того, как я уже сделала все выложенное в архиве (извините, что в zip-е, просто пока больше было негде выложить по-нормальному), посмотрел и сказал, что он будет засчитывать только такое решение, где будут применена ф-ция addcslashes() и если в файле с записями сообщений строки будут исключительно в таком виде:
aaaa\\r\\ndddd\\r\\nzzzz
//это было первой сообщение
111\\r\\n222\\r\\n333
//а это уже было 2-ое
(так сделано у него, и следовательно, должно повториться у меня...),
по его словам, цитирую дословно, "поскольку символы переносов строк и табуляции у нас зарезервированы как специальные символы разметки данных, то мы должны обязательно их экранировать функцией addcslashes()",
что касается stripcslashes(), она раскавычивает строку, закавыченную функцией addcslashes().
Поэтому выбора других функций не дано.
Сама задача звучала так:
нужно:
-получить от пользователя строку (сообщение),
-добавить эту строку в файл,
-считать файл в массив,
-обработать каждое сообщение так, чтобы каждое сообщение было в рамочке (код самой рамочки в отдельном файле),
-каждое сообщение выводить 2 раза (с обработкой и без обработки),
-исправить проблемы, возникающие про использовании
-
не дай бог препода-идиота...
-
давай начнем с того, что ты сам-то понимаешь идиотизм этих требований?
что комбинации "\\r" и "\\n" зарезервированфы ТОЛЬКО при написании их РУКАМИ в двоынйх кавычках?
что во всех других случаях это всего лишь комбинации "\\r" и "\\n", такие же, как "мама", "мыла", "раму"?
что с помощью addslashesпроблему не решить?
далее надо выбрать путь решения.
Лично мне нравится придумать в файле другой путь разделения записей - не перевод строки, а какой-нибудь другой
-
исправить проблемы, возникающие про использовании
какие еще проблемы?
-
2RomikChef внимательнее, плиз.
BarT:
где будут применена ф-ция addcslashes()
Уж незнаю, для чего это преподавателю, но принципиально ничего сложного.
Строчка
$_POST[\'text2\']=str_replace("\\n","
",$_POST[\'text2\']);
меняется на
$_POST[\'text2\']=addcslashes($_POST[\'text2\'], "\\12,\\15");
и будет в файле, при взгляде на него через блокнот, например, наглядно "\\r\\n"
-
Mog.:
forma10.php
$_POST[\'text2\']=str_replace("\\n","
",$_POST[\'text2\']);
$_POST[\'text2\']=preg_replace("/\\r\\n|\\n/","
",$_POST[\'text2\']);
texta.txt textarea.
Спасибо, только боюсь это опять будет не то...
т.е. _не_то_как_должно_быть_было_нужно_
насколько я поняла, у него весь код (не считая вызова формы) занимает 6 строк +2 строки в файле template.php, где ячейки для сообщений...
-
хехе, правильно :-)
если препод - идиот, то будем под него подстраиваться :-)))))
только, конечно, заменять
$_POST[\'text2\']=addcslashes($_POST[\'text2\'], \'\\r\\n\');
в результате, разделителем будет \\\\r\\\\n
при получении делаем обратную замену и стрипслашес
-
Милочка.
Вы определитесь наконец - вы будете делать по-челочечески ,или с идиотскими условиями, которые вам препод поставил?
определяйтесь скорее, и приходите за готовым кодом.
-
RomikChef:
хехе, правильно :-)
если препод - идиот, то будем под него подстраиваться :-)))))
Эт тебе хорошо говорить, крутому и независимому, а бедным студентам каково, забыл уже, небось ? :)
RomikChef:
$_POST[\'text2\']=addcslashes($_POST[\'text2\'], \'\\r\\n\');
А ты сам то пробовал? В данном, так сказать "аксепте".
Я попробовал и ничего оно не заменило.
-
как это - не заменило?
обязано к слешам слеши приделать
-
тьфу ты, блин!
что за бред ты написал?
$_POST[\'text2\']=addslashes(preg_replace("/\\r\\n|\\n/",\'\\r\\n\',$_POST[\'text2\']));
-
Я жежь говорю, что нифига
-
Я ничего такого не написал, потому, что не писал, вот не надо этого на меня вешать.
-
Танюша
скажи мне пожалуйста, BarT:
файле со всеми сообщениями каждая строка должна быть наиболее близка к тому, что написал пользователь, т.е. быть только такой и никак по-другому:
jjjj\\r\\nhhhh
откуда в файле возтмтся эти вещи - \\r\\n, если пользователь их не вводил?
Ты, вообще, мои вопросы видишь?
А понимаешь их смысл?
-
RomikChef , а они из textarea беруться. Юзер жманет там на Enter вот тебе и \\r\\n
-
RomikChef
эти символы \\r\\n , насколько я знаю, добавляются сами при нажатии на Enter в многострочной форме.
-
извините за торможение, просто я некоторые окна сворачиваю, а когда разворачиваю иногда забываю обновить :-(
...видно слишком много окон развилось 8-)
-
BarT:
эти символы \\r\\n , насколько я знаю
вы знаете неправильно.
будете корректировать свои запросы, или будете пвтаться искать строку \'\\r\\n\' там, где ее никто не вводил?
развилось
я смотрю, у тебя не только по программированию двойка, но и по русскому еще?
-
Mog.
они из textarea беруться. Юзер жманет там на Enter вот тебе и \\r\\n
можно обойтись без твоих дурацких комментариев?
-
при нажатии на Ентер, к тексту добавляется ДВА символа.
ДВА, а не четыре.
символ перевода строки и символ возврата каретки.
а не символ косой черты, символ латинской буквы "р", символ косой черты, символ латинской буквы "н"
и если писать в файл, как есть, то
во первых, будут в файле видны переходы на новую строку, а не тупые \\r\\n
во-вторых addslashes АБСОЛЮТНО никак на них не воздействует
символы перевода строки и возврата каретки НЕ входят в число, обрабатываемых этой функцией.
я достаточно доступно объясняю?
Пока эти элементарные ывещи не будут поняты, продолжать бесполезно.
-
RomikChef:
будете корректировать свои запросы, или будете пвтаться искать строку \'\\r\\n\' там, где ее никто не вводил?
т.е.???
если в форму ничего не было записано - ничего и не записывается в файл texta.txt...
а эта функция обрабатывает то, что записано в файл texta.txt
RomikChef:
я смотрю, у тебя не только по программированию двойка, но и по русскому еще?
если вас устроит:
окон много развелось, а _болезнь _тыка_по_клавишам_ развилась ;0)
уж извините, но эта болезнь наблюдается практически у всех, и даже у преподов ;)
если же Вы филолог или близко к этой замечательной профессии, то прошу простить, за ущемление Ваших чувств к русскому ;-)
по программированию я еще вполне ничего для начала ;-)
через год -получше станет ;0)
RomikChef:
...я достаточно доступно объясняю?
далее:
спасибо за информацию, учту.
во первых, будут в файле видны переходы на новую строку, а не тупые \\r\\n
Сейчас мне увы нужно сделать точно так, как было сказано преподавателем.
Задачи, поставленные высшим руководством (генералами и преподавателями), низами (солдатами и учениками) не обсуждаются, а выполняются - такой вот факт
-
RomikChef:
Вы определитесь наконец - вы будете делать по-челочечески ,или с идиотскими условиями, которые вам препод поставил?
Определилась: сначала сделаем как сказал учитель,
а потом для себя я буду учиться делать все по-человечески ;-)
-
ообновляйте свои окна и отвечайте на следующий вопрос
-
сначала сделаем как сказал учитель,
1. заменяем в полученном тексте пару символов(перевода строки и возврата каретки) на четыре симввола - \\r\\n
далее.
применяем к тексту addslashes
в результате, перевод строки у нас будет закодировн, как
\\\\r\\\\n
т.е.
если юзер ввел в текстарию
мама
мыла
раму
то у нас получится
мама\\\\r\\\\nмыла\\\\r\\\\n\\\\r\\\\nраму
Как я понимаю, это именно то, что желает видеть твой идиот-преподаватель?
(ну, или то, как это поняла его талантливая ученица)
2. при чтении текста из файла, производим обратные замены.
делаем stripslashes
потом заменяем 4 символа \\r\\n на два - перводы строк
Внимательно читаем и отвечаем на вопрос
Что из написанного непонятно?
-
т.е.???
если в форму ничего не было записано
объясняю специально дляблондинок.
один раз.
ДАЖЕ если в форму что-то записать, то никакого \\r\\n там НЕ БУДЕТ
именно об этом идет речь.
Речь идет не о том, чтобы в форму ничего не записывать.
А о том, что если записать, нажимая на ентер, то в местах этих нажатий вы никакого \\r\\n не обнаружите.
Я так понимаю, что все еще непонятно?
-
RomikChef:
можно обойтись без твоих дурацких комментариев?
Интересно, любезнейший, где в них дурость усматривается?
Т.к. я не "приват" чей то читаю, позволю себе при публичном обсуждении темы высказываться и далее.
RomikChef:
при нажатии на Ентер, к тексту добавляется ДВА символа.
ДВА, а не четыре.
...
...
и если писать в файл, как есть, то
во первых, будут в файле видны переходы на новую строку, а не тупые \\r\\n
Кто бы спорил. Вы, любезнейший, думаете, что один об этом знаете? А все другие с печки свалились?
RomikChef:
во-вторых addslashes АБСОЛЮТНО никак на них не воздействует
Еще как воздействует, если делать это перед записью в файл. И не функцией addslashes, как Вы уперто повторяетесь, а функцией addcslashes, как упорно твержу я и, кстати, Татьяна.
Вы бы, любезнейший, качнули архивчик по ссылке и посмотрели, что в нем. Так, для начала.
[OFF]И не пейте больше того, что пьете сегодня. Внимание, знаете ли, здорово рассеивает.[/OFF]
-
никогда не встречал этой функции. спасибо.
BarT
Извинаюсь за невнимательность.
что ж, если препод желает заменять перевод строки на его сишный эквивалент - ради бога.
что будем делать, если в форме введут те самые пресловутые \\r или \\n? или этот вопрос не рассматривается?
Все бы ничего, но у меня нет соображений, куда написать addcslashes($message, "\\r\\n");
пероед записью в файл.
"замена символа переноса на
это не решение проблемы, а только ее усугубление"
это глупость. абсолютно никакой разницы, на что заменять.
принципиально разницы нет никакой, что заменять ,а потом обратно раскодировать.
-
2RomikChef
объясняю специально дляблондинок.
хотите верьте, хотите -нет:
брюнетка и некрашенная ;)
делайте скидку на то, что комп у меня есть где-то год. :)
пока сделаю через $_POST[\'text2\']=addcslashes($_POST[\'text2\'], "\\r,\\n");
возможно, это и есть нужное, хотя загадывать не стану - мало ли...
завтра уже будет видно что не так, самой тут уже не предсказать.
что касается
что будем делать, если в форме введут те самые пресловутые \\r или \\n? или этот вопрос не рассматривается?
пока этот вопрос не рассмотрен, возможно требуется решить и это, а может быть и нет.
По данному вопросу в задании и комментариях ничего не было, т.ч. я сейчас конкретно сказать не смогу...
однако, всеравно спасибо ;)
-
Mog.:
меняется на
$_POST[\'text2\']=addcslashes($_POST[\'text2\'], "\\12,\\15");
и будет в файле, при взгляде на него через блокнот, например, наглядно "\\r\\n"
Спасибо, может действительно так и было нужно, а у меня уже сдвиг пошел на усложнение..
Спасибо за совет! :)