tags:

views:

33

answers:

3

I am using the following code to display the title and body content of articles from a database. How can I make only the first 200 characters from the article's body appear as opposed to all the characters?

<?php

        $select = mysql_query("SELECT * FROM articles ORDER BY id DESC");
        while ($result = mysql_fetch_assoc($select))
    {
        $id     = $result['id'];
        $title  = $result['title'];
        $body   = $result['body'];

        echo "<h2><a name='$id'>" . $title . "</a></h2>";
        echo $body . "<br />";
    }

?>

Any help is greatly appreciated!

+1  A: 

Change this line:

echo $body . "<br />";

To this:

echo (strlen($body) > 200) ? substr($body,0,200) : $body;
echo "<br />";

That utilizes the comparison operator (aka the ternary operator) to output only the first 200 characters if $body is over 200 chars in length, and the whole body otherwise.

A common technique you could use to mark a truncated block of text would be to add an ellipsis on the end of a truncated text block (three periods, or the HTML entity &hellip;). This is why I usually use the comparison operator here rather than just doing a substr($str,0,200), which would work for both cases, but not let you modify them separately.

zombat
Unfortunately this doesn't change anything, the entire length of content (which is well over 200 characters) still appears.
Daemon
I am such an idiot, your solution does work. I had two pages open and I was editing the wrong one. lolThanks a lot.
Daemon
Np, glad it worked.
zombat
+1  A: 

substr($body, 0, 200)

Beware if you're storing markup in the database as this may chop a tag in half.

Ignacio Vazquez-Abrams
This also works, Thanks.
Daemon
+1  A: 

You can do this in PHP as the others have mentioned, or directly in your query as well (if you don't need all of the data on your page):

$select = mysql_query("SELECT id, title, SUBSTR(body, 0, 200) FROM articles ORDER BY id DESC"
Ryan Rivest