2012-06-27 4 views
0

J'ai un script PHP pour sélectionner les enregistrements pour les commentaires d'une base de données, puis les imprimer sur la page. Ce que j'aimerais faire, c'est que si un utilisateur est sur une page et qu'un autre utilisateur commente un élément sur cette page, il ajoute automatiquement le nouveau commentaire au bas de la page. Le problème que j'ai est que je ne sais pas comment différencier tous les statuts.Récupérer de nouvelles entrées MySQL et les ajouter dynamiquement aux div existants

Mon code pour générer des commentaires sur un statut est:

<?php 

$rt = ("SELECT * FROM (SELECT comment as comment, byuid as byuid, comuid as comuid, likes as likes, dislikes as dislikes, UNIX_TIMESTAMP(timestamp) as timestamp FROM mingle_comments WHERE onuid = '$sid' AND type = 'status' ORDER BY timestamp DESC LIMIT 2) mingle_comments ORDER BY timestamp ASC"); //query 
$result = mysql_query($rt) or die (mysql_error()); 
if(mysql_num_rows($result) >= 2) { 
    ?> 
    <div id="sa" style="background:#E0E0E0; padding:5px 5px 5px 5px;"> 
     <a href="#" style="font-family:Arial; font-size:12px; color:#3a3a3a; text-decoration:none;">View all comments...</a> 
    </div> 
    <?php 
} 

while($st = mysql_fetch_assoc($result)) { 
$comment = nl2br($st['comment']); 
$by = $st['byuid']; 
$comuid = $st['comuid']; 
$time = $st['timestamp']; 
$l = $st['likes']; 
$d = $st['dislikes']; 

$bq = "SELECT * FROM users WHERE uid = '$by' LIMIT 1"; 
$bqq = mysql_query($bq) or die (mysql_error()); 

while($bqr = mysql_fetch_assoc($bqq)) { 
    $dp = $bqr['dp']; 
    $fbq = $bqr['fname']; 
    $sbq = $bqr['sname']; 
} 
?> 

<div id="commentbox" class="<?php echo $comuid; ?>" style="padding:5px 5px 5px 5px;"> 
    <div id="cbi" style=" display:inline; position:relative; "> 
     <img src="<?php if ($dp == null) { echo 'img/unknown_user.jpg'; } else { echo "pf/" . $by . "/" . $dp; } ?>" width="36px" style=" display:inline; position:relative;"/> 
    </div> 
    <div id="cbt" style="position:relative; margin-left:32px; margin-top:-35px;"> 
     <a href="profile.php?uid=<?php echo $uid; ?>" style="position:relative; font-size:13px; margin-left:10px; font-family:Arial; color:#3a3a3a; text-decoration:none;"><?php echo $fbq . " " . $sbq; ?></a> 
     <p class="<?php echo $comuid; ?>" style="position:relative; margin-left:5px;"><?php echo $comment; ?></p> 
    </div> 
    <div id="clb" style="background:#E0E0E0; padding-left:5px;"> 
     <a href="#">Like</a><a href="#" id="time"><?php echo time_since($time); ?></a> 
    </div> 
</div> 
<?php 
} 
?> 

TL: DR; Comment puis-je récupérer automatiquement les nouveaux commentaires et les ajouter aux commentaires générés dans le script ci-dessus sans actualisation de la page.

+0

Vous devez utiliser l'appel $ .ajax de jquery pour obtenir les nouveaux résultats. C'est vraiment simple, Si vous voulez, je peux vous fournir un code –

+0

Ce serait génial – AviateX14

+0

@ AviateX14 Ce que vous voulez est une technique communément appelée «longue interrogation» – Ohgodwhy

Répondre

0

JQUERY

$(document).ready(function(){ 
    var lastcheck=''; 
    setInterval(function() { 


     $.ajax({ 
      url: 'URL_TO_PHP_SCRIPT', 
      type: 'POST', 
      data: {'lastcheck':lastcheck}, 
      success: function(result){ 
       if (result!='nothing_new'){ 
        lastcheck=result.lastcheck /*Update lastcheck*/ 
        var data=result.data; 

        $.each(data, function(i,val){ 
         //Foreach comment you do what you need, like append, prepend, etc. data[i]."key" to get the value. 
        }); 

       } 
      } 
     }); 

    }, 15000 /* This will check each 15 seconds, you can change it */); 

}); 

PHP SIDE

 $lastcheck=$_POST['lastcheck']; 
     /* 

     You should add a date field to each new created comment,then filter by "orderby date > $lastcheck" so you get comments since your last check 
     You get the new comments here 
     ... 
     ... 
     .. 
     */ 

     if (!empty($arrayofnewcomments)){ 
      /*The output*/ 
      echo json_encode(array('lastcheck'=>date('Y-m-d H:i:s'),'data'=>$arrayofnewcomments)); 
     }else{/*No new comments*/ 
      echo 'nothing_new'; 
     } 

C'est un code que je suis venu avec, il est une idée générale, mais cela fonctionne. Il vérifiera toutes les 15 secondes pour de nouveaux commentaires.

Questions connexes