-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsave_forecast.php
More file actions
104 lines (90 loc) · 4.39 KB
/
save_forecast.php
File metadata and controls
104 lines (90 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
// Include il file per il controllo della sessione
include 'utils/check_session.php';
// Messaggio di conferma o errore
$message = $_GET['message'] ?? null;
$valid_weather_desc = ["Soleggiato", "Parzialmente Nuvoloso", "Nuvoloso", "Pioggia", "Neve", "Grandine", "Temporale"];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$date = $_POST['date'];
$temp_min = $_POST["temp_min"];
$temp_max = $_POST["temp_max"];
$morning_desc = $_POST['morning_desc'];
$afternoon_desc = $_POST['afternoon_desc'];
$note = trim($_POST['note']);
$type = "error";
// Controllo descrizione meteo valida
if (!in_array($morning_desc, $valid_weather_desc) || !in_array($afternoon_desc, $valid_weather_desc)) {
$message = "Descrizione meteo non valida.";
$type = "error"; // Tipo di messaggio: errore
header("Location: insert_forecast.php?message=" . urlencode($message) . "&type=" . urlencode($type));
exit;
}
function isForecastSuspicious($conn, $forecast) {
$sql = "SELECT * FROM weather_sources_forecasts WHERE date = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $forecast['date']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$similar = 0;
if (abs($row['temp_max'] - $forecast['temp_max']) <= 1) $similar++;
if (abs($row['temp_min'] - $forecast['temp_min']) <= 1) $similar++;
if (strcasecmp($row['morning_desc'], $forecast['morning_desc']) == 0) $similar++;
if (strcasecmp($row['afternoon_desc'], $forecast['afternoon_desc']) == 0) $similar++;
if ($similar >= 3) {
return true; // considerata sospetta
}
}
return false;
}
// Controllo della data
$current_date = new DateTime(); // Data attuale
$forecast_date = new DateTime($date); // Data inserita dall'utente
if ($forecast_date <= $current_date) {
$message = "Non è possibile caricare previsioni per oggi o per giorni passati.";
} else {
// Verifica se esiste già una previsione per questa data
$query = "SELECT COUNT(*) AS count FROM forecasts WHERE user_id = ? AND date = ?";
$stmt = $__con->prepare($query);
$stmt->bind_param("is", $user_id, $date);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($row['count'] > 0) {
$message = "Hai già caricato una previsione per questa data.";
} else {
// Verifica se la previsione è sospetta
$forecast = [
'date' => $date,
'temp_max' => $temp_max,
'temp_min' => $temp_min,
'morning_desc' => $morning_desc,
'afternoon_desc' => $afternoon_desc
];
if (isForecastSuspicious($__con, $forecast)) {
$suspiciousFlag = 1;
} else {
$suspiciousFlag = 0;
}
// Inserisci una nuova previsione
$query = "INSERT INTO forecasts (user_id, date, temp_max, temp_min, morning_desc, afternoon_desc, note, is_sosp) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $__con->prepare($query);
$stmt->bind_param("issssssi", $user_id, $date, $temp_max, $temp_min, $morning_desc, $afternoon_desc, $note, $suspiciousFlag);
if ($stmt->execute()) {
$message = "Previsione caricata con successo!";
$type = "success";
// Aggiungi un giorno alla data della previsione così da riempire in automatico il campo data nel form
$forecast_date->modify('+1 day');
} else {
$message = "Errore durante il caricamento della previsione: " . $stmt->error;
}
}
}
header("Location: insert_forecast.php?message=" . urlencode($message) . "&type=" . urlencode($type) . "&date=" . $forecast_date->format('Y-m-d'));
exit;
}
else{
header("Location: insert_forecast.php");
exit;
}
?>