¿Utilizo JavaScript para HTML
-
29-10-2019 - |
Pregunta
Actualmente estoy trabajando en un formulario de pago de PayPal. El formulario permite al usuario especificar algunas opciones y cuando envíe el formulario, envía el pedido a PayPal para su procesamiento.
El formulario tiene un <select>
DropList que permite a un usuario seleccionar cuántas veces quiere que se repita una suscripción. Está configurado así:
<select name="srt"> <!-- User specifies amount of times payment should recur -->
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
</select>
<input type="hidden" name="src" value="1"> <!-- Specifies that payment should be recurring-->
Esto funciona en la mayoría de los casos, sin embargo, cuando el usuario selecciona la primera opción con el srt
value="1"
, PayPal en cambio quiere que esto se envíe con srt
en blanco u omitido y src
(la entrada oculta debajo del formulario) con value="0"
. La razón de esto parece ser que si el pago es recurrir 1 vez, lo que significa cobrar al cliente solo una vez, entonces este no es un pago recurrente en absoluto, por lo tanto. srt
no es válido y en su lugar src
, que especifica si los pagos deben recurrirse o no, deben establecerse en 0
.
Me pregunto cuál es la mejor manera de manejar esto. Lo único que se me ocurre es usar JavaScript para establecer valores de formulario ocultos dependiendo de lo que el usuario seleccione en un <select>
lista desplegable.
¿Es esa la mejor manera de manejar esto, o hay una mejor manera que no requiere que el navegador maneje JavaScript?
¡Gracias!
Solución
En primer lugar, me gustaría dejar en claro que todos los valores calculados en el navegador deber ser validado en el servidor. Realmente hay Sin sustituto Para la validación del lado del servidor. Los scripts del lado del cliente solo deben usarse para mejorar la experiencia del usuario. No hacerlo es un agujero de seguridad esperando ser explotado.
- Para resolver el problema en cuestión, puede explotar el hecho de que las entradas deshabilitadas no se envían cuando se publica un formulario. Por lo tanto, si el usuario no selecciona hacer un pago recurrente
srt
nunca se publicará. - Comenzar con
srt
tanto discapacitados como ocultos. - La entrada oculta
src
debería tener un valor de0
para empezar. - Agregue un "pago recurrente?" casilla de verificación al formulario.
- Si el usuario selecciona la casilla de verificación, habilite y muestre
srt
a través de JavaScript. - Establecer el valor de
src
igual a lo que el usuario seleccione ensrt
. - Desactivar y en blanco
srt
ysrc
Si el usuario alguna vez desactiva la casilla de verificación.
Margen:
<p><input type="checkbox" value="recurring" id="recurring"/>Recurring Payment?</p>
<select disabled id="srt" name="srt">
<option selected value="2">2</option>
<option value="3">3</option>
</select>
<input type="hidden" id="src" name="src" value="0">
jQuery:
$('#recurring').click(function() {
var $srt = $('#srt'),
$src = $('#src');
if (this.checked) {
$srt.prop('disabled', false).toggle();
$src.val($srt.val());
} else {
$srt.prop('disabled', true).toggle();
$src.val(0);
}
});
$('#srt').change(function() {
$('#src').val($(this).val());
});