2012-11-30 22 views
7

गुगलिंग और खोज के एक सप्ताह के बाद। मुझे data.text नामक एक फ्लैट टेक्स्ट फ़ाइल की बजाय डेटाबेस तालिका से लंबे मतदान के बारे में एक भी ट्यूटोरियल ढूंढना मुश्किल है। वर्तमान में, मैं data.text में मैन्युअल रूप से कुछ भी लिखता हूं और यह तुरंत ब्राउज़र में दिखाई देता है।डेटाबेस डेटा के साथ लंबे मतदान?

यह सवाल है: डेटाबेस का उपयोग करके लंबे मतदान? StackOverflow में भी ठीक से जवाब नहीं दिया गया है। (मैं यहाँ लेकिन व्यर्थ में एक बहुत मिल गया।)। इस का उदाहरण भी यहाँ है filemtime alternative for MySQL

मैं इसे कैसे डेटाबेस से डेटा प्राप्त करने में सक्षम के लिए बनाने के लिए getdata.php संशोधित कर सकते हैं?

$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; 
    } 

संदेश तालिका

id  fro to mesg  time status last_modified 

मैं यहाँ एक उदाहरण लिस्टिंग हूँ इस प्रकार है। इस उदाहरण में, तीन फाइलों का उपयोग किया जा रहा है।

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

वहाँ डेटाबेस से डेटा प्राप्त करने के लिए (mysql) चौथी फ़ाइल बनाने के लिए किसी भी आवश्यकता है? यदि नहीं, तो डेटाबेस से गतिशील डेटा का उपयोग करने के लिए getdata.php या data.text में किस प्रकार के परिवर्तन आवश्यक हैं?

यहाँ मेरी जावास्क्रिप्ट

<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> 

यहाँ 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

स्टैक ओवरफ़्लो में आपका स्वागत है। यदि आप अपने प्रश्न को स्पष्ट करते हैं तो यह आपको उत्तर पाने में मदद करेगा। ऐसा लगता है कि आप एक वेब पेज (जावास्क्रिप्ट में क्लाइंट एप्लिकेशन के रूप में भी जाना जाता है) बना रहे हैं जो आपके सर्वर को मतदान करने के लिए AJAX का उपयोग करना है। ऐसा लगता है कि आप पहले AJAX अनुरोध को अपने तालिका में पहले से संग्रहीत सभी संदेशों को पुनर्प्राप्त करने के लिए getdata.php से अनुरोध करना चाहते हैं, और बाद के अनुरोधों के लिए हालिया अनुरोधों के बाद से आने वाले किसी भी नए संदेश को पुनर्प्राप्त करने के लिए अनुरोध करें। क्या वो सही है? साथ ही, कृपया अपनी 'संदेशों' तालिका की परिभाषा दिखाएं। –

+0

@OllieJones आपकी प्रतिक्रिया के लिए धन्यवाद। आप मुझे इस प्रश्न को हल करने के लिए आखिरी उम्मीद महसूस करते हैं। वास्तव में। मैं लंबी मतदान तकनीक का उपयोग कर चैट एप्लिकेशन को बढ़ा रहा हूं। मैसेज टेबल सिर्फ एक स्टैंडर्ड चैट टेबल है जिसमें आईडी, से, संदेश, समय कॉलम –

उत्तर

1

मैं हाल ही में बहुत कुछ इसी तरह किया है है। मैं सामान्य XMLHttpRequest के बजाय का उपयोग किया था jQuery .ajax कॉल लेकिन यह विचार एक ही है: getData.php फ़ाइल में

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); 
     } 
    }); 
} 

मैं एक जहां खंड है कि डाटाबेस से किसी भी आइटम है कि और अधिक कर रहे हैं हो जाता है के साथ प्रश्न हैं अंतिम तत्व से हाल ही में। $ LastDate के लिए डिफ़ॉल्ट मान 0 पर सेट किया गया है, इसलिए यदि कोई तिथि सबमिट नहीं की जाती है तो यह सभी आइटम लौटाती है।

<?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

धन्यवाद। लेकिन समस्या यह है कि getdada.php में एसक्यूएल स्टेटमेंट कहां और कैसे खोलें? –

+0

यह वास्तव में कोई फर्क नहीं पड़ता कि आप इसे कहां रखते हैं। बस सामान्य रूप से SQL क्वेरी निष्पादित करें, डेटा से संभवतः एक सरणी बनाएं (संभवतः एकाधिक प्रश्नों से) और परिणामी सरणी को आउटपुट करें।अंतिम पंक्ति सिर्फ "echo json_encode ($ आउटपुट) होगी;" मुझे लगता है कि अगर आप चाहें तो एक्सएमएल या सिर्फ टेक्स्ट आउटपुट भी कर सकते हैं। – DominicM

+0

पूर्ण उदाहरण के लिए भी संपादन देखें। – DominicM