webForumDet fria alternativet

Visa 50 första orden ur text.

PHP

7 svar · 268 visningar · startad av Pudolf

Medlem sedan juli 2000221 inlägg
Frågan#1

Hallå,

Har en kolumn i en MySQL-databas som heter Text, nu undrar jag om man med PHP kan visa de t ex 50 första orden (kanske bara går med tecken?) ur den texten men oxo att den "avrundar" eller slutar visa efter nästa kommande punkt!

Alltså, jag vill jag att den ska visa de t ex 50 första orden, men dock fortsätta visa resten tills nästa punkt kommer.

T ex om det hade vart 3 första orden så vill jag att den då visar:

Pelle åt en glass igår.

- istället för

Pelle åt en

Men det kanske bara går/går bättre med tecken istället för ord?

Tacksam för svar!

[Redigerat av Pudolf den 31 dec 2001]

Medlem sedan juni 2000310 inlägg
#2

Så här kan man göra:

$i = 0;
$punkt = FALSE;
$ord = split(" ",$STRÄNGEN_MED_TEXT);
while($punkt == FALSE) {
  echo " ".$ord[$i];
  if($i >= 50 && ereg("\.",$ord[$i])) 
    $punkt = TRUE;
  $i++;
}

Jag säger inte att det är det bästa men det är det sättet jag hade gjort det på...

------------------
<A HREF="http://www.gaski.net" TARGET=_blank>Datorer är inte smarta, de bara tror att de är det.</A>

Medlem sedan juli 2000221 inlägg
#3

Tack, har testat lite med hur jag ska lägga in koden. Letade tidigare efter tutorials på hur man gör nyhetssystem och hittade den här enkla, som jag nu testar på. Men jag fattar inte riktigt var jag ska placera kodsnutten du skrev.

Och angående koden nedan, där det står $rows[1,2,3 osv], går det inte att använda själva namnet som man har i databsen, t ex rubrik, text, datum etc?

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<?php
//connect using your hostname , username and password. 
$connection = mysql_connect("localhost" , "namn" , "lösen");
//select the news database
$db = mysql_select_db("newstest" , $connection);
//this is our SQL query , note we are ordering by the submitted date
//and setting a limit of ten items
$query = "SELECT * FROM news ORDER BY datum DESC LIMIT 10";
//execute the query
$result = mysql_query($query);
//start creating our table
echo ("<table border = '0' width = '90%'>");
//loop through rows in the database
while ($rows = mysql_fetch_row($result))
{
//in the first row we display the title ($rows[1]) and the author $rows[3]
echo ("<tr bgcolor='violet'><td>$rows[1]</td><td>author : $rows[3]</td></tr>");
//in the next row we display the description which is $rows[2]
echo ("<tr><td colspan ='2' bgcolor='lavender'>$rows[2]</td></tr>");
//finally we display the url which is rows[5] and the submitted date which is rows[4]
echo ("<tr bgcolor='violet'><td><a href='$rows[5]'>$rows[5]</a></td><td>Submitted on : $rows[4]</td></tr>");
}
//finish or table
echo "</table>";
?>
</body>
</html>

Obs: jag har inte skrivit koden själv, hitta den på tutorialsida.

Vore schysst om frågorna kunde besvaras :)

Tack på förhand! (gott nytt år förresten)

[Redigerat av Pudolf den 01 jan 2002]

Medlem sedan juni 2000310 inlägg
#4

Antar att det är beskrivningen som du vill förkorta till 50 ord. Det är $rows[2]. Så där det står:

echo ("<tr><td colspan ='2' bgcolor='lavender'>$rows[2]</td></tr>");

Kan du skriva:

echo ("<tr><td colspan ='2' bgcolor='lavender'>");
$i = 0;
$punkt = FALSE;
$ord = split(" ",$rows[2]);
while($punkt == FALSE) {
echo " ".$ord[$i];
if($i >= 50 && ereg("\.",$ord[$i])) 
$punkt = TRUE;
$i++;
}
echo ("</td></tr>");

Testa om det fungerar...

------------------
<A HREF="http://www.gaski.net" TARGET=_blank>Datorer är inte smarta, de bara tror att de är det.</A>

Medlem sedan juli 2000221 inlägg
#5

Tack för koden, får dock ett felmeddelande när jag lägger in den:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Inetpub/visa.php on line 32

Det växlar mellan fel på line 30-34.
Det är dessa rader som är 30-34:

while($punkt == FALSE) {
echo " ".$ord[$i];
if($i >= 50 && ereg("\.",$ord[$i])) 
$punkt = TRUE;
$i++;

Några förslag?
Tack,

Medlem sedan juni 2000310 inlägg
#6

Detta uppstår antagligen när $rows[2] innehåller färre än 50 ord.

På någon sett måste du sätta en limit på while satsen så att den inte fortsätter i all evighet. Förutsettningen nu är att det 50 ordet eller efter innehåller en punkt. Är det däremot bara 49 ord eller färre fortsätter while satsen i all evighet...

du skulle kunna ersätta

while($punkt == FALSE) {

med

while($punkt == FALSE &#0124;&#0124; $i>=60) {

men då struntar den i om det är någon punkt efter 60 ord utan avbryter där direkt. Men är det däremot en punkt i 54 ordet kommer den att sluta där.

Vad tror du om det?

------------------
<A HREF="http://www.gaski.net" TARGET=_blank>Datorer är inte smarta, de bara tror att de är det.</A>

Medlem sedan juli 2000221 inlägg
#7

Okej, tack.

Så om jag har 500 istället för 60

while($punkt == FALSE &#0124;&#0124; $i>=[b]500[/b]) {

Så bör ju allt fungera, om jag då inte har nån tex över 500 ord?
Eller segar den mycket om man har hög siffra?

Medlem sedan okt. 20001 285 inlägg
#8

if(strlen($row[msg]) >= 500){
$row[msg] = substr($row[msg], 0, 499) . "...";}

------------------
" The code is out there "

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)