• 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

0 głosów
345 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ź 781 wizyt
0 głosów
1 odpowiedź 1,712 wizyt
pytanie zadane 30 grudnia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
0 odpowiedzi 278 wizyt
pytanie zadane 29 sierpnia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)

93,765 zapytań

142,721 odpowiedzi

323,372 komentarzy

63,359 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...