Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> porcjowanie zapytania
maciu
post
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


Poniżej przedstawiam kod php, którego zadaniem jest wyświetlenie pola TRESC z tabeli bazy danych, w taki sposób, żeby każda strona składała się z określonej ilości znaków ($max_words). Za pomocą nawigacji liczbowej (ala wyszukiwarki) będzie można przejść do następnej strony tekstu.

[php:1:2660eee6e2]
$query = mysql_query("SELECT tresc FROM tabela where id='1';");
$record = mysql_fetch_array($query);
$tresc = $record[0];

$ile_znakow_all=strlen($tresc); //ilosc znakow w artykule
$max_words=600; //maksymalna ilosc znakow na stronie
$ile_stron=round($ile_znakow_all / $max_words); //ilosc stron do wyswietlenia

for ($i=0; $i<$ile_stron; $i++)
{
$numer=$i+1;
echo"<a href=test.php?ktory=$i>[$numer]</A> |";
}
$txt.=substr($tresc,$ktory*$max_words,$max_words);
echo" $txt";
[/php:1:2660eee6e2]


Wszystko byłoby dobrze, gdyby nie to, że dzielone są wyrazy. Da się zrobić tak, żeby kod nie rozrywał pojedynczych wyrazów, mimo że $max_words zostało przekroczone. A jeszcze lepiej by było gdyby kod uwzględniał całe zdania i dopiero wtedy ucinał tekst.
Go to the top of the page
+Quote Post
jono
post
Post #2





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Może podziel za pomocą explode() po kropce. Otrzymasz (teoretycznie) pojedyńcze zdania. I teraz będziesz wyświetlał kolejne zdania, sumując jednocześnie ilość ich znaków. Mając warunek[php:1:efe393fdf9]<?php
foreach($tablica_ze_zdaniami as $zdanie){
$sumaznakow += strlen($zdanie);
echo $zdanie.'.';
//wyswietlasz zdanie i dopisukesz kropke
if($sumaznakow > $limit){break;}
}
?>[/php:1:efe393fdf9]
Albo coś w tym rodzaju będziesz mógł przerwać właśnie wtedy, kiedy ilość znaków przekroczy limit...
Go to the top of the page
+Quote Post
maciu
post
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


od po poprawieniu wygląda tak

[php:1:d466cbba1b]
$query = mysql_query("SELECT tresc FROM biografie where id='1';");
$record = mysql_fetch_array($query);
$tresc = $record[0];

$ile_znakow_all=strlen($tresc); //ilosc znakow w artykule
$max_words=600; //maksymalna ilosc znakow na stronie
$ile_stron=round($ile_znakow_all / $max_words); //ilosc stron do wyswietlenia

for ($i=0; $i<$ile_stron; $i++)
{
$numer=$i+1;
echo"<a href=test.php?ktory=$i>[$numer]</A> |";
}
// $txt.=substr($tresc,$ktory*$max_words,$max_words);
// echo" $txt";

echo '<BR>';
$tablica_ze_zdaniami=explode('.', $tresc);
foreach($tablica_ze_zdaniami as $zdanie){
$sumaznakow += strlen($zdanie);
echo $zdanie.'.';
//wyswietlasz zdanie i dopisukesz kropke
if($sumaznakow > $max_words){break;}
}
[/php:1:d466cbba1b]

Problem polega na tym, żeby "złączyć" pasek liczbowy nawigcyjny z wyświetlanym tekstem, bo w tej chwili wygląda to tak, że po kliknięciu w dowolnąliczbe w nawigaorze to wyświetla sięten sam tekst(od początku aż do limitu znaków ze zmiennej max_words).
Myśle, że trzeba będzie zastosowaćjakieśfunkcje związane z tablicami, ale mogę sobie z tym poadzić
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:23