[php] aantal nieuwsberichten inkorten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Ik heb een eenvoudig nieuwssysteem mbv mysql en php gemaakt. Er wordt verbinding gemaakt met mysql en de berichten worden getoond. Als een bericht langer is dat 290 karakters wordt deze automatisch ingekort en en verschijnt de optie om het bericht helemaal te lezen.
Tot dusver geen problemen.
Het probleem is ontstaan omdat er inmiddels erg veel berichten in de database staan. De nieuwsberichten verschijnen op mijn hoofdpagina (www.nietechtnodig.nl) en ik wil het volgende doen: als er meer dan 5 berichten in de database staan moeten er dus max. 5 berichten op de browser worden weergegeven en automatisch een link naar alle nieuwsberichten verschijnen.

Wie helpt mij?!

Het script om de berichten op te halen en weer te geven:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$db = mysql_connect("localhost","***","***") or die (mysql_error());   
mysql_select_db("ferrysch_pagina",$db);;
$news_SQL="SELECT * FROM news ORDER BY news_datetime DESC";
$news_result=mysql_query($news_SQL);
while($news=mysql_fetch_array($news_result))
{
//Opmaak van datum
$unixtime = strtotime($news['news_datetime']);
//controle op lengte hoofdtekst en eventueel inkorten
if(strlen($news['news_main'])>290)
{
$news['news_main']=substr($news['news_main'],0,290) . " ... <a href=news.php?news_id=" . $news['news_id'] . "><span class=link>lees verder...</a>";
}
?>   
<?php echo $news['news_header'] ?>
<?php echo date("d-m-Y H:i",$unixtime) ?>
<?php echo $news['news_main'] ?>

<?php
}
mysql_close();
?>      
      


Greets Waterspout

[ Voor 0% gewijzigd door Creepy op 03-04-2007 15:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt toch gewoon LIMIT gebruiken en eventueel een row count om te zien hoeveel berichten er in de database staan ?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

PHP:
1
$news_SQL="SELECT * FROM news ORDER BY news_datetime DESC LIMIT 5";

:?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Gewoon in de while-loop een teller bijhouden en een break als dit 5 is. ^^ is een veel beter idee.

[ Voor 151% gewijzigd door Daos op 03-04-2007 15:02 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
In de sql query al knippen, dit in php doen is onnodig. Het _kan_ wel trouwens, 5x de eerste of laatste uit de array halen en dan ben je klaar. Maar handiger is je query aan te passen ;)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Daos schreef op dinsdag 03 april 2007 @ 14:49:
Gewoon in de while-loop een teller bijhouden en een break als dit 5 is.
Bah. Bespaar je db connectie en alle relavante servers de moeite en gebruik gewoon een sql limit. Elke keer voor maar een klein aantal records een hele tabel leegtrekken is gewoon bad practice.

{signature}


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Hier op GoT gaan we er vanuit dat je in eerste instantie ook zelf aan de slag bent gegaan met je probleem en dat je aangeeft welke zaken je nu zelf hebt geprobeerd en wat daar nu niet mee lukte.

Dus, wat heb je nu zelf al geprobeerd? Een LIMIT moet je toch zelf ook wel gevonden hebben?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Waterspout schreef op dinsdag 03 april 2007 @ 14:41:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$db = mysql_connect("localhost","***","***") or die (mysql_error());   
mysql_select_db("ferrysch_pagina",$db);;
$news_SQL="SELECT * FROM news ORDER BY news_datetime DESC";
$news_result=mysql_query($news_SQL);
while($news=mysql_fetch_array($news_result))
{
//Opmaak van datum
$unixtime = strtotime($news['news_datetime']);
//controle op lengte hoofdtekst en eventueel inkorten
if(strlen($news['news_main'])>290)
{
$news['news_main']=substr($news['news_main'],0,290) . " ... <a href=news.php?news_id=" . $news['news_id'] . "><span class=link>lees verder...</a>";
}
?>   
<?php echo $news['news_header'] ?>
<?php echo date("d-m-Y H:i",$unixtime) ?>
<?php echo $news['news_main'] ?>

<?php
}
mysql_close();
?>      
      
Je hebt wel deze code gemaakt, maar van het gebruik van LIMIT in je querys heb je nog nooit gehoord?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Overigens: je mag best wel langer dan 1 statement in PHP mode blijven. :P

{signature}


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 01:05
Zoals gezegd, met 'LIMIT 5' kun je de 5 eerste berichten uit je database halen. Als je ook verder wilt kunnen 'bladeren' in het nieuws (als je het over verschillende pagina's wilt verdelen), kun je de volgende 5 records ophalen met 'LIMIT 5,5', de volgende 5 weer met 'LIMIT 10,5', enz.

Overigens:
SUBSTR kan ook al in je sql query, scheelt je weer een stukje PHP.
• In je HTML-output vergeet je de <span> af te sluiten. Daarnaast zou ik de <a> binnen de <span> zetten en niet andersom... ;)

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


Acties:
  • 0 Henk 'm!

  • Blackbird-ce
  • Registratie: September 2005
  • Laatst online: 21-09 20:05
Verwijderd schreef op dinsdag 03 april 2007 @ 16:54:
Je hebt wel deze code gemaakt, maar van het gebruik van LIMIT in je querys heb je nog nooit gehoord?
...daar is hij dan niet de enige in. Had ongeveer hetzelfde toen ik een beetje begon met een CMS-je in elkaar flansen :X
Pagina: 1