-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexport_database.php
More file actions
94 lines (79 loc) · 3.41 KB
/
export_database.php
File metadata and controls
94 lines (79 loc) · 3.41 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
<?php
session_start();
require_once 'config.php';
// Vérifier si l'utilisateur est connecté
if (!isset($_SESSION['user_id'])) {
header('Location: index.php?error=not_logged_in');
exit();
}
try {
$pdo = getConnection();
$user_id = $_SESSION['user_id'];
// Définir le nom du fichier d'export
$filename = 'export_composants_' . date('Y-m-d_H-i-s') . '.sql';
// Headers pour le téléchargement
header('Content-Type: application/sql');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Cache-Control: must-revalidate');
header('Pragma: public');
// Commencer l'export SQL
echo "-- Export de la base de données des composants\n";
echo "-- Généré le : " . date('Y-m-d H:i:s') . "\n";
echo "-- Utilisateur : " . (isset($_SESSION['user_email']) ? $_SESSION['user_email'] : 'Utilisateur ID: ' . $user_id) . "\n\n";
// Tables à exporter avec leurs données (seulement les données, pas la structure)
$tables = [
'categories' => 'Catégories',
'subcategories' => 'Sous-catégories',
'location' => 'Emplacements',
'suppliers' => 'Fournisseurs',
'packages' => 'Packages',
'data' => 'Composants'
];
foreach ($tables as $table => $description) {
echo "-- \n-- Export des données : $description ($table)\n-- \n\n";
// Vérifier si la table existe
try {
$check_stmt = $pdo->prepare("SELECT COUNT(*) FROM `$table` WHERE owner = ?");
$check_stmt->execute([$user_id]);
} catch (PDOException $e) {
echo "-- Erreur : Table $table non trouvée ou inaccessible\n\n";
continue;
}
// Récupérer les données de l'utilisateur
$stmt = $pdo->prepare("SELECT * FROM `$table` WHERE owner = ?");
$stmt->execute([$user_id]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!empty($rows)) {
// Générer les requêtes INSERT
$columns = array_keys($rows[0]);
echo "-- Suppression des données existantes pour cette table\n";
echo "DELETE FROM `$table` WHERE owner = $user_id;\n\n";
echo "-- Insertion des nouvelles données\n";
echo "INSERT INTO `$table` (`" . implode('`, `', $columns) . "`) VALUES\n";
$values = [];
foreach ($rows as $row) {
$escaped_values = [];
foreach ($row as $value) {
if ($value === null) {
$escaped_values[] = 'NULL';
} elseif (is_numeric($value)) {
$escaped_values[] = $value;
} else {
$escaped_values[] = "'" . str_replace("'", "''", $value) . "'";
}
}
$values[] = '(' . implode(', ', $escaped_values) . ')';
}
echo implode(",\n", $values) . ";\n\n";
} else {
echo "-- Aucune donnée trouvée pour cette table\n\n";
}
}
echo "-- Fin de l'export\n";
echo "-- Total des tables exportées : " . count($tables) . "\n";
} catch(PDOException $e) {
// En cas d'erreur, rediriger vers settings avec un message d'erreur
header('Location: settings.php?error=export_failed&message=' . urlencode($e->getMessage()));
exit();
}
?>