PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); } catch (PDOException $e) { http_response_code(500); echo json_encode(['error' => 'Erreur de connexion BDD : ' . $e->getMessage()]); exit; } } return $pdo; } /** * Traitement des requêtes API AJAX (GET / POST) */ if (isset($_GET['action'])) { header('Content-Type: application/json; charset=utf-8'); $db = getDB(); $action = $_GET['action']; if ($action === 'get_all') { $stmt = $db->query("SELECT * FROM vehicles ORDER BY marque, modele, motorisation"); $rows = $stmt->fetchAll(); $vehicles = []; foreach ($rows as $row) { $vId = $row['id']; // Récupération des données véhicule $stmtDV = $db->prepare("SELECT * FROM donnees_vehicule WHERE vehicle_id = ?"); $stmtDV->execute([$vId]); $dv = $stmtDV->fetch(); // Récupération de l'huile $stmtH = $db->prepare("SELECT * FROM huile WHERE vehicle_id = ?"); $stmtH->execute([$vId]); $h = $stmtH->fetch(); // Récupération des couples de serrage $stmtC = $db->prepare("SELECT nom, valeur FROM couples WHERE vehicle_id = ? ORDER BY id"); $stmtC->execute([$vId]); $couples = $stmtC->fetchAll(); // Récupération des pièces $stmtP = $db->prepare("SELECT type, reference, lien FROM pieces WHERE vehicle_id = ? ORDER BY id"); $stmtP->execute([$vId]); $pieces = $stmtP->fetchAll(); $vehicles[] = [ 'id' => $row['id'], 'marque' => $row['marque'], 'modele' => $row['modele'], 'motorisation' => $row['motorisation'], 'codeMoteur' => $row['code_moteur'] ?? '', 'donneesVehicule' => [ 'annee' => $dv['annee'] ?? '', 'cylindree' => $dv['cylindree'] ?? '', 'puissance' => $dv['puissance'] ?? '', 'carburant' => $dv['carburant'] ?? '', 'boite' => $dv['boite'] ?? '', 'emplacementOBD' => $dv['emplacement_obd'] ?? '', 'notes' => $dv['notes'] ?? '' ], 'huile' => [ 'norme' => $h['norme'] ?? '', 'viscosite' => $h['viscosite'] ?? '', 'quantite' => $h['quantite'] ?? '' ], 'couples' => $couples ?: [], 'pieces' => $pieces ?: [] ]; } echo json_encode(['vehicles' => $vehicles]); exit; } if ($action === 'save' && $_SERVER['REQUEST_METHOD'] === 'POST') { $data = json_decode(file_get_contents('php://input'), true); if (!$data) { echo json_encode(['success' => false, 'error' => 'Données invalides']); exit; } $id = $data['id'] ?? null; if (!$id) { $id = 'v_' . uniqid(); } $db->beginTransaction(); try { // 1. Table principale vehicles $stmt = $db->prepare("INSERT INTO vehicles (id, marque, modele, motorisation, code_moteur) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE marque = VALUES(marque), modele = VALUES(modele), motorisation = VALUES(motorisation), code_moteur = VALUES(code_moteur)"); $stmt->execute([ $id, $data['marque'] ?? '', $data['modele'] ?? '', $data['motorisation'] ?? '', $data['codeMoteur'] ?? '' ]); // 2. Table donnees_vehicule $dv = $data['donneesVehicule'] ?? []; $stmt = $db->prepare("INSERT INTO donnees_vehicule (vehicle_id, annee, cylindree, puissance, carburant, boite, emplacement_obd, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE annee = VALUES(annee), cylindree = VALUES(cylindree), puissance = VALUES(puissance), carburant = VALUES(carburant), boite = VALUES(boite), emplacement_obd = VALUES(emplacement_obd), notes = VALUES(notes)"); $stmt->execute([ $id, $dv['annee'] ?? '', $dv['cylindree'] ?? '', $dv['puissance'] ?? '', $dv['carburant'] ?? '', $dv['boite'] ?? '', $dv['emplacementOBD'] ?? '', $dv['notes'] ?? '' ]); // 3. Table huile $h = $data['huile'] ?? []; $stmt = $db->prepare("INSERT INTO huile (vehicle_id, norme, viscosite, quantite) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE norme = VALUES(norme), viscosite = VALUES(viscosite), quantite = VALUES(quantite)"); $stmt->execute([ $id, $h['norme'] ?? '', $h['viscosite'] ?? '', $h['quantite'] ?? '' ]); // 4. Couples (suppression puis réinsertion) $stmt = $db->prepare("DELETE FROM couples WHERE vehicle_id = ?"); $stmt->execute([$id]); if (!empty($data['couples'])) { $stmtC = $db->prepare("INSERT INTO couples (vehicle_id, nom, valeur) VALUES (?, ?, ?)"); foreach ($data['couples'] as $c) { if (!empty($c['nom']) || !empty($c['valeur'])) { $stmtC->execute([$id, $c['nom'] ?? '', $c['valeur'] ?? '']); } } } // 5. Pièces (suppression puis réinsertion) $stmt = $db->prepare("DELETE FROM pieces WHERE vehicle_id = ?"); $stmt->execute([$id]); if (!empty($data['pieces'])) { $stmtP = $db->prepare("INSERT INTO pieces (vehicle_id, type, reference, lien) VALUES (?, ?, ?, ?)"); foreach ($data['pieces'] as $p) { if (!empty($p['type']) || !empty($p['reference']) || !empty($p['lien'])) { $stmtP->execute([$id, $p['type'] ?? '', $p['reference'] ?? '', $p['lien'] ?? '']); } } } $db->commit(); echo json_encode(['success' => true, 'id' => $id]); } catch (Exception $e) { $db->rollBack(); echo json_encode(['success' => false, 'error' => $e->getMessage()]); } exit; } if ($action === 'delete' && $_SERVER['REQUEST_METHOD'] === 'POST') { $data = json_decode(file_get_contents('php://input'), true); $id = $data['id'] ?? null; if ($id) { $stmt = $db->prepare("DELETE FROM vehicles WHERE id = ?"); $stmt->execute([$id]); echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'ID manquant']); } exit; } if ($action === 'seed' && $_SERVER['REQUEST_METHOD'] === 'POST') { $data = json_decode(file_get_contents('php://input'), true); $seedVehicles = $data['vehicles'] ?? []; $db->beginTransaction(); try { foreach ($seedVehicles as $v) { $id = $v['id']; $stmt = $db->prepare("INSERT IGNORE INTO vehicles (id, marque, modele, motorisation, code_moteur) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$id, $v['marque'], $v['modele'], $v['motorisation'], $v['codeMoteur'] ?? '']); $dv = $v['donneesVehicule'] ?? []; $stmtDV = $db->prepare("INSERT IGNORE INTO donnees_vehicule (vehicle_id, annee, cylindree, puissance, carburant, boite, emplacement_obd, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmtDV->execute([$id, $dv['annee'] ?? '', $dv['cylindree'] ?? '', $dv['puissance'] ?? '', $dv['carburant'] ?? '', $dv['boite'] ?? '', $dv['emplacementOBD'] ?? '', $dv['notes'] ?? '']); $h = $v['huile'] ?? []; $stmtH = $db->prepare("INSERT IGNORE INTO huile (vehicle_id, norme, viscosite, quantite) VALUES (?, ?, ?, ?)"); $stmtH->execute([$id, $h['norme'] ?? '', $h['viscosite'] ?? '', $h['quantite'] ?? '']); } $db->commit(); echo json_encode(['success' => true]); } catch (Exception $e) { $db->rollBack(); echo json_encode(['success' => false, 'error' => $e->getMessage()]); } exit; } } ?> Fiches techniques véhicules