34849-vm/update_pedido_field.php
2026-04-28 01:14:38 +00:00

66 lines
2.1 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
if (!isset($_SESSION['user_id'])) {
http_response_code(403);
echo json_encode(['error' => '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()]);
}
?>