1

I'm pulling deals from Groupon's api, and I have no clue how to take the data and put it into a database with php, i know how to show it on in html, but not in the database, I need to pull it into the database so I have more control over the info, if anybody knows how to do this or knows a better way, i'm all eye's, lol, thanks

<script type='text/javascript'>

$(function () {
$.getJSON("https://api.groupon.com/v2/deals.json?callback=?", 
{
    client_id: "b252ad3634a4ab2985b79d230ccc4e49a3ea9d19",
    show: "all",
    division_id: "los-angeles"
})
.done(function (data) {
    console.log(data);
    // do whatever processing you need to do to the data
    // right here, then drop it in the div
    $.each(data.deals, function (i, v) {
        $title = $("<h2/>", {
            html: v.title,
            class: "heading"
        });
        $img = $("<img/>", {
            src: v.mediumImageUrl
        });
        $deal = $("<div/>", {
            html: v.highlightsHtml + v.pitchHtml
        });
        $("#main").append($deal);
        $deal.prepend($title, $img);
    });
});
});
</script>
2

1 Answer 1

2

Theory

Well I'm just gonna start running through the process...

First, know which driver you are dealing with and research how PHP interacts with them. Look at this list and start reading... http://www.php.net/manual/en/refs.database.php

Sending the data to a PHP script to handle the rest, depends on how you got the data. Here are some basic flows...

  • Pull it using jQuery, and use AJAX to send it as soon as you get it to the php script to save it. (Requires an additional HTTP request)
  • Pull it using PHP, save it to the DB, then format and output it on the same page. (Slows down initial page load time)
  • Pull it with jQuery, format it, and allow the user to press a button that will then ajax that entry to the PHP save script (More flexible, but greatly increases requests)

After you can get a connection to your database you just need to save it to a table using a SQL query (most likely using INSERT or UPDATE). With JSON data, I prefer to save it to a column that has the data type of TEXT. The only real risk here is that you have to be sure that you can validate the data. ESPECIALLY IF THE DATA IS BEING GIVEN TO PHP FROM A JAVASCRIPT /AJAX SOURCE!

Pulling the data from that point is just using a "SELECT" sql statement. PHP's database modules will pull this data and put it into a lovely array for you, making manipulation easy.

Examples

Now thats the theory, heres some actions. I'm going to be choosing the 1st flow idea. Now this one will just save it to the database. I'm not doing any fancy checking or really pulling. But this will show you the idea of how ajaxing and saving to php would work.

view-deals.html

<script type='text/javascript'>

$(function () {
$.getJSON("https://api.groupon.com/v2/deals.json?callback=?", 
{
    client_id: "b252ad3634a4ab2985b79d230ccc4e49a3ea9d19",
    show: "all",
    division_id: "los-angeles"
}).done(function (data) {
    console.log(data);
    // do whatever processing you need to do to the data

    $.post('save-deals.php',{dealData: data}, function(finishData) {
         //This is an optional function for when it has finished saving
    });

    // Your formatting comes next
    ....
});
</script>

Now that will send all the data that you got (intact) from groupon to a seperate php script using an AJAX Post call. I use post, well, because that's what it's for.

save-deals.php

ob_start(); //I like output-buffering because if we need to change headers mid script nothing dies

$DealData = isset( $_POST['dealData'] )?$_POST['dealData']:die("Malformed form data!");

if($DealData!='') {
   $DB = new mysqli("example.com", "user", "password", "database");
   if ($DB->connect_errno) {
      echo "Failed to connect to MySQL: " . $DB->connect_error;
   }

   $DealData = $DB->real_escape_string($DealData); //Sanitize it for MySQL

   if (!$DB->query("INSERT INTO deals(data) VALUES ($DealData)") {
      echo "Insert failed: (" . $DB->errno . ") " . $DB->error;
   } else {
      //AT THIS POINT IT SHOULD HAVE BEEN INSERTED!
      //You could return a success string, or whatever you want now.
   }
} else {
   http_response_code("400");
   die("Bad Request, please check your entry and try again");
}
ob_end_flush(); //Close up the output-buffer

Some important things to note about that script is that the ob_* functions are completely optional. The way DealData is set is a VERY shorthand way of checking that the post data contains that value, and setting it properly; if not, then to give an error.

This next script is to show you how to pull the data from the database now, and manipulate it if you want. It will also return the data as JSON information so it can be used with a javascript $.getJSON() call. This is mostly a snippet for reference

manipulate-deals.php

//First connect to the database!
$DB = new mysqli("example.com", "user", "password", "database");
if ($DB->connect_errno) die("Failed to connect to MySQL: " . $DB->connect_error);

//Get ALL the entries!
if(!$results = $DB->query("SELECT * FROM data")) die("Failed to retrieve data! ".$DB->error);

//Decode the datas!
$returnResults = [];
while($entry = $results->fetch_assoc()) {
   $JSON = json_decode($entry['data']);

   //Manipulate however you wish!
   $JSON->whatever->tags[1]->you->want = "whatever value";

   //Add it to the results!
   $returnResults[] = $JSON;
}
echo json_encode($returnResults);

That very last section is just for fun. It would export a json string containing an array of results. And each of that array's entries would be a valid object just as groupon had given you. Hope that helps!

Sign up to request clarification or add additional context in comments.

5 Comments

i only know how to pull it, php is very new to me, can php read a json string data ? i'm more of a frontend guy, but thanks for you help
JSON is really just text strings. PHP can decode it into a array/object variable using json_decode(...). As well as re-encode it using json_encode(...)
so whould i use the json_decode in my success statement or my done function ? thanks
Well php gets executed first, before a page is even shown. So putting PHP in the javascript function will do nothing. If you refer to my "flows" talk in my answer, you would use this php code where the actual json data is being sent to. Either a "save-entry.php" type file, or a "get-results.php" type file.
could you please provide some sample code ? it will help me to better understand what your teaching me, thanks

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.