Új komment nem jelenik meg frissítés nélkül
2013-12-25T13:44:25+01:00
2013-12-25T18:12:57+01:00
2022-08-17T17:45:32+02:00
geforce9600
Sziasztok

Miért van az, hogy az új komment csak oldalfrissítés után jelenik meg?

Mutatok kódokat, bár nem a legrövidebbek sorry. Köszönöm előre is a help-et.

add_komment.php

<?php session_start(); include_once("connect.php"); $hiba = ""; $komment = mysqli_real_escape_string($kapcs, $_POST['komment']); $id = intval($_POST['id']); $ido = date("Y-m-d-H:i"); if(empty($komment)) { $hiba = "Nem írt semmit a hozzászólás mezőbe."; } if(strlen($komment) > 5000 ) { $hiba = "A hozzászólása maximum 5000 karakter legyen."; } if($hiba == "") { $addKomment = mysqli_query($kapcs, "INSERT INTO dog_komment(user,kutya,hozzaszolas,mikor) VALUES('".$_SESSION['user_logged_in']['id']."','".$id."','".$komment."','".$ido."')") or die(mysqli_error($kapcs)); } ob_start(); $row_per_page=20; $dog_id=intval($id); $kommentsDown = mysqli_query($kapcs, "SELECT kutya FROM dog_komment WHERE kutya='$dog_id'"); $num = mysqli_num_rows($kommentsDown); $getComments = mysqli_query($kapcs, "SELECT register.id,register.keresztnev,register.vezeteknev,register.thumb, dog_komment.komment_id,dog_komment.user, dog_komment.kutya,dog_komment.hozzaszolas,dog_komment.mikor FROM register INNER JOIN dog_komment ON register.id=dog_komment.user WHERE kutya='$dog_id' ORDER BY komment_id DESC LIMIT 0 ,$row_per_page"); if(mysqli_num_rows($getComments) > 0 ) { while($komment = mysqli_fetch_assoc($getComments)) { echo '<div class="komment">'; if($komment['thumb'] != "") { echo '<a href="profil?user='.$komment['user'].'" title="">'; echo '<img class="no_image" src="images/user/'.$komment['thumb'].'" width="40" height="40" alt="" />'; echo '</a>'; } else { echo '<a href="profil?user='.$komment['user'].'" title="">'; echo '<img class="no_image" src="images/no_image.gif" width="40" height="40" alt="" />'; echo '</a>'; } echo '<h4 class="comment_user"><a href="profil?user='.$komment['user'].'" title="">'.$komment['vezeteknev'].' ' .$komment['keresztnev'].'</a></h4>'; echo '<h6 class="comment_date">'.substr($komment['mikor'],0,-3).'</h6>'; if(isset($_SESSION['user_logged_in']) and $_SESSION['user_logged_in']['id'] == $komment['user']) { echo ' <ul class="options_div"> <li><a href="#" class="btn"><img src="images/options.png" witdh="25" height="17" /></a> <ul> <li><a href="#">Hozzászólás szerkesztése</a></li> <li><a href="#">Még valami lesz itt</a></li> <li><a href="#">Hozzászólás törlése</a></li> </ul> </li> </ul> '; } echo '<p>'.nl2br($komment['hozzaszolas']).'</p>'; echo '</div>'; } } ?> <?php $data= ob_get_contents(); ob_end_clean(); echo json_encode( array("hiba"=> $hiba , "kommentek"=> $data) ); ?>

Ajax

$('#addKomment').click(function() { if($('#dog_komment').val() != "") { var kommentSzoveg = $('#dog_komment').val(); var dog_id = $('#dog_id').val(); $.ajax ({ url: 'files/add_komment.php', type: 'POST', cache: false, data: { komment:kommentSzoveg, id:dog_id }, dataType: 'JSON', beforeSend: function() { $('#addKomment').val('Pillanat..').attr('disabled', 'disabled'); }, success: function(data) { $('.komment_box').html(data.kommentek); $('#kommentForm')[0].reset(); $('#addKomment').val('Hozzászólok').removeAttr('disabled'); $('#dog_komment').css('height', 40+px); }, error: function(e) { alert(e); } }); } });

Kommentek megjelenítése:

if(mysqli_num_rows($getComments) > 0 ) { include("files/smiley.php"); echo '<div class="komment_box">'; while($komment = mysqli_fetch_assoc($getComments)) { echo '<div class="komment" id="komment_box_'.$komment['komment_id'].'">'; if($komment['thumb'] != "") { echo '<a href="profil?user='.$komment['user'].'" title="">'; echo '<img class="no_image" src="images/user/'.$komment['thumb'].'" width="40" height="40" alt="" />'; echo '</a>'; } else { echo '<a href="profil?user='.$komment['user'].'" title="">'; echo '<img class="no_image" src="images/no_image.gif" width="40" height="40" alt="" />'; echo '</a>'; } echo '<h4 class="comment_user"><a href="profil?user='.$komment['user'].'" title="">'.$komment['vezeteknev'].' ' .$komment['keresztnev'].'</a></h4>'; echo '<h6 class="comment_date">'.substr($komment['mikor'],0,-3).'</h6>'; if(isset($_SESSION['user_logged_in']) and $_SESSION['user_logged_in']['id'] == $komment['user']) { echo ' <ul class="options_div"> <li><a href="#" class="btn"><img src="images/options.png" witdh="25" height="17" /></a> <ul> <li><a href="#">Hozzászólás szerkesztése</a></li> <li><a href="#">Még valami lesz itt</a></li> <li><a class="delete_komment" id="'.$komment['komment_id'].'" href="#">Hozzászólás törlése</a></li> </ul> </li> </ul> '; } echo '<p>'.smiley(nl2br($komment['hozzaszolas'])).'</p>'; echo '</div>'; } echo '</div>'; if($num > $row_per_page) { $p = new pagination; $p->Items($num); $p->limit($row_per_page); $p->currentPage($page); $p->nextLabel("Következő"); $p->prevLabel("Előző"); $p->target("kutya?kutya=$dog_id"); $p->show(); } }
Mutasd a teljes hozzászólást!
Bár ezen a hosszú kódon sosem érnék végig, de alapelv. hogy előbb lementem az új üzenetet, majd utána lekérdezem, majd megjelenítem az utolsókat...
Mutasd a teljes hozzászólást!

  • Nem semmi kód... Dobd ki és kezdd újra. És döntsd el hogy AJAX vagy nem, így elég zavaros.
    Mutasd a teljes hozzászólást!
  • Inkább téged dobtak volna ki
    Mutasd a teljes hozzászólást!
  • Nem tartozik a kérdésedhez, de egy kérdésem volna.

    Ezt a formát nem ismered?.

    SELECT r.id,r.keresztnev,r.vezeteknev,r.thumb,d.komment_id,d.user,d.kutya,d.hozzaszolas,d.mikor FROM register r INNER JOIN dog_komment d ON r.id=d.user WHERE d.kutya='$dog_id' ORDER BY d.komment_id DESC LIMIT 0 ,$row_per_page;
    Mutasd a teljes hozzászólást!
  • Vegyél vissza a hangnemedből! Nem kívánok Karácsony napján vitatkozni veled. A bemásolt kódok szépen szólva átláthatatlan spagettikódok. Ne várd hogy ezt bárki is kibogarássza neked. És mondd, mi volt rossz abban a javaslatban hogy vagy AJAX vagy nem, és szervezd újra nulláról? Ez így rossz ahogy van! Mellesleg annyi helyen elszállhat hibával és mindenhol rosszul van lekezelve hogy az szörnyű. Többszörös felesleges cast-olás, hibás SQL kérések, feleslegesen használt kimeneti bufferek, soroljam? Ezt amit szeretnél pár sorban el lehetne készíteni, szépen, átláthatóan, könnyen bővíthetően. De nem javítgatni hanem kuka és nulláról fuss neki. Elsőnek is: ha már adsz vissza $hiba adatot akkor mit keres ott a kódban die()? Ha van AJAX kérés, akkor üzenet küldése után miért nem frissíted be a tartalmat? Ekkor célszerűen ezzel is kellene induláskor is megjeleníteni, nem lenne vegyes a kód. Plusz javasolt lenne szétszedni a megjelenítést a logikától, ez így átláthatatlan, csak magadat szívatod. Plusz nemetm javaslata a felhasználóhoz tartozó hozzászólás indikálására sem utolsó. Illetve van a formokra serialize() illetve validáció jQuery-vel ha ragaszkodsz hozzá, illetve PHP5.3+-tól filter_var a bejövő adatok ellenőrzésére is is... Érdemes lenne használni. A JS rtésze is gány, de az ilyenek még rosszabbak: 40+px... Szóval gondold át a teljes újraírást mielőtt sértegetsz.
    Mutasd a teljes hozzászólást!
abcd