connecting php long-polling to the database
| From: | hadi | Date: | Wed, 04 Feb 2015 19:47:39 +0000 |
| Subject: | connecting php long-polling to the database | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-324380@lists.php.net to get a copy of this message | ||
i have script,php-long-polling, im unable to connected to my database. can
someone look to my script and let me know where im wrong. i wanted to
connect to my database and display database table in the html page.
index.html
<html>
<head>
<script type="text/javascript"
src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript" src="client.js"></script>
</head>
<body>
<h1>Response from server:</h1>
<div id="response"></div>
</body>
</html>
server.php
<?php
// set php runtime to unlimited
$servername = "localhost";
$username = "recorduser";
$password = "recorduser";
$database = "record";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * from username ORDER BY id DESC LIMIT 1";
$result1 = mysqli_query($conn, $sql);
set_time_limit(0);
// where does the data come from ? In real world this would be a SQL query
or something
$data_source_file = '$result1';
// main loop
while (true) {
// if ajax request has send a timestamp, then $last_ajax_call = timestamp,
else $last_ajax_call = null
$last_ajax_call = isset($_GET['timestamp']) ? (int)$_GET['timestamp'] :
null;
// PHP caches file data, like requesting the size of a file, by default.
clearstatcache() clears that cache
clearstatcache();
// get timestamp of when file has been changed the last time
$last_change_in_data_file = filemtime($data_source_file);
// if no timestamp delivered via ajax or data.txt has been changed SINCE
last ajax timestamp
if ($last_ajax_call == null || $last_change_in_data_file > $last_ajax_call)
{
// get content of data.txt
#$data = file_get_contents($data_source_file);
$data = while($row = mysqli_fetch_array($result1))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "</tr>";
}
// put data.txt's content and timestamp of last data.txt change into array
$result = array(
'data_from_file' => $data,
'timestamp' => $last_change_in_data_file
);
// encode to JSON, render the result (for AJAX)
$json = json_encode($result);
echo $json;
// leave this loop step
break;
} else {
// wait for 1 sec (not very sexy as this blocks the PHP/Apache process,
but that's how it goes)
sleep( 1 );
continue;
}
}
?>
client.js
/**
* AJAX long-polling
*
* 1. sends a request to the server (without a timestamp parameter)
* 2. waits for an answer from server.php (which can take forever)
* 3. if server.php responds (whenever), put data_from_file into #response
* 4. and call the function again
*
* @param timestamp
*/
function getContent(timestamp)
{
var queryString = {'timestamp' : timestamp};
$.ajax(
{
type: 'GET',
url: 'http://192.168.206.129/record/server.php',
data: queryString,
success: function(data){
// put result data into "obj"
var obj = jQuery.parseJSON(data);
// put the data_from_file into #response
$('#response').html(obj.data_from_file);
// call the function again, this time with the timestamp we just
got from server.php
getContent(obj.timestamp);
}
}
);
}
// initialize jQuery
$(function() {
getContent();
});