Skip to content

69. Kalkulator transportowy

This content is not available in your language yet.

Kalkulator transportowy

Aplikacja PHP obliczająca koszty wysyłki paczki na podstawie wagi (kg), odległości (km) i wybranego kuriera. Stałe stawki kurierów w tablicy PHP, historia obliczeń w JSON.

  • Modelowania taryf cenowych jako tablicy konfiguracyjnej
  • Obliczania ceny na podstawie przedziałów wagowych
  • Porównywania ofert wielu dostawców
  • Walidacji liczb zmiennoprzecinkowych i całkowitych

Kalkulatory wysyłki są w każdym sklepie internetowym. Integracja z API kurierów (InPost, DPD, DHL) to codzienność dla PHP developera e-commerce.

  1. Formularz: waga (kg), odległość (km), wymiary paczki
  2. Obliczenie kosztów dla 3 kurierów z różnymi stawkami
  3. Wyróżnienie najtańszej opcji
  4. Historia obliczeń zapisana do JSON
  5. Przelicznik: paczka z wagą objętościową
{
"couriers": {
"InPost": {"base": 8.99, "per_kg": 1.50, "max_weight": 30},
"DPD": {"base": 12.50, "per_kg": 2.00, "max_weight": 31.5},
"DHL": {"base": 15.00, "per_kg": 1.80, "max_weight": 70}
},
"history": [
{
"id": 1,
"weight": 5.5,
"distance": 250,
"cheapest": "InPost",
"price": 17.24,
"created_at": "2026-02-10"
}
]
}
  • Formularz: waga i kurier
  • Obliczenie ceny dla wybranego kuriera
  • Walidacja: waga > 0, kurier z listy
  • Wyświetlenie ceny
Ocena: 3.0
<?php
$couriers = [
'InPost' => ['base' => 8.99, 'per_kg' => 1.50, 'max_weight' => 30],
'DPD' => ['base' => 12.50, 'per_kg' => 2.00, 'max_weight' => 31.5],
'DHL' => ['base' => 15.00, 'per_kg' => 1.80, 'max_weight' => 70],
];
function calculateShipping(float $weight, array $couriers): array {
$results = [];
foreach ($couriers as $name => $rates) {
if ($weight > $rates['max_weight']) {
$results[$name] = ['price' => null, 'error' => 'Zbyt ciężka paczka'];
continue;
}
$price = round($rates['base'] + $weight * $rates['per_kg'], 2);
$results[$name] = ['price' => $price, 'error' => null];
}
return $results;
}
// Walidacja wagi
$weight = filter_var($_POST['weight'] ?? '', FILTER_VALIDATE_FLOAT, [
'options' => ['min_range' => 0.1, 'max_range' => 70]
]);
if ($weight === false) {
$errors[] = "Waga musi być liczbą w zakresie 0.1–70 kg";
}
// Waga objętościowa
function volumetricWeight(float $l, float $w, float $h): float {
return round(($l * $w * $h) / 5000, 2); // standardowy przelicznik
}

Kalkulator jak w sklepie!

Zacznij od obliczania ceny dla jednego kuriera. Potem rozszerz na wszystkich i dodaj wyróżnienie najtańszego.