• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System komentarzy, brak natychmiastowego wyświetlenia oraz problem z odświeżaniem

Aruba Cloud - Virtual Private Server VPS
0 głosów
209 wizyt
pytanie zadane 16 maja 2018 w PHP przez Midgard Początkujący (390 p.)

Dzień dobry,

mam pewien problem w związku z prostym systemem komentarzy. Pierwszy z nich polega na tym, że w momencie odświeżenia strony przeglądarka ponownie wysyła żądanie w konsekwencji dublując komentarz. Poniżej funkcja do której przekazywany jest POST.

function test(){
                if(isset($_POST['comment_submit'])){
                    
                    
                    $obj = new MySQL('localhost','root','','mydatabase');
                    
                    $poles = array('article_id','message','user_name','date');
                    $values = array($_REQUEST['id'],trim($_POST['comment_text']),$_POST['user_name'],$_POST['date']);
                    
                    $obj->table_insert('comments',$poles,$values);
                   
                    unset($_POST['comment_submit']);
                    $obj->disconnect();
                    
                }
                    
            }

Nie do końca rozumiem dlaczego tak się dzieje, skoro po odświeżeniu strony warunek nie powinien być spełniony. Drugi problem polega na tym, że w momencie dodania komentarza nie jest on natychmiastowo wyświetlany (strona wymaga odświeżenia). Próbowałem to rozwiązać dodając header('Refresh:0) , ale ponieważ kod wykonywany jest już wewnątrz html'a to występuje problem z nagłówkami. Drugim pomysłem było umieszczenie kodu js, który odświeżałby stronę, ale w tym wypadku strona po odświeżeniu się zapętla ciągle pytając czy ponownie wysłać żądanie POST i wstawia ten sam komentarz ilekroć użytkownik naciśnie prześlij ( czyli wracamy do problemu pierwszego ).

 

 <div id="content">
        
        <?php 
            require_once('get_article.php');
            require_once('get_comment.php');
            require_once('submit_comment.php');
            ?>

        </div>

Tak wygląda sekcja odpowiedzialna za komentarze. Nie do końca mam pomysł dlaczego komentarz nie pojawia się od razu skoro po wysłaniu POST'a strona sama się odświeża. Byłoby miło gdyby ktoś mi to wytłumaczył.

1 odpowiedź

0 głosów
odpowiedź 16 maja 2018 przez Bosswell Nałogowiec (36,470 p.)
wybrane 16 maja 2018 przez Midgard
 
Najlepsza

Dzieje się tak za sprawą specyfiki protokołu HTTP. Możesz tego uniknąć tworząc nagłówek po dodaniu komentarza.

if(isset($_POST['comment_submit']) ) {
   //code
   header('Location:'.$_SERVER['PHP_SELF'])
}

Albo całą logikę dodawania komentarza przechowywać w innym pliku i na końcu skryptu zrobić headera do pliku z szablonem html.

komentarz 17 maja 2018 przez event15 Szeryf (93,790 p.)
Warto też zainteresować się programowaniem obiektowym :)

Podobne pytania

0 głosów
1 odpowiedź 460 wizyt
0 głosów
1 odpowiedź 1,588 wizyt
pytanie zadane 30 grudnia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
0 odpowiedzi 196 wizyt
pytanie zadane 29 sierpnia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)

93,322 zapytań

142,319 odpowiedzi

322,387 komentarzy

62,651 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...