2012-11-30 49 views
7

Sau một tuần googling và tìm kiếm.Tôi khó tìm thấy ngay cả một hướng dẫn duy nhất về bỏ phiếu dài từ một bảng cơ sở dữ liệu thay vì từ một tập tin văn bản phẳng có tên data.text. Hiện tại, tôi viết bằng tay bất cứ điều gì trong data.text và nó ngay lập tức xuất hiện trong trình duyệt.Bỏ phiếu dài với dữ liệu cơ sở dữ liệu?

Đây là câu hỏi: Việc bỏ phiếu dài sử dụng cơ sở dữ liệu? không được trả lời đúng ngay cả trong StackOverflow. (Tôi tìm thấy rất nhiều ở đây nhưng vô ích.) Ví dụ về điều này cũng ở đây filemtime alternative for MySQL

Làm cách nào để sửa đổi getdata.php để cho phép tìm nạp dữ liệu từ cơ sở dữ liệu?

$sql=mysqli_query($database,"SELECT * FROM messages where time>=$curr_date ORDER by  time DESC"); 
    while($row=mysqli_fetch_array($sql)){ 
    $messages=$row['messages']; 
    $id=$row['id']; 
    echo $messages; 
    } 

Tin nhắn của bảng như sau

id  fro to mesg  time status last_modified 

Tôi đang ở đây liệt kê một ví dụ. Trong ví dụ này, ba tệp đang được sử dụng.

  1. index.html
  2. getdat.php
  3. data.text

Có bất kỳ cần phải tạo một tập tin thứ tư để lấy dữ liệu từ cơ sở dữ liệu (mysql)? nếu không, thì loại thay đổi nào là cần thiết trong getdata.php hoặc data.text để sử dụng dữ liệu động từ cơ sở dữ liệu?

Đây là Javascript tôi

<script type="text/javascript" charset="utf-8"> 

     var timestamp = null; 

     function waitformsg() { 
      $.ajax({ 
       type:"Post", 
       url:"getdata.php?timestamp="+timestamp, 
       async:true, 
       cache:false, 
       success:function(data) { 
        var json = eval('(' + data + ')'); 
        if(json['msg'] != "") { 
         $("#messages").append(json['msg']); 

        } 
        timestamp = json["timestamp"]; 

        setTimeout("waitformsg()", 1000); 
       }, 
       error:function(XMLhttprequest, textstatus, errorthrown) { 
        alert("error:" + textstatus + "(" + errorthrown + ")"); 
        setTimeout("waitformsg()", 15000); 
       } 




       }); 

     } 
     $(document).ready(function() { 

      waitformsg(); 
     }); 
    </script> 

Dưới đây là file getdata.php

<?php 
include("../model/includes/classes.php"); 

$filename='data.php'; 

$lastmodif=isset($_GET['timestamp'])?$_GET['timestamp']:0; 
$currentmodif=filemtime($filename); 

while($currentmodif<=$lastmodif){ 
    usleep(10000); 
    clearstatcache(); 
    $currentmodif=filemtime($filename); 
} 

$response=array(); 
$response['msg']=file_get_contents($filename); 
$response['timestamp']=$currentmodif; 
echo json_encode($response); 
?> 
+0

Chào mừng bạn đến với Stack Overflow. Nó sẽ giúp bạn nhận được câu trả lời nếu bạn làm rõ câu hỏi của mình. Có vẻ như bạn đang tạo một trang web (còn được gọi là một ứng dụng khách trong Javascript) được cho là sử dụng ajax để thăm dò ý kiến ​​máy chủ của bạn. Có vẻ như bạn muốn yêu cầu ajax đầu tiên để getdata.php truy xuất tất cả các thư đã được lưu trữ trong bảng của bạn và cho các yêu cầu tiếp theo để truy xuất bất kỳ thư mới nào đã xuất hiện kể từ lần yêu cầu gần đây nhất. Đúng không? Ngoài ra, vui lòng hiển thị định nghĩa bảng 'tin nhắn' của bạn. –

+0

@OllieJones Cảm ơn bạn đã trả lời. Có vẻ như tôi là một hy vọng cuối cùng để giải quyết câu truy vấn này.Chỉ cần. Tôi đang sử dụng ứng dụng trò chuyện tán gẫu sử dụng bảng technical.Messaes bỏ phiếu dài chỉ là một bảng trò chuyện nổi bật bao gồm id, đến, từ, tin nhắn, cột thời gian. –

Trả lời

1

Tôi đã làm một cái gì đó rất giống nhau thời gian gần đây. Tôi đã sử dụng jQuery ajax gọi thay vì XMLHttpRequest generic nhưng ý tưởng là như nhau:

recentFunction(container, lastDate){ 
    var lastDate = ""; 

    return $.ajax({ 
     type: "POST", 
     url: "getData.php", 
     cache: false, 
     data: { 'request': 'recent', 
      'param': lastDate }, 
     dataType: "json", 
     success: function(data){ 
      if(data != null){ 
       $.each(data, function(key, value){ 
        if(key == 0){ 
         lastDate = value['date_added']; 
        } 
        var html = "some html here"; 
        // append html to dom element here 
           // and delete any old items here if needed 
       }); 
      } 
     }, 
     complete: function(){ 
      setTimeout(function(){recentFunction(container, lastDate)}, 7000); 
     } 
    }); 
} 

trong getData.php tập Tôi có truy vấn với một mệnh đề where mà được bất kỳ mục từ db rằng có nhiều gần đây hơn phần tử cuối cùng. Giá trị mặc định cho $ lastDate được đặt thành 0, vì vậy nó trả về tất cả các mục nếu không có ngày nào được gửi.

<?php 

$lastDate = 0; 
$recent = array(); 
$recentQuery = "SELECT id, date FROM someTable WHERE date > '" . $lastDate . "'"; 
$recentResults = $db->query($recentQuery); 

while($r = $recentResults->fetch_array(MYSQLI_ASSOC)){ 
     $recentMovies[] = $r; 
} 

echo json_encode($recentMovies); 

?> 
+0

cảm ơn bạn.Nhưng vấn đề là ở đâu và làm thế nào vỏ tôi đặt báo cáo sql trong getdada.php? –

+0

Nó thực sự không quan trọng nơi bạn đặt nó. Chỉ cần thực hiện truy vấn SQL như bình thường, xây dựng một mảng từ dữ liệu (có thể từ nhiều truy vấn) và chỉ xuất kết quả mảng.Dòng cuối cùng sẽ là "echo json_encode ($ output);" Tôi đoán bạn cũng có thể xuất XML hoặc chỉ văn bản nếu bạn muốn. – DominicM

+0

Đồng thời xem chỉnh sửa để có ví dụ đầy đủ. – DominicM

Các vấn đề liên quan