prepare("SELECT * FROM products WHERE id=?")->execute([$id]) ? $pdo->query("SELECT * FROM products WHERE id=$id")->fetch() : null; if (!$product) { header('Location: /'); exit; } $medias = $pdo->query("SELECT * FROM product_media WHERE product_id=$id ORDER BY sort_order")->fetchAll(); } /* ─── Sauvegarde ─────────────────────────────────────────── */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $title = trim($_POST['title'] ?? ''); $desc = trim($_POST['desc'] ?? ''); $price = (float)str_replace(',','.',($_POST['price'] ?? 0)); $shipping = (float)str_replace(',','.',($_POST['shipping'] ?? 0)); $sku = trim($_POST['sku'] ?? ''); $cat_id = (int)($_POST['category_id'] ?? 0) ?: null; $status = $_POST['status'] ?? 'brouillon'; $tags = trim($_POST['tags'] ?? ''); if (!$title) { $error = 'Le titre est obligatoire.'; goto show; } if ($id) { $pdo->prepare("UPDATE products SET title=?,description=?,price=?,shipping=?,sku=?,category_id=?,status=?,tags=?,updated_at=CURRENT_TIMESTAMP WHERE id=?") ->execute([$title,$desc,$price,$shipping,$sku,$cat_id,$status,$tags,$id]); } else { $pdo->prepare("INSERT INTO products (title,description,price,shipping,sku,category_id,status,tags) VALUES(?,?,?,?,?,?,?,?)") ->execute([$title,$desc,$price,$shipping,$sku,$cat_id,$status,$tags]); $id = (int)$pdo->lastInsertId(); } // Uploads médias if (!empty($_FILES['medias']['name'][0])) { $count = count($_FILES['medias']['name']); for ($i = 0; $i < $count; $i++) { if ($_FILES['medias']['error'][$i] !== UPLOAD_ERR_OK) continue; $orig = $_FILES['medias']['name'][$i]; $ext = strtolower(pathinfo($orig, PATHINFO_EXTENSION)); if (!in_array($ext, array_merge(imgExts(), vidExts()))) continue; $fname = uniqid('m', true) . '.' . $ext; if (!move_uploaded_file($_FILES['medias']['tmp_name'][$i], $UPLOAD_DIR . $fname)) continue; $type = isImage($fname) ? 'image' : 'video'; $order = (int)$pdo->query("SELECT COALESCE(MAX(sort_order),0)+1 FROM product_media WHERE product_id=$id")->fetchColumn(); $pdo->prepare("INSERT INTO product_media (product_id,type,filename,original_name,sort_order) VALUES(?,?,?,?,?)") ->execute([$id,$type,$fname,$orig,$order]); } } // Suppression médias cochés if (!empty($_POST['del_media'])) { foreach ($_POST['del_media'] as $mid) { $mid = (int)$mid; $m = $pdo->query("SELECT filename FROM product_media WHERE id=$mid")->fetch(); if ($m && $m['filename']) @unlink($UPLOAD_DIR . $m['filename']); $pdo->prepare("DELETE FROM product_media WHERE id=?")->execute([$mid]); } } header('Location: /produit.php?id=' . $id); exit; } show: $cats = $pdo->query("SELECT * FROM categories ORDER BY name")->fetchAll(); $pageTitle = $id ? 'Modifier le produit' : 'Nouveau produit'; layout_head($pageTitle); layout_sidebar($id ? '' : 'products'); layout_main_open(); ?>