Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Komentarze do niusow na plikach i chyba problem z zerem - false
Forum PHP.pl > Forum > PHP
Volume
Nie moge sobie poradzic juz pre razy natknalem sie na ten problem i ciagle nie wiem jak najsensowniej z niego wybrnac.
Chodzi mianowicie o to, ze gdy chce cos uzyskac w petli np. for i indeksuje mi to jako zero to zamierzony cel sie nie realizuje.
Juz sprecyzuje o co mi chodzi, np teraz staram sie zrobic komentarze do niusow ktore pobierane sa z pliku txt, gdzie niusy sa zapisane w postaci: linia: nr||autor||tresc||data itd.

wyciagm dane w ten sposob:

plik: news.php
  1. <p><a href="index.php">Napisz newsa</a></p>
  2. <?php
  3.  
  4. $dane = file('plik.txt');
  5. $str;
  6.  
  7. /* do stronicowania */
  8. if (isset($_GET['str'])) $str = $_GET['str']-1;
  9. else $str = 0;
  10.  
  11. $all = count($dane);
  12. echo $all;
  13. $comments_on_page = 3;
  14.  
  15. for($i=0;$i<count($dane);$i++)
  16. {
  17. list($_nr[$i], $_tytul[$i], $_tresc[$i], $_autor[$i], $_data[$i]) = explode("||", $dane[$i]);
  18. }
  19.  
  20. for ($i = $str*$comments_on_page; $i < $comments_on_page+($str*$comments_on_page); $i++)
  21. {
  22. $dane[$i]=trim($dane[$i]);
  23. if(!empty($dane[$i]))
  24. {
  25. echo '
  26. <div style="margin: 10px; background: green;">
  27. <h2 style="background: yellow;">('.$_nr[$i].') tytul: '.$_tytul[$i].' (data: '.$_data[$i].')</h2>
  28. <p style="background: jellow;">tresc: '.$_tresc[$i].'</p>
  29. <p style="background: orange;">Autor: '.$_autor[$i].'</p>
  30. <p style="background: lime;">';
  31. if(empty($_GET['str'])) echo '<a href="news.php?add='.$i.'">';
  32. else echo '<a href="'.$_SERVER['REQUEST_URI'].'&add='.$i.'">';
  33. echo 'Komentarze</a></p></div>';
  34. }
  35. if(!empty($_GET['add']))
  36. {
  37. if($_GET['add']==$i)
  38. {
  39. echo 'Opcje do dodawania';
  40. }
  41. }
  42. }
  43. echo '</p>';
  44. if ($all > $comments_on_page)
  45. {
  46. echo '<p>';
  47. for ($i=0; $i <= ceil(($all-$comments_on_page)/$comments_on_page); $i++ )
  48. {
  49. if($str==$i) echo '<strong>'.($i+1).'</strong> ';
  50. else echo ' <a href="?str='.($i+1).'">'.($i+1).'</a> ';
  51. }
  52. echo '</p>';
  53. }
  54.  
  55. ?>
Ogolnie dane newsow wyswietalaja sie poprawnie ale gdy chcem dorobic jakies dodatkowe elementy z uzyciem indeksow z petli to w momencie wywolania w linku indeksu "0" - np. ?add=0 - to nie otrzymuje tego co potrzebuje i co natomiast normalnie pojawia sie przy kolejnym indeksie ?add=1 itd.
Do tej pory kombinowalem i zmienialem zliczanie z tablicy od jeden a nie od zera - ale to z koleji powoduje komplikacje przy stronicowaniu - np. nie moge poradzic sobie ze stala liczba niusow na stronie - zawsze na pierwszej jest jeden mniej...

Domyslam sie ze problem z zerem zwiazany jest z tym ze wartosc ta jest rownoznaczna z false wiec skrypt sie nie wykonuje tak jak sie by chcialo.

I teraz moje pytanie czy mozna jakos przemianowac to zero zeby bylo ono jako true? Badz moze ktos zna jakis inny sposob na poradzenie sobie z tym problemem?
dantes
Wycinek z http://pl.php.net/empty :

Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:

"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)


Tak więc, mimo że indexy zaczynają Ci się od zera, to użycie empty traktuje to, jakby zmienna add nie została przekazana.

Zamiast tego, użyj funkcji isset. Powinno pomóc i rozróżnić sytuacje, gdy mamy index.php?add= i index.php?add=0

Na manualu jest nawet dobry przykład:
  1. <?php
  2. $var = 0;
  3.  
  4. // Evaluates to true because $var is empty
  5. if (empty($var)) {
  6. echo '$var is either 0, empty, or not set at all';
  7. }
  8.  
  9. // Evaluates as true because $var is set
  10. if (isset($var)) {
  11. echo '$var is set even though it is empty';
  12. }
  13. ?>
thek
A ja bym zastosował ewentualne porównanie z dokładnością do typu. Oprócz znanego == istnieje także przecież ===, które oznacza, że nie tylko wartość musi być identyczna, ale także typ zmiennej. To rozróżni 0 od NULL czy "0". A chyba o to Ci chodzi smile.gif
Volume
Dzieki pomoglo z isset - natomiast z przyrownaniem "===" cos dalej nie chcialo, ale tak czy owak zmienilem koncepcje zamiast pobierac indeks bezposrednio z petli $i postanowilem pobierac indeks z nr lini z niusa ($_nr[$i]) - dzieki czemu bede mial stale indeksy co wydaje mi sie, ze ulatwi zapisywanie komentarzy.

Niestety znowu natknalem sie na problem i mysle mysle i dalej nie wiem jak samemu sobie poradzic, moze zeby nie zakladac nowego temtu to spytam sie tu jeszcze o jedna rzecz.

Pjawil mi sie problem taki, ze nie wsywietla mi podstrony dla opcji do komentarza niusa w momencie gdy strona ze stronicowania jest inna niz pierwsza (?str=1).

Aktualnie kod tak wyglada:
  1. <?php
  2.  
  3. $dane = file('plik.txt');
  4. $str;
  5.  
  6. /* do stronicowania */
  7. if (isset($_GET['str'])) $str = $_GET['str']-1;
  8. else $str = 0;
  9.  
  10. $all = count($dane);
  11. echo $all;
  12. $comments_on_page = 4;
  13.  
  14. for($i=0;$i<count($dane);$i++)
  15. {
  16. list($_nr[$i], $_tytul[$i], $_tresc[$i], $_autor[$i], $_data[$i]) = explode("||", $dane[$i]);
  17. }
  18.  
  19. for ($i = $str*$comments_on_page; $i < $comments_on_page+($str*$comments_on_page); $i++)
  20. {
  21. $dane[$i]=trim($dane[$i]);
  22. $news= '<div style="margin: 10px; background: green;">
  23. <h2 style="background: yellow;">('.$_nr[$i].') tytul: '.$_tytul[$i].' (data: '.$_data[$i].')</h2>
  24. <p style="background: jellow;">tresc: '.$_tresc[$i].'</p>
  25. <p style="background: orange;">Autor: '.$_autor[$i].'</p>';
  26. if(!isset($_GET['add']))
  27. {
  28. if(!empty($dane[$i]))
  29. {
  30. echo $news;
  31. echo '<p style="background: lime;"><a href="?add='.$_nr[$i].'">Komentarze</a></p></div>';
  32. }
  33. }
  34. else
  35. {
  36. if($_GET['add']==$_nr[$i])
  37. {
  38. echo $news;
  39. echo '<p style="background: lime;"><a href="?str=1">Wroc do newsow</a></p></div>';
  40. echo '<p>inne opcje dodawania</p>';
  41. }
  42. }
  43. }
  44.  
  45. if ($all > $comments_on_page && empty($_GET['add']))
  46. {
  47. echo '<p>';
  48. for ($i=0; $i <= ceil(($all-$comments_on_page)/$comments_on_page); $i++ )
  49. {
  50. if($str==$i) echo '<strong>'.($i+1).'</strong> ';
  51. else echo ' <a href="?str='.($i+1).'">'.($i+1).'</a> ';
  52. }
  53. echo '</p>';
  54. }
Czy moze ktos wie co jest tego przyczyna, jak mozna by rozwiklac ten problem?

edit: aha doszedlem dlaczegos ie tak dzieje, dlatego ze w petli mam warunek $i<$comments_on_page+($str*$comments_on_page) - wiec ogranicza mi zakres dp ilosci niusow jakie sobie okresle...
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.