Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> echo? return? podstawy
-Aklim...-
post 26.06.2005, 01:51:45
Post #1





Goście







Witam.
Mam sobie funkcję:
Kod
function nowe_pliki($ilosc_plikow)
{
    $path = "/var/www/html/pafiledb";
    $template = "{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />";
    require $path. "/includes/mysql.php";
    $pafiledb_sql->connect($db);
    $config = $pafiledb_sql->query($db,"SELECT * FROM $db[prefix]_settings",1);
    {
  $result = $pafiledb_sql->query($db, "SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_plikow", 0);
  $info = "{DATE}";
  $text = "{NAME}";
    }
    $i = 1;
    while ($file = mysql_fetch_object($result))
    {
  $line = str_replace("{NUMBER}", $i, $template);
  $line = str_replace("{FILELINK}", "$config[3]/pafiledb.php?action=file&id=$file->file_id", $line);
  $fileline = str_replace("{NAME}", skracaj($file->file_name), $text);
  $infoline = str_replace("{DATE}", date("j.m.Y", $file->file_time), $info);
  $line = str_replace("{FULLFILENAME}", $file->file_name, $line);
  $line = str_replace("{SHORTFILENAME}", $fileline, $line);
  $line = str_replace("{INFO}", $infoline, $line);
  echo $line;
  $i++;
    }
}

Oraz deklaruję sposób odwołania do funkcji w szablonie (w szablonie [bok.tpl] wpisuję tylko {OSTATNIE_PLIKI}):
Kod
[...]
    $ilosc_plikow = "10";
    $template->set_file('bok', 'bok.tpl');
    $template->set_var(array(
  'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));

I teraz efekty- kod (funkcja newfiles($show)) działa, ale wynik pojawia się w najmniej oczekiwanym miejscu strony, nie tam gdzie to wstawiłem w szablonie (czyli w akapicie, boczej częsci strony).
Użyłem więc return $line, zamiast echo $line i efektem było wyświetlanie wyniku funkcji w prawidłowym miescu, ale samo zadziałanie funkcji było nieprawidłowe, ponieważ wyświetlało tylko 1 najnowszy plik z pafiledb, a nie tyle ile zadeklarowałem w zmiennej $ilosc_plikow (czyli 10). Natomiast gdy wyrzuciłem return $line poza pętle while efektem było wyświetlanie w pożądanym miejscu 1 najstarszego pliku.
Ja oczywiście chciałbym (najprawdopodobniej z użyciem return, nie echo i możliwe, że z użyciem pętli for zamiast while [nie wiem jak- zgaduję i przypuszczam]) uzyskać efekt wyświetlania tylu plików ile zadeklaruję w tej zmiennej $ilosc_plikow i w miejscu takim, jakim już sobie wybiorę wstawienie tego {OSTATNIE_PLIKI} w szablonie bok.tpl.
Proszę o pomoc, bo sam sobie z tym nie radzę!
P.S wiem, że ten temat razi brakiem kompletnych podstaw i nie potrafię dobrze opisać problemu... nie wiem, czy ktoś go zrozumie i mi pomoże, ale mam nadzieję, że tak, bo męczę się z tym i googluję ponad 3 dni.
Go to the top of the page
+Quote Post
Pigula
post 26.06.2005, 09:23:07
Post #2





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

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


return zwraca ci wartosc i dlatego jak miales w petli wyswietlilo Ci tylko najnowszy plik. natomiast poza petla wyswietlilo Ci tylko ostatni bo w petli przypisywales kolejne pliki do zmiennej $line czyli nadpisywales ta zmienna. najlepiej to w petli zapisuj do zmiennej tablicowej i zwracaj returnem poza petla cala tablice i pozniej w petli juz we wlasciwym miejscu odczytuj i wyswietlaj kolejne elementu tablicy.
Go to the top of the page
+Quote Post
-Aklim...-
post 26.06.2005, 10:08:19
Post #3





Goście







Mniejwięcej rozumiem to co pisesz, ale wciąż nie wiem jak to zrobić... może ktoś to zaprezentuje w oparciu o kod, który podałem wcześniej, bo znając życie ja będę się z tym męczył tydzień, albo wcale tego nie zrobię, a ktoś inny zrobi to w 5 minut i będę mógł to przeanalizować, zrozumieć smile.gif
Go to the top of the page
+Quote Post
aleksander
post 26.06.2005, 10:35:15
Post #4





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


@Aklim...:
Go to the top of the page
+Quote Post
Pigula
post 26.06.2005, 10:40:32
Post #5





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

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


  1. <?php
  2.  $i = 1;
  3. while ($file = mysql_fetch_object($result))
  4. {
  5.  $line = str_replace(&#092;"{NUMBER}\", $i, $template);
  6.  $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  7.  $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  8.  $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  9.  $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  10.  $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  11.  $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  12.  $tab[$i] = $line;
  13.  $i++;
  14. }
  15. return $tab;
  16. ?>

wyswietlanie:
  1. <?php
  2. for ($i=1, $i<=count($tab);$i++) echo tab[$i];
  3. ?>

powinno dzialac
Go to the top of the page
+Quote Post
-Aklim...-
post 26.06.2005, 20:31:42
Post #6





Goście







kurcze... lama jestem. Mam 2 problemy i ten drugi najprawdopodobniej wynika z pierwszego choć nie wiem, a mianowcie:
1. nie wiem gdzie wstawić to do wyświetlania, bo dotychczas wyświetlałem w sposób:
  1. <?php
  2.  
  3. [...]
  4. $ilosc_plikow = &#092;"10\";
  5. $template->set_file('bok', 'bok.tpl');
  6. $template->set_var(array(
  7.  'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));
  8.  
  9. ?>

i w pliku bok.tpl w wybranym miejscu wpisywałem tylko:
Kod
{OSTATNIE_PLIKI}

funkcją było to co podałem na początku, a teraz funkcja wygląda tak:
  1. <?php
  2.  
  3. function nowe_pliki($ilosc_plikow)
  4. {
  5. $path = &#092;"/var/www/html/pafiledb\";
  6. $tpl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  7. require $path. &#092;"/includes/mysql.php\";
  8. $pafiledb_sql->connect($db);
  9. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  10. {
  11. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  12. $info = &#092;"{DATE}\";
  13. $text = &#092;"{NAME}\";
  14. }
  15. $i = 1;
  16. while ($file = mysql_fetch_object($result))
  17. {
  18. $line = str_replace(&#092;"{NUMBER}\", $i, $tpl);
  19. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  20. $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  21. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  22. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  23. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  24. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  25. $tab[$i] = $line;
  26. $i++;
  27. }
  28. return $tab;
  29. }
  30.  
  31. ?>

i samo to daje mi tylko wyświetlenie "Array", więc gdzieś muszę wpisać to
  1. <?php
  2. for ($i=1, $i<=count($tab);$i++) echo tab[$i];
  3. ?>

ale nie wiem gdzie - to pierwszy problem.
2. Gdziekolwiek nie próbowałem użyć tej pętli for z echo to parser wywalał
Kod
Parse error: parse error, unexpected ')', expecting ';' in /var/www/html/test/funkcje.php on line 466

Mam nadzieję, że wynika to z tego, że nie wiem gdzie to wstawić (choć próbowałem w różnych miejscach nawet z odrobiną logiki)...

Pomózcie... wiem, że to bezinteresowne i w ogóle mam zapewne lamerskie problemy, ale znam inne języki (taak... czytałem kursy, książki php itp.), a programista php/sql, który się tym zajmował wyparował i teraz ja muszę wszystko dokończyć :/ Radzę sobie powiem szczerz dobrze, ale tylko operując i modyfikując to co już on zrobił, a nie tworząc swoje (choć już pare rzeczy udało mi się stworzyć [edytor wysywig z bbcode smile.gif]) jeszcze raz... help sadsmiley02.gif
Go to the top of the page
+Quote Post
Pigula
post 27.06.2005, 08:06:51
Post #7





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

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


bo pisalem z glowy i jest blad tongue.gif powinno byc tak:
  1. <?php
  2. for ($i=1; $i<=count($tab);$i++) echo $tab[$i];
  3. ?>

a ty nie kopiuj poprostu tylko czytaj cos robisz smile.gif

------------
pozatym komunikat o bledzie informowal cie co jest zle

Ten post edytował Pigula 27.06.2005, 08:09:28
Go to the top of the page
+Quote Post
-Aklim...-
post 28.06.2005, 16:21:34
Post #8





Goście







uhu, to teraz pewnie ktoś mnie ochrzani, bo dalej sobie nie radze... tzn. już opisuję-
Całość działa, wyświetlane są ostatnie pliki, ale nie tak jak ja bym chciał. Działa to tak jak kod, który podałem na początku z tym echo, a mianowicie:
  1. <?php
  2.  
  3. function nowe_pliki($ilosc_plikow)
  4. {
  5. $path = &#092;"/var/www/html/pafiledb\";
  6. $tepl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  7. require $path. &#092;"/includes/mysql.php\";
  8. $pafiledb_sql->connect($db);
  9. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  10. {
  11. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  12. $info = &#092;"{DATE}\";
  13. $text = &#092;"{NAME}\";
  14. }
  15. $i = 1;
  16. while ($file = mysql_fetch_object($result)) 
  17. {
  18. $line = str_replace(&#092;"{NUMBER}\", $i, $tepl);
  19. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  20. $fileline = str_replace(&#092;"{NAME}\", skroc($file->file_name), $text);
  21. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  22. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  23. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  24. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  25. echo $line;
  26. $i++;
  27. }
  28. }
  29.  
  30. ?>

Ustalenie czym jest OSTATNIE_PLIKI w pliku szablonu bok.tpl:
  1. <?php
  2.  
  3. $ilosc_plikow = $ustawienia['ilosc_plikow'];
  4. $template->set_file('bok', 'bok.tpl');
  5. $template->set_var(array(
  6. 'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));
  7.  
  8. ?>

Oraz wyświetlenie tego poprzez wstawienie w bok.tpl wpisu OSTATNIE_PLIKI:
  1. <p>{OSTATNIE_PLIKI}</p>

To jednak skutkowało wyświetlaniem całości nie w tym miejscu co trzeba- nie tam, gdzie to w bok.tpl usadziłem.
Więc Piguła pomógł i powstał taki kod funkcji:
  1. <?php
  2. function nowe_pliki($ilosc_plikow)
  3. {
  4. $path = &#092;"/var/www/html/pafiledb\";
  5. $tepl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  6. require $path. &#092;"/includes/mysql.php\";
  7. $pafiledb_sql->connect($db);
  8. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  9. {
  10. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  11. $info = &#092;"{DATE}\";
  12. $text = &#092;"{NAME}\";
  13. }
  14. $i = 1;
  15. while ($file = mysql_fetch_object($result))
  16. {
  17. $line = str_replace(&#092;"{NUMBER}\", $i, $tepl);
  18. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  19. $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  20. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  21. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  22. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  23. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  24. $tab[$i] = $line;
  25. $i++;
  26. }
  27. return $tab;
  28.  
  29. }
  30. ?>

oraz coś do wyświetlania:
  1. <?php
  2. function pokaz_nowe_pliki($tab)
  3. {
  4. for ($i=1; $i<=count($tab);$i++) echo ($tab[$i]);
  5. }
  6. ?>

I zadeklarowanie czym jest OSTATNIE_PLIKI w szablonie bok.tpl:
  1. <?php
  2.  
  3. $ilosc_plikow = $ustawienia['ilosc_plikow'];
  4. $tab = nowe_pliki($ilosc_plikow);
  5. $template->set_file('bok', 'bok.tpl');
  6. $template->set_var(array(
  7. OSTATNIE_PLIKI => pokaz_nowe_pliki($tab)));
  8.  
  9. ?>

oraz wstawienie tego wpisu w plik szablonu bok.tpl:
  1. <p>{OSTATNIE_PLIKI}</p>

Efekt jest taki sam jak poprzednio- ostatnie pliki pojawiają się w najmniej oczekiwanym miejscu gdzieś na końcu strony będąc lekko pod innym tekstem.

Nie wiem czemu tak jest, najwyraźniej nie mogę tam nigdzie użyć echo, a return w funkcji nowe_pliki powinno już zwracać gotowy tekst w postaci ostatnich iluś ($ilosc_plikow) plików. Nie wiem, jak powinien wyglądać taki kod. Pokażę dla przykładu działający kod tak jak należy, który wyświetlam w ten sam sposób- może to pomoże (napisany przez programiste, ktory sie tym zajmowal wczesniej...).
  1. <?php
  2.  
  3. function parsuj_text($n)
  4. {
  5. global $lang;
  6. $date_format = get_date_format();
  7. $date_offset = get_date_offset();
  8. $url = './../ostatnie/text.txt';
  9. $array = @file($url);
  10. if (!$array)
  11. {
  12. $txt = $jezyk['BRAK_PLIKU'];
  13. }
  14. else
  15. {
  16. $item = array();
  17. if ($n <= ((int)(sizeof($array) / 4)))
  18. {
  19. for ($i = 0; $i < $n; $i++)
  20. {
  21. $item[$i]['date'] = date(&#092;"j.m.Y\", ($array[4 * $i + 1] + $date_offset));
  22. $item[$i]['title'] = $array[* $i + 2];
  23. $item[$i]['link'] = $array[* $i + 3];
  24. $txt .= $item[$i]['date'] . ' - <a href=\"' . $item[$i]['link'] . '\" title=\"' . $item[$i]['title'] . '\">' . $item[$i]['title'] . '</a><br />';
  25. }
  26. }
  27. else
  28. {
  29. for ($i = 0; $i < ((int)(sizeof($array) / 4)); $i++)
  30. {
  31. $item[$i]['date'] = date(&#092;"j.m.Y\", ($array[4 * $i + 1] + $date_offset));
  32. $item[$i]['title'] = $array[* $i + 2];
  33. $item[$i]['link'] = $array[* $i + 3];
  34. $txt .= $item[$i]['date'] . ' - <a href=\"' . $item[$i]['link'] . '\" title=\"' . $item[$i]['title'] . '\">' . $item[$i]['title'] . '</a><br />';
  35. }
  36. }
  37. }
  38. return $txt;
  39. }
  40.  
  41. ?>

Wyświetlanie:
  1. <?php
  2.  
  3. $template->set_file('gora', 'gora.tpl');
  4. $template->set_var(array(
  5. 'TEXT' => parsuj_text($ustawienia['txt_na_strone'])));
  6.  
  7. ?>

Potem tylko wstawiam {TEXT} w pliku i mam zawartość (wykonanie funkcji parsuj_text($n)) w miejscu jakie sobie ustale w tym szablonie. Wyraźna różnica to brak echo.

Any idea? Help... tak, wiem- powinnem sobie ciachnąć łeb, bo straszna maruda jestem i ciągle mam problemy... pomóżcie sadsmiley02.gif
Go to the top of the page
+Quote Post
-Aklim...-
post 29.06.2005, 21:32:08
Post #9





Goście







Kurcze, edytowac nie mogę.
Nie ma odpowiedzi, czyli się tego nie da zrobić?
jejku... zależy mi na tym, bo bez tego będę musiał przerwać wszystkie prace, a projekt porzucić :/
Jeśli ktoś w pełni nie rozumie problemu (badziewnie opisuję) to proszę dopytać!
sad.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 1.07.2025 - 20:31