In this tutorial, I'll walk you through the process of creating a calorie and nutrient counter using the FoodData Central API. This guide will help you build a web application that allows users to enter a food item and receive detailed nutritional information.
#programming #software #coding
Video Here
Prerequisites
Before we start, ensure you have the following: - Basic knowledge of PHP and HTML. - An API key from FoodData Central. - A local server environment (e.g., XAMPP, WAMP).Step 1: Setting Up Your Project
Create a new PHP project and set up the following files: - `index.php` - `header.php` - `footer.php` - `error.php`Step 2: Designing the HTML Form
In `index.php`, add the HTML form for users to enter food details:<?php require_once('header.php'); ?>
<?php include_once('error.php');?>
<h1>Enter food to calculate nutrition</h1>
<form action="" method="post">
<div class="form-group form-group-lg">
<label for="food">Enter food item be descriptive:</label>
<input type="text" id="food" name="food" class="form-control" placeholder="red delicious apples / hard boiled eggs" required>
</div>
<div class="form-group form-group-lg">
<label for="amount">Enter how many:</label>
<input type="number" id="amount" name="amount" class="form-control" required>
</div>
<div class="form-group form-group-lg">
<label for="measure">Choose Measurement Scale:</label>
<select id="measure" name="measure" class="form-control" required>
<option value="">Choose</option>
<option value="240">Cup(s) 240 G</option>
<option value="120">1/2 Cup(s) 120 G</option>
<!-- Add more measurement options here -->
</select>
</div>
<button type="submit" name="submit" class="btn btn-success">Add Food</button>
</form>
<?php require_once('footer.php'); ?>
Step 3: Handling Form Submission
In the same `index.php` file, add PHP code to handle form submission, make the API request, and process the response:<?php
if(isset($_POST['submit'])){
$food = htmlspecialchars($_POST['food']);
$amount = htmlspecialchars($_POST['amount']);
$measure = htmlspecialchars($_POST['measure']);
$total = $measure * $amount;
$api_url = 'https://api.nal.usda.gov/fdc/v1/foods/search';
$api_key = 'your_api_key_here';
$data = [
'query' => $food,
'pageSize' => 1,
'api_key' => $api_key
];
$ch = curl_init($api_url . '?' . http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if (isset($result['foods'][0]['foodNutrients'])) {
$nutrients = [
'Potassium, K' => 'MG',
'Magnesium' => 'MG',
'Water' => 'G',
'Energy' => 'KCAL',
'Protein' => 'G',
'Total lipid (fat)' => 'G',
'Carbohydrate, by difference' => 'G',
'Fiber, total dietary' => 'G',
'Sugars, total including NLEA' => 'G',
'Cholesterol' => 'MG',
'Sodium, Na' => 'MG',
'Vitamin C, total ascorbic acid' => 'MG',
'Calcium, Ca' => 'MG',
'Iron, Fe' => 'MG'
];
foreach ($result['foods'][0]['foodNutrients'] as $nutrient) {
$name = $nutrient['nutrientName'];
$value = $nutrient['value'];
$unit = $nutrient['unitName'];
if (isset($nutrients[$name]) && $unit === $nutrients[$name]) {
echo "The $name content for $food is $value $unit.<br>";
}
}
// Database insertion logic here
} else {
echo "<div class='alert alert-danger'>No information found for {$food}. Try again!</div>";
}
}
?>
Step 4: Displaying Nutritional Information
The PHP script processes the response from the FoodData Central API and displays the relevant nutritional information. You can customize the output format as needed.Step 5: Saving Nutritional Information to a Database
To save the nutritional information to a database, use the following code:// Database connection
$con = new mysqli('host', 'username', 'password', 'database');
// Check connection
if ($con->connect_error) {
die("Connection failed: " . $con->connect_error);
}
// Prepare and bind
$stmt = $con->prepare("INSERT INTO food_plan (name, amount, measurement, total, calories, protein, fat, carbohydrates, fiber, sugars, cholesterol, sodium, vitamin_c, calcium, iron, potassium, magnesium) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssidddddddddddddd", $food, $amount, $measure, $total, $calories, $protein, $fat, $carbohydrates, $fiber, $sugars, $cholesterol, $sodium, $vitamin_c, $calcium, $iron, $potassium, $magnesium);
// Execute the statement
if ($stmt->execute()) {
echo "<div class='alert alert-success'>Record inserted successfully</div>";
} else {
echo "<div class='alert alert-danger'>Error: " . $stmt->error . "</div>";
}
// Close connection
$stmt->close();
$con->close();
