Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z odswieżaniem zapytania
Forum PHP.pl > Forum > Przedszkole
andrzej7322
Witam, mam problem napisalem klasę galerii i mam dwie osobne funkcje jedna odpowiedzialna jest za wyswietlanie tytułów rekordów z bazy danych a druga odpowiedzialna jest za wyświetlanie operacji.
Jedną z operacji jest zmiana pozycji wyświetlania i gdy robie UPDATE do bazy danych pozycja rekordu sie zmienia lecz zmiana w tytulach jest widoczna dopiero gdy ponownie odswieze stronę.
oto fragment klasy
  1. class album {private function options($id){
  2. $wyn=mysql_fetch_array(mysql_query("SELECT * FROM ".tabela." WHERE id='$id'"));
  3. if($_POST['check']==$id){
  4. if(isset($_POST['top'])){
  5. $poz_minus=$wyn['poz']-1;
  6. mysql_query("UPDATE ".tabela." SET poz=poz+1 WHERE poz='$poz_minus'");
  7. mysql_query("UPDATE ".tabela." SET poz='$poz_minus' WHERE id='$id'");
  8. alert('Operacja przebiegła pomyślnie','1');
  9. }
  10. if(isset($_POST['down'])){
  11. $poz_plus=$wyn['poz']+1;
  12. mysql_query("UPDATE ".tabela." SET poz=poz-1 WHERE poz='$poz_plus'");
  13. mysql_query("UPDATE ".tabela." SET poz='$poz_plus' WHERE id='$id'");
  14. alert('Operacja przebiegła pomyślnie','1');
  15. }
  16. $wyn=mysql_fetch_array(mysql_query("SELECT * FROM ".tabela." WHERE id='$id'"));
  17. }
  18. echo'<form method="POST"action="?gallery"class="form">';
  19. echo'<input type="hidden" name="id" value="'.$id.'" /><input type="hidden" name="check" value="'.$id.'" />
  20. <b class="icon">
  21. <div class="inputhover"><input type="submit" class="m_edit" value=" " name="edit"/></div><div class="inputhover"><input type="submit" class="m_del" value=" " name="del"/></div></b>
  22. <b class="icon">';
  23. if($wyn['poz']!=1){
  24. echo'<div class="inputhover"><input type="submit" class="m_top" value=" " name="top"/></div>';
  25. }
  26. else echo'<input type="submit" class="m_ntop" value=" "disabled/>';
  27. if($wyn['poz']!=$this->end()){
  28. echo'<div class="inputhover"><input type="submit" class="m_down" value=" " name="down"/></div>';
  29. }
  30. else echo'<input type="submit" class="m_ndown" value=" "disabled/>';
  31. echo'</b>';
  32. echo'</form>';
  33. }
  34.  
  35. private function first(){
  36. $this->ends();
  37. echo'<div class="titlebox">
  38. <input type="checkbox" style="float:left;"/>
  39. <b class="bbox">Nazwa albumu</b>
  40. <b class="icon"><img src="images/mm/_del.gif"alt="delete"></b><b class="icon"><img src="images/mm/_edit.gif"alt="edit"></b>
  41. </div><div class="contentbox">';
  42. $c=0;
  43. $zap=mysql_query("SELECT * FROM ".tabela." order by poz");
  44. if(mysql_num_rows($zap)>0){
  45. while($wyn=mysql_fetch_array($zap)){
  46. $class=($c++%2==1) ? 'conbox' : 'conboxodd';
  47. echo'<div class="'.$class.'">';
  48. $this->pokaz($wyn['id']);
  49. echo'<form method="POST"action=""class="formleft">';
  50. echo'<input type="hidden" name="id" value="'.$wyn['id'].'" />';
  51. echo'<input type="submit" class="bboxsubmit"name="edit" style="width:310px;"value="'.$wyn['poz'].'. '.$wyn['nazwa'].'"/>';
  52. echo'</form>';
  53. $this->options($wyn['id']);
  54. echo'</div>';
  55. }
  56. if(isset($_POST['end_edit']) OR ($_POST['del']) OR ($_POST['id'])){
  57. echo'<a href="?gallery" style="clear:both;"class="submita">Zakończ edycję</a>';
  58. }
  59. }
  60. else echo'<div class="warr"><b>Brak albumów</b></div>';
  61. echo'</div>';
  62. }
  63. }

Z góry dziękuję za pomoc.
bastard13
Rozumiem, że $this->pokaz($id) wyświetla rekord, tak? W takim razie w funkcji $this->first() najpierw wywołujsze $this->pokaz($id), a później $this->options($id), więc aktualizujesz rekord dopiero po wyświetleniu go.
andrzej7322
$this-$pokaz(); jest to funkcja odpowiedzialna za widoczność rekordu na stronie ta funkcja okreslam czy rekord ma byc widoczny czy ukryty
od pokazywania rekordow jest petla while..

dobrze myslisz ja najpierw wyswietlam a pozniej aktualizuje i chcialbym dodac zmienna ze po kazdej aktualizacji zapytanie przed petla sie odswieza
bastard13
Ale tak czy inaczej najpierw wyświetlasz rekordy, a dopiero później je aktualizujesz.
andrzej7322
no tak jak napisalem powyzej myslalem nad dodaniem zmienej po updacie np.$a=0 i wtedy $a++ i dać warunek gdy $a > 0 to zapytanie wykonuje sie ponownie
bastard13
Id elementu, który chcesz zmienić jest w zmiennej $_POST['check'], tak? Więc zrób, tak:
  1. if(isset($_POST['check']))
  2. {
  3. //sprawdzanie wszystkich danych i ewentualny update
  4. }
  5. //wyświetlanie
andrzej7322
mi te aktualizacje dzilaja w funkcji options i tam wyswietlanie jest dobrrze ustawione bo dalem po updatach
  1. $wyn=mysql_fetch_array(mysql_query("SELECT * FROM ".tabela." WHERE id='$id'"));

ale nie wiem jak zrobic zeby tytuly tez zmienialy swoje pozycje po aktualizacji poprostu nie wiem jak zsynchronizowac funkcje options z petla w funkcji first bo tytuly dopiero po ponownycm odswizeniu ustawiaja sie w dobrej kolejnosci.
bastard13
Zmienna $wyn w jednej funkcji to nie jest ta sama co w drugiej. Poza tym porozdzielaj funkcje w taki sposób, że jedna wyświetla, a kolejna robi update, bo w tej chwili wywołujesz mnóstwo zapytań, których można uniknąć.
  1. class album{
  2. update()
  3. {
  4. if($_POST['check'])
  5. { /*sprawdź i uaktualnij*/ }
  6. }
  7.  
  8. pobierz()
  9. { /*zwracanie rekordów*/ }
  10.  
  11. pokaz($id)
  12. { /*czy pokazac*/ }
  13.  
  14. wyswietl($id)
  15. { /*wyświetl rekord*/ }
  16.  
  17. first()
  18. {
  19. $this->update();
  20. $elements=$this->pobierz();
  21. while($row=mysql_fetch_array($elements))
  22. {if($this->pokaz($row['id']))
  23. $this->wyswietl($row['id']);
  24. }
  25. }
  26.  
  27. }

Ogólnie chodzi o to, że wszystkie operacje powinny być od siebie oddzielone, bo później, jeżeli będziesz chciał zmienić sposób np. wyświetlania, to zmieniasz jedną funkcję, a nie przelatujesz przez klasę i szukasz, gdzie masz wprowadzić zmiany.
andrzej7322
Dzięki już teraz wiem że w kodzie należy mieć porządek.
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.