Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problemy z funkcją
Forum PHP.pl > Forum > Przedszkole
Kostek.88
Witam, mam taki oto skrypt:

  1. <?php
  2.  
  3.  function editTreeValue($id, $name) {
  4. mysql_query('UPDATE drzewko SET nazwa="'.$name.'" WHERE id='.$id);
  5.  }
  6.  
  7. function displayTree($root) {
  8. // pobierz parametry glownego wezla
  9. $r = mysql_query('SELECT `left`, `right` FROM 
  10. drzewko WHERE id=''.$root.''');
  11. if($row = mysql_fetch_array($r)) {
  12. $right = array();
  13. // wyswietl wezly
  14. $r = mysql_query('SELECT * FROM drzewko WHERE `left` BETWEEN ''.$row['left'].'' AND ''.$row['right'].'' ORDER BY `left`');
  15. while($row = mysql_fetch_array($r)) {
  16. // czysc stos
  17. if(count($right) > 0) {
  18. while($right[count($right)-1] < $row['right']) {
  19. array_pop($right);
  20. }
  21. }
  22. // wyswietl element
  23. echo '<form class="drzewo" onsubmit="'.editTreeValue($_GET['edit'], $_GET['nazwa']).'">';
  24.  echo '<input type="hidden" name="edit" value="'.$row['id'].'">';
  25.  echo '<div>';
  26. echo str_repeat('&nbsp;&nbsp;',count($right))."\n";
  27. if(count($right) - 1 > 0) {
  28. echo str_repeat('&nbsp;&nbsp;',
  29. count($right) - 1).'<img src="icons/tree_galaz.gif" align="top" /> <img src="icons/tree_open.gif" align="top" /> <input type="text" name="nazwa" value="'.$row['nazwa'].'" class="nazwa" onfocus="this.className='nazwa_active'" onblur="this.className='nazwa'" /> <input type="submit" value="Zmień" class="button">';
  30. } else {
  31. echo '<img src="icons/tree_galaz.gif" align="top" /> <img src="icons/tree_open.gif" align="top" /> <input type="text" name="nazwa" value="'.$row['nazwa'].'" class="nazwa" onfocus="this.className='nazwa_active'" onblur="this.className='nazwa'" /> <input type="submit" value="Zmień" class="button">';
  32. }
  33. echo '</div>';
  34.  // zloz jego parametr 'right' na stos
  35.  $right[] = $row['right'];
  36. echo '</form>';
  37. }
  38. // wszystko jest OK
  39. return 1;
  40. }
  41. // tere fere, nie ma takiego wezla
  42. return 0;
  43. } // end displayTree();
  44. ?>


Zwróćcie uwagę, że w 23. linii mam takie coś, że jak się wyśle dane, to ma być wykonywana funkcja wyżej utworzona. Problem w tym, że jak się ta funkcja wykona, to nie widzę tego efektów. Dopiero po ponownym przeładowaniu strony łapie. Czy ktoś wie co to może być? Dziękuję z góry za odpowiedź.

PS. ten plik dołączany jest do index.php za pomocą include, potem wywoływana jest w nim funkcja displayTree
Kod
displayTree(1)
Foxx
No widocznie kolejność wykonywania działań przez skrypt jest taka, że najpierw pobiera dane do wyświetlenia a dopiero potem wykonuje się editTreeValue(), zmień to albo przeładuj stronę za pomocą header()...
Kostek.88
Jak mam zmienić tę kolejność? Owszem jest kolejność odwrotna, ale po każdym przekazaniu danych do przeglądarki, strona się przeładowuje przecież. Poza tym przekierowałem stronę za pomocą header i to nic nie daje, bo wywala błąd, że już są znaczniki HTML i tekst i nie można przekierować.

  1. <?php
  2. function editTreeValue($id, $name) {
  3. mysql_query('UPDATE drzewko SET nazwa="'.$name.'" WHERE id='.$id);
  4. header('Location: index.php');
  5.  }
  6. ?>


Daje błąd:

Kod
[b]Warning[/b]:  Cannot modify header information - headers already sent by (output started at c:\usr\krasnal\www\tree\index.php:1) in [b]c:\usr\krasnal\www\tree\functions.php[/b] on line [b]4

[/b]
Foxx
No możesz przecież przeprojektować skrypt tak, żeby kod, który pobiera dane do wyświetlenia znajdował się dopiero po instrukcjach, które modyfikują bazę danych.

Jeżeli jednak chcesz zastosować header ale już masz wysłany do przeglądarki tekst to użyj ob_start()" title="Zobacz w manualu PHP" target="_manual i ob_end_flush()" title="Zobacz w manualu PHP" target="_manual. Poza tym nie jestem pewien czy ten header umieszczony w tamtym miejscu nie zrobi ci nieskończonego przeładowania, to też musisz przemyśleć.
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.