66 lines
2.1 KiB
PHP
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'];
|
|
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()]);
|
|
}
|
|
?>
|