1

Hi.
In my CMS, when i type a content for a new post in the textarea, like this:

one
two
three
four
five
six

and then click the submit button, it will save in the db table like the way i have typed, every word in a separate line.
But when the script echo the post on the page, i see all words are in one line like this:

one two three four five six

Why? Do i have to type tags like <br> while typing the content on the text area?! But users must feel free to write their posts without thinking about using html tags while they are typing!

Votes + Comments
Good question, I'd like to know too.
4
Contributors
13
Replies
50
Views
2 Years
Discussion Span
Last Post by Niloofar24
Featured Replies
  • 1

    Ok, here is what I would have done: <?php $data = nl2br(htmlentities($_POST['textarea'])); //put the $data into database ?> With this, you can see the database data will be `one<br />two<br />three<br />four` if user entered one two three four while it will showing `one two<br />three four` if user insert … Read More

  • 1

    Oh dear, please do test and try to solve these small problem by yourselves next time. Don't expect people done all the job for you, we are just here for help, not for job. do some research why it is not working maybe? I googled for some and found that … Read More

0

I don't know about the idea of using <pre> tag, but normally what I done is, when post the textarea content to php, I tempt to use nl2br() to make sure the things stored to databased is already having the line break tag which makes my display part easier as you will never know if user enter

one two
three four
five

or

one
two
three
four
five

0

I read here and here, but would you please give me a simple example of how to use it in a text? Like what we see in the second link i pointed?

It means users should use and type |nl2br while they are typing their text in the textarea themselves?

Edited by Niloofar24

1

Ok, here is what I would have done:

<?php
$data = nl2br(htmlentities($_POST['textarea']));
//put the $data into database
?>

With this, you can see the database data will be one<br />two<br />three<br />four if user entered
one
two
three
four
while it will showing one two<br />three four if user insert
one two
three four

with these, when we do the select statement, we do not need to process anymore, just simply use the data from database and direct use it as html. But if you wish to assign values back to the textarea, remember to str_replace the <br /> back into \n.

Edited by lps

0

With this, you can see the database data will be one<br />two<br />three<br />four if user entered
one
two
three
four
while it will showing one two<br />three four if user insert
one two
three four

Isn't it it's purpose? It changes new lines into <br />'s. nl2br() will behave dependant on user's input. Depending on which output you wanna get, you need to watch out what user can type in.

If you want

one two
three four

turn into:

one
two
three
four

You need to change spaces into <br />'s.

Edited by RikTelner

0

@RikTelner, what are you wish to achieve with your post above?

Edited by lps

0

@lps, with using $content = nl2br(htmlentities($_POST['content'])); in my script, i can type a text in the textarea and use ENTER key for line breaking. Then when i send the content into db table, data will be saved there with <br> tags.
But when i want to edit that content...
The script gets data from db table and show it in the textarea again for editing. So at this time i see the text with <br> tags in it and if i add a new sentence to the text and click the submit button, data will be updated in the db, and after that when i echo the post on the page for reading, the text contains <br> tags.
How should i solve it?

But if you wish to assign values back to the textarea, remember to str_replace the <br /> back into \n.

Would you please explain it more clear?
Is it about the problem i pointed above?

0

Yes, the reason for adding the 'But if you wish to assign values back to the textarea, remember to str_replace the <br /> back into \n.' is to prevent the situation what you faced now.
When inserting data, use nl2br(htmlentities($_POST['textarea'])); When put data into textarea for editing, use<textarea><?php echo str_replace("<br />","\n",$data); ?></textarea>`
When display to html, just simply echo $data.

0

This is what i typed in the textarea for a new post and inserting into db with $content = nl2br(htmlentities($_POST['content'])); :

hi
hi
hi

Then i checked db table and it was like this:

hi<br />
hi<br />
hi

Then i checked to see how the script would echo the post on the page and it was:

hi
hi
hi

It seems to be ok but...
After that i went to edit the post.
When i clicked the edit button and entered into edit page, the content of the textarea was like this:
(with Content: <textarea name="content" rows="10" cols="40"><?php echo str_replace("<br />","\n",$row['Content']); ?></textarea>)

hi

hi

hi

It was not what i wanted to face with but anyway i edited:

hi

hi

hi //here i press the Enter key once and add a new word.
welcome

I checked db table again and it was like this:

hi<br />
<br />
hi<br />
<br />
hi<br />
welcome

I checked to see how the script would echo it on the page:

hi

hi

hi
welcome

And finally when i wanted to edit it again the textarea was like this:

hi



hi



hi

welcome

Edited by Niloofar24

1

Oh dear, please do test and try to solve these small problem by yourselves next time. Don't expect people done all the job for you, we are just here for help, not for job.

do some research why it is not working maybe? I googled for some and found that nl2br() only changes \n to <br> and does not account for Mac or Windows line breaks which are \r and \n\r respectively. So, alternatively, change the codes into
$data = ereg_replace("(\r\n|\n|\r)", "<br />",$text);, and <textarea"><?php echo preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $data); ?></textarea/>

Edited by lps

0

Thank you @lps, it works ok now with using Content: <textarea name="content" rows="10" cols="40"><?php echo str_replace("<br />","",$row['Content']); ?></textarea> I think you have edited your last post.

$data = ereg_replace("(\r\n|\n|\r)", "<br />",$text);, and <textarea"><?php echo preg_replace('/\<br(\s*)?\/?>/i', PHP_EOL, $data); ?></textarea/>

I tested the code above but it doesn't work well, has the same problem i faced with last time.

I know here is not the place to say that but:
Sorry. I don't expect people here doing all the job for me at all. I dont post my problems here in the forum to get the correct code to copy and paste in my script. As i have mentioned before in my some topics, i need people's guidance not the exact answers. Every time i face with a new problem i try alot to find the way and do it myself, if i don't find the solution finally, i post my question here to get guidance. Sometimes i have problem even with the code people gave me and i don't find how to correct it myself so i have to ask.
My last question was small problem for you and maybe for many of members but not for me. I just want to learn. (LEARNING is more important than creating that cms for me.)

...anyway, thank you for your all answers and helps.

Edited by Niloofar24

0

Maybe you mistook my meaning of previous code. What I meant is instead of using

<?php
$data = nl2br(htmlentities($_POST['textarea']));
//put the $data into database
?>

use

<?php
$data = ereg_replace("(\r\n|\n|\r)", "<br />",$text);
//put the $data into database
?>

as for the concern of nl2br() only changes \n to <br> and does not account for Mac or Windows line breaks which are \r and \n\r respectively.

Then your data in database should not be having line break, it should just showing one<br />two<br />three

And use the <textarea"><?php echo preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $data); ?></textarea/>

0

I know! i changed exactly those 2 parts you are pointing at them, but it didn't solve the problem. I changed them correctly but they didn't work well.
I soved it by using <?php echo str_replace("<br />","",$row['Content']); ?>.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.