Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]ksiega
Forum PHP.pl > Forum > Przedszkole
dave666
Mógłby mi ktoś pomóc to połączyć w jeden dzialający poprawnie skrypt bo jest tak ze wyświetla wpisy tak jak powinno a pod spodem tam gdzie działą stronicowanie pokazuje w jednym ciągu
  1. <?php
  2. $max_na_stronie = 6;
  3. if(isset($_GET['strona']) && is_numeric($_GET['strona'])){
  4. $strona = $_GET['strona'];
  5. } else {
  6. $strona = 1;
  7. }
  8. $file = file('wpisy.txt');
  9.  
  10. foreach($file as $key => $value)
  11. {
  12.   $data = explode('|||', $value);
  13.  
  14.   echo '<b>Imię:</b> '. $data[0] .'<br>';
  15.   echo '<b>e-mail:</b> '. $data[1] .'<br>';
  16.   echo '<b>www:</b> '. $data[2] .'<br>';
  17.   echo '<b>treść:</b> '. $data[3] .'<br>';
  18.   $tresc = wordwrap($data[4], 90, "<br>", 1);
  19.   echo $tresc .'<br><br><hr>';
  20.  
  21. }
  22. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; $i++){
  23. if(isset($file[$i])){
  24. echo $file[$i];
  25.  
  26. }
  27. }
  28.  
  29. if($strona > 1){
  30. echo ("<center>");
  31. echo ("<br><br>");
  32. echo ("<a href=index.php?id=ksiega&strona=");
  33. echo ($strona-1);
  34. echo ("> Poprzednia strona </a>");
  35. }
  36. if(count($file) > $strona*$max_na_stronie){
  37. echo ("<a href=index.php?id=ksiega&strona=");
  38. echo ($strona+1);
  39. echo ("> Następna strona </a>");
  40. }
  41. ?>



jak cos to mogę pokazac jak to wyglada jaki ma błąd
Procesor
A możesz dokładniej opisać problem, bo nie za bardzo zrozumiałem tongue.gif
dave666
z wiec tak :
wyglada na to ze skrypt dwa razy otwiera text zapisany w wpisy.txt a wyglada to następująco

Imię: Ula
e-mail:
www: http://
treść: treść komentarza bla bla bla bla ------------ poprawnie
----------------------------------------------------------------------------
i tak dalej a pod tym jest takie cos
-----------------------------------------------------------------------------
artys||||||http://||||||teść komentarza bla bla bla sylwia||||||http://||||||treść komentarza bla bla bla bla ||||||http://||||||treść komentarza bla bla bla bla xxxxx||||||http://||||||treść komentarza bla bla bla bla

czyli nie jest tak jak powinno ---- ciag wszystkich komentarzy w jednym ciagu a nie tak jak wyzej czyli poprawnie

Lion_87
Dlaczego dwa razy otwiera? bo tak sobie życzy ten skrypt o tuuu
  1. <?php
  2. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; $i++){
  3. if(isset($file[$i])){
  4. echo $file[$i];
  5.  
  6. }
  7. }
  8. ?>
dave666
oki ale jak usunę
  1. <?
  2. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; $i++){
  3. if(isset($file[$i])){
  4. echo $file[$i];
  5.  
  6. }
  7. }
  8. ?>
to owszem znika to na dole ale nie dzieli pliku na części po 6 komentarzy
Lion_87
bo do tego by podzielić na 6 właśnie potrzebna jest pętla for() tongue.gif
dave666
tak zrobiłem ale cos dalej jest nie tak
  1. <?php
  2. $max_na_stronie = 6;
  3. if(isset($_GET['strona']) && is_numeric($_GET['strona'])){
  4. $strona = $_GET['strona'];
  5. } else {
  6. $strona = 1;
  7. }
  8. $file = file('wpisy.txt');
  9.  
  10. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; $i++){
  11. if(isset($file[$i])){
  12.    echo $file[$i];
  13.   echo '<b>Imię:</b> '. $data[0] .'<br>';
  14.   echo '<b>e-mail:</b> '. $data[1] .'<br>';
  15.   echo '<b>www:</b> '. $data[2] .'<br>';
  16.   echo '<b>treść:</b> '. $data[3] .'<br>';
  17.   $tresc = wordwrap($data[4], 90, "<br>", 1);
  18.   echo $tresc .'<br><br><hr>';
  19. }
  20. }
  21.  
  22. if($strona > 1){
  23. echo ("<center>");
  24. echo ("<br><br>");
  25. echo ("<a href=index.php?id=ksiega&strona=");
  26. echo ($strona-1);
  27. echo ("> Poprzednia strona </a>");
  28. }
  29. if(count($file) > $strona*$max_na_stronie){
  30. echo ("<a href=index.php?id=ksiega&strona=");
  31. echo ($strona+1);
  32. echo ("> Następna strona </a>");
  33. }
  34. ?>
Lion_87
Aby wyswietlic iles tam w jednum pliku musisz cos w tym stylu robic....
  1. <?php
  2. $max_na_stronie = 6;
  3. if(isset($_GET['strona']) && is_numeric($_GET['strona'])){
  4. $strona = $_GET['strona'];
  5. } else {
  6. $strona = 1;
  7. }
  8. $file = file('wpisy.txt');
  9.  
  10. for($i=0;$i < 6; $i++){
  11. $data = explode('|||', $file[$i]);
  12.  
  13.  echo '<b>Imię:</b> '. $data[0] .'<br>';
  14.  echo '<b>e-mail:</b> '. $data[1] .'<br>';
  15.  echo '<b>www:</b> '. $data[2] .'<br>';
  16.  echo '<b>treść:</b> '. $data[3] .'<br>';
  17.  $tresc = wordwrap($data[4], 90, "<br>", 1);
  18.  echo $tresc .'<br><br><hr>';
  19.  
  20. }
  21.  
  22. ?>
dave666
Super działa tak jak miło tylko jest ten problem ze nie zmienia strony - co usunełem czego nie powinienem usówac
  1. <?php
  2. $max_na_stronie = 6;
  3. if(isset($_GET['strona']) && is_numeric($_GET['strona'])){
  4. $strona = $_GET['strona'];
  5. } else {
  6. $strona = 1;
  7. }
  8. $file = file('wpisy.txt');
  9.  
  10. for($i=0;$i < 6; $i++){
  11. $data = explode('|||', $file[$i]);
  12.  
  13. echo '<b>Imię:</b> '. $data[0] .'<br>';
  14. echo '<b>e-mail:</b> '. $data[1] .'<br>';
  15. echo '<b>www:</b> '. $data[2] .'<br>';
  16. echo '<b>treść:</b> '. $data[3] .'<br>';
  17. $tresc = wordwrap($data[4], 90, "<br>", 1);
  18. echo $tresc .'<br><br><hr>';
  19.  
  20. }
  21. if($strona > 1){
  22. echo ("<center>");
  23. echo ("<br><br>");
  24. echo ("<a href=index.php?id=ksiega&strona=");
  25. echo ($strona-1);
  26. echo ("> Poprzednia strona </a>");
  27. }
  28. if(count($file) > $strona*$max_na_stronie){
  29. echo ("<a href=index.php?id=ksiega&strona=");
  30. echo ($strona+1);
  31. echo ("> Następna strona </a>");
  32. }
  33. ?>
Lion_87
nie zmieniaja bo musisz pobawić sie tą linia
  1. <?php
  2. for($i=0;$i < 6; $i++){
  3. ?>
dave666
Jak wpisze tak jak ty napisałeś to od razu jest błąd strony nie wyświetla jej
Lion_87
Ja CI nic nie kazałem wpisywac tongue.gif
masz tą linie i ja modyfikuj sam. Nic trudnego.
  1. <?php
  2. $i=0;$i < 6
  3. ?>

pierwsza strona od poczatku do 6 lini
nastepna strona
  1. <?php
  2. $i=6;$i < 12
  3. ?>

itd.........
zegarek84
powinno działać stronicowanie...
  1. <?php
  2. $ile=6; //ile na stronie wyników
  3. $strona=1; //która strona
  4. $od=($strona-1)*$ile;
  5. $do=$strona*$ile;
  6.  
  7. for($i=$od;$i<$do;++$i){..........................}
  8.  
  9. ?>
dave666
tak zgadza się dzięki za pomoc już zajarzyłem o co ci chodzi
dałem tak

  1. <?
  2. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; $i++){
  3. ?>


tylko jak jest np 32 komentarzy to 4 są po prostu puste
zegarek84
$strona * $max_na_stronie - oblicz to przed pętlą bo inaczej liczy Ci to w każdym przebiegu i jest to wolniejsze... zamiast $i++ możesz też użyć ++$i


ps jeśli już rozumiesz jak działają operacje na plikach tekstowych to proponowałbym Ci coś tylko trochę trudniejszego - wykonanie księgi w bazie SQLite przy wykorzystaniu PDO - jeśli nauczysz się podstawowych zapytań SQL to z bazy będziesz mógł dowolnie zwracać wyniki i na przyszłość by Ci się przydało a SQLite opiera się też tylko o jeden plik i w sumie nie jest takie ubogie...
dave666
to cały skrypt juz dzialający całkiem dobrze z tym jedynym błędem
  1. <?php
  2. $max_na_stronie = 6;
  3. if(isset($_GET['strona']) && is_numeric($_GET['strona'])){
  4. $strona = $_GET['strona'];
  5. } else {
  6. $strona = 1;
  7. }
  8. $file = file('wpisy.txt');
  9.  
  10. for($i=$strona*$max_na_stronie - $max_na_stronie;$i < $strona * $max_na_stronie; ++$i){
  11. $data = explode('|||', $file[$i]);
  12.  
  13. echo '<b>Imię:</b> '. $data[0] .'<br>';
  14. echo '<b>e-mail:</b> '. $data[1] .'<br>';
  15. echo '<b>www:</b> '. $data[2] .'<br>';
  16. echo '<b>treść:</b> '. $data[3] .'<br>';
  17. $tresc = wordwrap($data[4], 90, "<br>", 1);
  18. echo $tresc .'<br><br><hr>';
  19. }
  20. if($strona > 1){
  21. echo ("<center>");
  22. echo ("<br><br>");
  23. echo ("<a href=index.php?id=ksiega&strona=");
  24. echo ($strona-1);
  25. echo ("> Poprzednia strona </a>");
  26. }
  27. if(count($file) > $strona*$max_na_stronie){
  28. echo ("<a href=index.php?id=ksiega&strona=");
  29. echo ($strona+1);
  30. echo ("> Następna strona </a>");
  31. }
  32. ?>

zegarek84 - nie bardzo rozumiem tego co masz na mysli
$strona * $max_na_stronie - oblicz to przed pętlą bo inaczej liczy Ci to w każdym przebiegu i jest to wolniejsze...

zegarek84
jaki błąd?? - masz na myśli puste komentarze?? spróbuj tak jak teraz - gdzie przez "krótki if" sprawdziłem do ilu ma być przebieg pętli $do=($strona*$ile<count($file))?($strona*$ile):count($file); .... co do tego "wolniejsze" to za każdym razem w pętli Ci obliczało do ilu to $i ma dążyć - a możesz to policzyć raz poza pętlą... jeśli planujesz też bardzo dużą księge gości to zamiast file() proponuję skorzystać z wolniejszego ale mniej pamięciożernego fgets() które czyta linijkę po linijce a nie cały plik - tyle, że teraz masz juz rozwiązane a pod fgets() musiałbyś przebudować kod.....
  1. <?php
  2. $ile=6; //ile na stronie wyników
  3. $strona=1; //która strona
  4. $od=($strona-1)*$ile;
  5. $do=($strona*$ile<count($file))?($strona*$ile):count($file);
  6.  
  7. for($i=$od;$i<$do;++$i){..........................}
  8.  
  9. ?>
dave666
Lion_87 nie wiem czy to o to ci chodziło ale coś takiego zrobiłem działa wszystko jest elegancko tak jak powinno

  1. <?php
  2. define('MAX', 6); // maksymalna liczba wpisow na stronie
  3. $file = 'wpisy.txt';
  4.  
  5. $aLines = file($file);
  6. $iCount = count($aLines);
  7. $iStart = @(int)$_GET['start'];
  8.  
  9. for($i=$iStart; $i < $iCount && $i < $iStart + 5; $i++) {
  10.    $data = explode('|||', $aLines[$i]);
  11. echo '<b>Imię:</b> '. $data[0] .'<br>';
  12. echo '<b>e-mail:</b> '. $data[1] .'<br>';
  13. echo '<b>www:</b> '. $data[2] .'<br>';
  14. echo '<b>treść:</b> '. $data[3] .'<br>';
  15. $tresc = wordwrap($data[4], 90, "<br>", 1);
  16. echo $tresc .'<br><br><hr>';
  17. }
  18.  
  19. if($iCount > MAX) {
  20.    pagenumbering($iStart, MAX, $iCount, '');
  21.  
  22. }
  23. /**
  24.  * $start - od ktorej pozycji mamy wyswietlac infromacje
  25.  * $one_page - ile informacji na jednej stronie
  26.  * $quantity - calkowita ilosc informacji mozliwych do wyswietlenia
  27.  * $get - czesc url, przesyla potrzebne dane
  28.  */
  29. function pagenumbering($start, $one_page, $quantity, $get='') {
  30.  
  31.    // czy potrzebne jest stronicowanie
  32.    if($one_page >= $quantity) {
  33.        return;
  34.    }
  35.  
  36.    // strzalka w lewo, wstecz
  37.    if($start!=0) {
  38.        echo '<a href="index.php?id=ksiega1'. $get .'&amp;start='. ($start-$one_page) .'">wstecz</a> ';
  39.    }
  40.  
  41.    // numeruj strony, zaznacz na ktorej jestes
  42.    for($i=0, $j=1; $i<$quantity; $i+=$one_page, ++$j) {
  43.        if($start <= $i && $start > $i-$one_page) {
  44.            echo $j.' ';
  45.        }
  46.        else {
  47.            echo '<a href="index.php?id=ksiega1'. $get .'&amp;start='. $i .'">'. $j .'</a> ';
  48.        }
  49.    }
  50.  
  51.    // strzalka w prawo, dalej
  52.    if($start+$one_page < $quantity) {
  53.        echo '<a href="index.php?id=ksiega1'. $get .'&amp;start='. ($start+$one_page) .'">dalej</a>';
  54.    }
  55.  
  56. }
  57.  
  58. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.