'Acceso no autorizado.']); exit; } $data = json_decode(file_get_contents('php://input'), true); if (!$data || !isset($data['id']) || !isset($data['field']) || !isset($data['value'])) { http_response_code(400); echo json_encode(['error' => 'Datos incompletos.']); exit; } $pedido_id = $data['id']; $field = $data['field']; $value = $data['value']; // Whitelist allowed fields for security $allowed_fields = ['numero_operacion', 'banco', 'clave', 'fecha_recojo', 'observacion']; if (!in_array($field, $allowed_fields)) { http_response_code(400); echo json_encode(['error' => 'Campo no permitido.']); exit; } try { $pdo = db(); // If updating numero_operacion, check for duplicates (optional but good) if ($field === 'numero_operacion' && !empty($value)) { if (strlen($value) < 6) { echo json_encode(['error' => 'El número de operación debe tener al menos 6 dígitos.']); exit; } $stmt_check = $pdo->prepare("SELECT id FROM pedidos WHERE numero_operacion = ? AND id != ?"); $stmt_check->execute([$value, $pedido_id]); if ($stmt_check->fetch()) { echo json_encode(['error' => 'El número de operación ya existe en otro pedido.']); exit; } } $sql = "UPDATE pedidos SET $field = ? WHERE id = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$value, $pedido_id]); // Fetch the updated pedido to return relevant info (like the clave if it's now visible) $stmt_fetch = $pdo->prepare("SELECT clave, numero_operacion, banco FROM pedidos WHERE id = ?"); $stmt_fetch->execute([$pedido_id]); $updated_pedido = $stmt_fetch->fetch(PDO::FETCH_ASSOC); echo json_encode([ 'success' => true, 'message' => 'Campo actualizado correctamente.', 'pedido' => $updated_pedido ]); } catch (PDOException $e) { http_response_code(500); echo json_encode(['error' => 'Error al actualizar la base de datos: ' . $e->getMessage()]); } ?>