Daemon
Daemon

Reputation: 13

How to limit the display of content from a database?

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!

Upvotes: 1

Views: 4842

Answers (4)

Victor Augusto
Victor Augusto

Reputation: 2426

I've created a function called limit. Maybe it will be useful for you as well.

function limit($string, $limit) {
        if (strlen($string) < $limit) {
            $result = substr($string, 0, $limit);
        }
        else
            $result =  substr($string, 0, $limit) . '...';
        return $result;
    }


echo limit('Testing my function', 5);

//Output
Test...

Upvotes: 0

zombat
zombat

Reputation: 94147

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.

Upvotes: 1

Ryan Rivest
Ryan Rivest

Reputation: 1029

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"

Upvotes: 1

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798566

substr($body, 0, 200)

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

Upvotes: 1

Related Questions