1,105,447 Community Members

Performing a Data Push Back from a Php server script

Member Avatar
skliz
Junior Poster in Training
80 posts since Dec 2008
Reputation Points: 0 [?]
Q&As Helped to Solve: 3 [?]
Skill Endorsements: 1 [?]
 
0
 

Hello everyone, I have developed an application. But I need a script to perform push back just like facebook does when updating users profile. Please how can I do this in php. Please I would like it with a simple demo code. Thanks alot.

Member Avatar
cereal
Posting Virtuoso
1,710 posts since Aug 2007
Reputation Points: 461 [?]
Q&As Helped to Solve: 345 [?]
Skill Endorsements: 44 [?]
 
0
 

What do you mean with "push back"?

Member Avatar
skliz
Junior Poster in Training
80 posts since Dec 2008
Reputation Points: 0 [?]
Q&As Helped to Solve: 3 [?]
Skill Endorsements: 1 [?]
 
0
 

You know when you are on facebook. if a user post an information on your wall. web page updates the information in real time. so this is what I mean. How did facebook achieve that. allowing a page to update and display content to viewers seemlessly without pooling from the server.

Member Avatar
cereal
Posting Virtuoso
1,710 posts since Aug 2007
Reputation Points: 461 [?]
Q&As Helped to Solve: 345 [?]
Skill Endorsements: 44 [?]
 
0
 

Ok, you need Ajax and a script to receive, save and return data from the form, FB uses also a cache to save data and return, here I create an example with JQuery framework, we are going to save it only to the database:

create table message_board(id int(9) not null auto_increment primary key, message varchar(255) not null, creation_date datetime not null) engine=myisam default charset=utf8;

The form page:

<?php

# ... connection string to database ...
$q = mysql_query('select * from message_board order by id desc');

?>
<!DOCTYPE html>
<html>
<head>
    <title>search</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){

        $('#myform').submit(function(e) {
            e.preventDefault();
            var mdata = $('#myform').serialize();
            console.log(mdata);

            // if searchString is not empty
            if($('#message').length > 0) {
                // ajax call
                $.ajax({
                    type: "POST",
                    url: "save.php",
                    data: $('#myform').serialize(),
                    timeout: 30000, // 30 seconds
                    cache: false,
                    beforeSend: function(html) { // this happens before actual call
                        $("#results").html(''); 
                   },
                    error: function(){
                        $("#result").hide().html('server not responding');
                    },
                    success: function(msg){ // this happens after we get results
                        $("#result").html(msg);
                    }
                });
            }

            else
            {
                return false;
            }
        }); 
    });  
    </script>
</head>
<body>

<form id="myform" method="post" action="save.php">
    <textarea class="text" name="message" id="message"></textarea>
    <input type="submit" name="submit" id="submit" value="submit" />
</form>

<!-- this is where Ajax will display the result -->
<div id="result"></div>

<!-- this is where old data will be displayed -->
<div id="messages">
    <?php

        if(mysql_num_rows($q) > 0)
        {
            while($r = mysql_fetch_assoc($q))
            {
                echo '<div class="block">
                    <p class="date">'.$r['creation_date'].'</p>
                    <p class="message">'.$r['message'].'</p>
                </div>';
            }
        }
    ?>

</div>
</body>
</html>

And this is the script which receives data from the form, i.e. save.php:

<?php

# ... connection string to database ...

$m = $_POST['message'];
$d = date('Y-m-d G:i:s');
$q = mysql_query("insert into message_board(message,creation_date) values('$m','$d')") or die(mysql_error());

echo '<div class="block">
<p class="date">'.$d.'</p>
<p class="message">'.$m.'</p>
</div>';
?>

Now, since this is an example if you double post without reloading the page #result will be overwritten, but by reloading the page you get also the previous message. If you want to create something like that consider using mysqli: http://php.net/manual/en/book.mysqli.php

note: you can also choose to get all data from Ajax by looping the script in save.php instead of returning the last update.

bye!

Member Avatar
diafol
Where are my eyes?
12,977 posts since Oct 2006
Reputation Points: 1,821 [?]
Q&As Helped to Solve: 1,848 [?]
Skill Endorsements: 92 [?]
Moderator
Featured
Sponsor
 
1
 

If you need 'push' tech, then ajax ('pull') is pretty poor, performance-wise, as you have to continuously poll the server. Comet (sometimes called 'long-polling') may be a better fit for you, but it may mean setting up a server. The latest, 'websockets' looks extremely promising if only that it worked across all browsers.

For Comet - see the AjaxPushEngine - http://www.ape-project.org/ajax-push.html

//EDIT

Here's an article on SO:
http://stackoverflow.com/questions/10782058/periodic-pull-comet-long-polling-websockets

may have links to implement websockets x-browser

//EDIT AGAIN

Comet doesn't play nicely with PHP.

Member Avatar
skliz
Junior Poster in Training
80 posts since Dec 2008
Reputation Points: 0 [?]
Q&As Helped to Solve: 3 [?]
Skill Endorsements: 1 [?]
 
0
 

yeah tanks. I have personally researched on it myself. currently on the project I have been using ajax pool. But I realized it is very poor. cause it hangs the server. I also tried to use ape-project but when I downloaded I noticed it is written in c and I could not find a tutorial. All the demo source code were difficult to understand with out a tutorial.
I would have used socket but the project is very large and I mite not be able to control sockets on every part since i am new to it.
and socket as limited surport on some browser.

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article