Witam,
Od pewnego czasu wolne chwile poświęcam na nauke php + mysql. Kilka dni temu wymyśliłem sobie zadanie, które chyba przekracza poziom mojej wiedzy, a jak to czasem bywa - cieżko odpuścić dobry pomysł, mimo braku umiejętności. Pomyślałem, że może tutaj dostanę jakieś wskazówki które pomogą mi zrealizować mój projekt. Postaram się wyjaśnić cały zamysł od początku do końca.
Otrzymuje z jednego z serwisów internetowych plik (api) w formacie json, który zawiera potrzebne mi informacje o użytkownikach. Plik ten aktualizuje się co kilka minut, a zadaniem naszego "programu" jest weryfikowanie czy informacje które tam się znajdują pokrywają się z bazą danych którą stworzyłem na podstawie tego pliku.
Plik json ma taki format:
{
request: {klucz: "wartość"
},
dane: [
{
SERWIS_ID: "wartość",
SERWIS_NAME: "wartość",
LOGO: "wartość",
LOGO_SMALL: "wartość",
DATA: "wartość",
NOTIF: "wartość",
},
{
SERWIS_ID: "wartość",
SERWIS_NAME: "wartość",
LOGO: "wartość",
LOGO_SMALL: "wartość",
DATA: "wartość",
NOTIF: "wartość",
},
],
max_results: "wartość"
}
Wszystkie pozycje w tablicy "dane" posiadają zawsze te same klucze, różnią się tylko wartości. Tylko te dane biorę pod uwagę (max_results oraz request nie są mi na tą chwilę potrzebne). Zadaniem naszego pliku php jest monitorowanie czy nastąpiły zmiany w pliku json oraz korygowanie danych w bazie danych.
Mam bazę danych która zawiera tablę zawierającą wszystkie klucze z tablicy dane. Wygląda w taki sposób:
1 ID int(11) AUTO_INCREMENT
2 SERWIS_ID int(11)
3 SERWIS_NAME text utf8_polish_ci
4 LOGO text utf8_polish_ci
5 LOGO_SMALL text utf8_polish_ci
6 DATA datetime
7 NOTIF int(11)
8 ACTIVE int(11)
Jak widać ID zapisuje się samo, kolejne kolumny pokrywają się z kluczami pliku JSON w tablicy dane, a na samym końcu jest kolumna ACTIVE, która ma odpowiadać za "oflagowanie" czy dany użytkownik ciągle znajduję się w pliku JSON.
Plik php który do tej pory udało mi się stworzyć wygląda następująco:
<?php
require_once "connect.php";
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Tworzenie połączenia
$conn = new mysqli($host, $db_user, $db_password, $db_name);
// Sprawdzenie połączenia
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$url = "https://adres pliku json";
$json = json_decode(file_get_contents($url), true);
for($i=0; $i<count($json['dane']); $i++)
{
$sql = array();
foreach($json['dane'][$i] as $key => $value){
if ($key == 'SERWIS_ID')
{
Tutaj brak kodu
}
}
}
?>
Chciałbym sprawdzić czy każdy użytkownik w pliku znajduje się się w bazie danych. Jeśli nie to chciałbym dodać go do bazy ze wszystkimi wartościami, a jeśli tak to sprawdzić czy pozostałe wartości pokrywają się z bazą danych (jeśli nie to zauktualizować). Dodatkowo chciałbym sprawdzić czy znajdują się w bazie danych tacy użytkownicy których nie ma już w pliku json i zmienić wartość kolumny ACTIVE z 1 na 0 (domyślnie zapisuje się jako 1).
Pomożecie?
Pozdrawiam,
Mateusz