PHP eerste 10 woorden uit database veld laden*

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hello,

Ik zal graag de eerste 10 woorden willen laden uit een veld in mijn database. Ik heb veel op het internet gezocht en heb ook een aantal dingen gevonden, maar ik kreeg het niet werkend met mijn eigen script. Dit zijn twee van de websites die ik gevonden heb:

http://www.webmasterworld.com/forum88/5570.htm
http://www.nutt.net/2004/...-a-string/comment-page-1/

Ik heb van alles geprobeerd maar heb het niet werkend kunnen krijgen met mijn script (Ben nog niet echt goed met PHP)

Dit is het stukje php dat ik nu in mijn eigen script heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    $sql = mysql_query('SELECT * FROM nieuws ORDER BY nieuws_id DESC');
    while($row = mysql_fetch_assoc($sql)){
?>

        <font size="5"><strong><?php echo htmlentities($row['titel']); ?></strong></font><br />
        <i>Geschreven door <?php echo $row['naam']; ?> op <?php echo $row['datum']; ?></i><br />
        
        <?php 
        
        echo ($row['bericht']); 
        
        ?>


Wat ik wil is dat die bij : echo ($row['bericht']); alleen maar de eerste 10 woorden worden geladen....van het berichtje...
(Het is een nieuws script)


Kan iemand mij misschien helpen?

Alvast bedankt

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 23:26

orf

Kijk eens naar de functie str_word_count(). Let vooral op het optionele 2e argument waarmee de functie de woorden teruggeeft als array.

  • PeterSelie
  • Registratie: December 2002
  • Laatst online: 27-08 11:55
Volledige rij ophalen en die dan filteren?

Beetje zoeken, eerste hit? :) : http://www.google.nl/sear...tnG=Zoeken&meta=&aq=f&oq=

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16-09 12:57
Persoonlijk zou ik eerder voor een X aantal tekens gaan. Waarschijnlijk gaat het om je titel af te korten wegens plaats"gebrek"? Dan zeker op aantal tekens tellen; dit omdat je enkele lange woorden kan hebben die ervoor zorgen dat het systeem toch faalt.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Intentionally left blank


Verwijderd

Topicstarter
Orf...hartstikke bedankt!!! Ik ben de site een aantal keer tegengekomen maar heb er over heen gekeken:P
Crisp,,,bedankt en sorry voor het plaatsen in de verkeerde categorie...


De rest bedankt voor de hulp en het meedenken:

Dit werkt nu bij mij;):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        function word_limiter( $text, $limit = 500, $chars = '0123456789' ) {
        if( strlen( $text ) > $limit ) {
            $words = str_word_count( $text, 2, $chars );
            $words = array_reverse( $words, TRUE );
            foreach( $words as $length => $word ) {
                if( $length + strlen( $word ) >= $limit ) {
                    array_shift( $words );
                } else {
                    break;
                }
            }
            $words = array_reverse( $words );
            $text = implode( " ", $words ) . '&hellip;';
        }
        return $text;
    }
        echo word_limiter ($row['bericht']);

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 00:17
Styxxy schreef op donderdag 24 december 2009 @ 21:21:
Persoonlijk zou ik eerder voor een X aantal tekens gaan. Waarschijnlijk gaat het om je titel af te korten wegens plaats"gebrek"? Dan zeker op aantal tekens tellen; dit omdat je enkele lange woorden kan hebben die ervoor zorgen dat het systeem toch faalt.
Afbreken op een X aantal tekens kan daarnaast ook simpel in een SQL-query met LEFT() of SUBSTR().

Een nette optie om een X aantal woorden terug te krijgen met een SQL-query is er afaik niet. Van zoiets zul je ook niet blij worden:
SQL:
1
SELECT LEFT(bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht, LOCATE(' ',bericht)+1)+1)+1)+1)+1)+1)+1)+1)) as bericht FROM nieuws;
Verwijderd schreef op donderdag 24 december 2009 @ 21:38:
Orf...hartstikke bedankt!!! Ik ben de site een aantal keer tegengekomen maar heb er over heen gekeken:P
Crisp,,,bedankt en sorry voor het plaatsen in de verkeerde categorie...


De rest bedankt voor de hulp en het meedenken:

Dit werkt nu bij mij;):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        function word_limiter( $text, $limit = 500, $chars = '0123456789' ) {
        if( strlen( $text ) > $limit ) {
            $words = str_word_count( $text, 2, $chars );
            $words = array_reverse( $words, TRUE );
            foreach( $words as $length => $word ) {
                if( $length + strlen( $word ) >= $limit ) {
                    array_shift( $words );
                } else {
                    break;
                }
            }
            $words = array_reverse( $words );
            $text = implode( " ", $words ) . '&#8230;';
        }
        return $text;
    }
        echo word_limiter ($row['bericht']);
Nu limiteer je de lengte dus op 500 tekens, dát kan heel simpel in je SQL-query...
SQL:
1
SELECT LEFT(bericht, 500) AS bericht FROM nieuws;


edit:
Hmpf, ik interpreteerde je topictitel alsof je ook daadwerkelijk een oplossing puur met een andere SQL-query zocht. Dat kan ik verkeerd opgevat hebben. :P

[ Voor 4% gewijzigd door Xander op 24-12-2009 21:53 ]

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

Verwijderd

Het is zelfs er slim om het door sql zelf te laten oplossen.
Plus het waanzinnige voordeel van makkelijk leesbare code

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Xander schreef op donderdag 24 december 2009 @ 21:46:
[...]


Nu limiteer je de lengte dus op 500 tekens, dát kan heel simpel in je SQL-query...
SQL:
1
SELECT LEFT(bericht, 500) AS bericht FROM nieuws;


edit:
Hmpf, ik interpreteerde je topictitel alsof je ook daadwerkelijk een oplossing puur met een andere SQL-query zocht. Dat kan ik verkeerd opgevat hebben. :P
Dat is natuurlijk niet geheel waar, de PHP oplossing returned hele woorden, en een SQL-based substring oplossing kan dat niet (zoals je zelf ook al opmerkte overigens) :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16-09 12:57
Spider.007 schreef op vrijdag 25 december 2009 @ 12:26:
[...]

Dat is natuurlijk niet geheel waar, de PHP oplossing returned hele woorden, en een SQL-based substring oplossing kan dat niet (zoals je zelf ook al opmerkte overigens) :)
Maar het is aan te raden om na X aantal tekens af te breken in plaats van na X aantal woorden; zie ook mijn vorige post.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 25 december 2009 @ 12:21:
Het is zelfs er slim om het door sql zelf te laten oplossen.
Plus het waanzinnige voordeel van makkelijk leesbare code
8)7 Ten eerste is dit een job voor je view/presentatielaag en heeft je DBMS daar dus niets mee van doen.
En ten tweede is de code (in dit geval query) helemaal niet makkelijk leesbaar noch onderhoudbaar.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Styxxy schreef op vrijdag 25 december 2009 @ 12:44:
[...]

Maar het is aan te raden om na X aantal tekens af te breken in plaats van na X aantal woorden; zie ook mijn vorige post.
Bedoel je de post waarin je een aanname met een persoonlijke voorkeur combineert of heb ik een inhoudsvolle post van je over het hoofd gezien? Daarnaast zie ik geen enkele relatie tussen onze posts behalve dat ze in hetzelfde topic staan; dus hoe of waar je mij precies van probeert te overtuigen ontgaat mij nogal? :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Als je het toch met een query wil oplossen zoek dan de eestvolgende whitespace (tab, space, new line, etc) na x (500?) chars zodat je geen afgekapte woorden krijgt.Of haal 500 chars uit de database en zoek met PHP de laatste whitespace op (strrpos).

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16-09 12:57
Spider.007 schreef op zaterdag 26 december 2009 @ 11:38:
[...]
Bedoel je de post waarin je een aanname met een persoonlijke voorkeur combineert of heb ik een inhoudsvolle post van je over het hoofd gezien? Daarnaast zie ik geen enkele relatie tussen onze posts behalve dat ze in hetzelfde topic staan; dus hoe of waar je mij precies van probeert te overtuigen ontgaat mij nogal? :)
Uiteraard was mijn post deels met een persoonlijke voorkeur; echter ik heb deze vraag al vele malen tegen gekomen (op andere plaatsen) en telkens gaf zowat iedereen met ervaring aan dat je beter op X aantal tekens kan afbreken (eventueel het laatste onvolledige woord weg laten). Deze raad wordt gegeven met dezelfde argument(en) als ik heb gepost (woorden kunnen een variabele lengte hebben, waardoor je met veel lange woorden alsnog in de problemen kan komen).

Overigens, er was niet een directe relatie tussen jouw en mijn post, je zei echter wel "[...]de PHP oplossing returned hele woorden[...]". Omwille van dat stukje verwees ik even terug naar mijn post.

(Wat was er overigens niet inhoudsvol aan mijn post? Erg onbeleefde reactie van jou. :X)

Acties:
  • 0 Henk 'm!

Verwijderd

kan je dit gewoon niet doen door in de query toe te voegen: LIMIT 10; ?

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 16-09 12:57
Verwijderd schreef op zaterdag 26 december 2009 @ 14:37:
kan je dit gewoon niet doen door in de query toe te voegen: LIMIT 10; ?
LIMIT in (My)SQL geeft aan hoeveel rijen je maximaal in je resultaat wilt hebben. Deze "functie" heeft niet echt iets te maken met de inhoud van cellen.
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants (except when using prepared statements).
Bron: http://dev.mysql.com/doc/refman/5.0/en/select.html
Pagina: 1