Estoy atascado tratando de validar si se ha seleccionado una casilla de verificación mediante el envío de un formulario AJAX. Básicamente, quiero asegurarme de que la casilla de verificación de tarifa estándar o de tarifa de emergencia esté marcada (porque solo una de ellas aparecerá en el código anterior). He probado .val () como los demás, pero tampoco funciona. Además, la selección no funciona. Pero supongo que la casilla de verificación y la selección son del mismo problema.

Código HTML:

<li class="standard-rate rate">
    <input type="checkbox" name="acknowledge-standard-rate" value="Standard Rate" id="acknowledge-standard-rate"><div class="standard-rate-desc">(*)I acknowledge time spent on my request will be deducted from my current contract or, in the absence of an hourly pack, billed at the end of the month.</div>
</li>

<li class="emergency-rate rate">
    <input  type="checkbox" name="acknowledge-emergency-rate" value="Emergency Rate" id="acknowledge-emergency-rate"><div class="emergency-rate-desc">(*)I acknowledge time spent on my request will be billed at our $200/hour emergency rate.</div>
</li>

Código AJAX / jQuery:

var formData = {
    'first_name'        : $('input[name=first_name]').val(),
    'last_name'         : $('input[name=last_name]').val(),
    'email'             : $('input[name=email]').val(),
    'phone'             : $('input[name=phone]').val(),
    'message'           : $('textarea[name=message]').val(),
    'severity'          : $('select[name=severity]').val(),
    'acknowledge-standard-rate'     : $('input[name=acknowledge-standard-rate]').is(':checked'),
    'acknowledge-emergency-rate'    : $('input[name=acknowledge-emergency-rate]').is(':checked')
    };

// process the form
    var request = $.ajax({
        type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
        url         : 'process.php', // the url where we want to POST
        data        : formData, // our data object
        dataType    : 'json', // what type of data do we expect back from the server
                    encode          : true
    })

Código PHP de process.php

if (!isset($_POST['acknowledge-standard-rate']) && !isset($_POST['acknowledge-emergency-rate'])) {// if
  //doing null check for checkbox and returning one
  $errors['checkbox'] = 'Please check the check box aknowledging payment.';
} // if
-1
walyzfan1 18 ago. 2016 a las 19:10

2 respuestas

La mejor respuesta

Creo que el problema aquí es que siempre está estableciendo un valor true or false en ambos campos de casilla de verificación en su javascript.

El procesamiento predeterminado del formulario del navegador no enviaría la variable en absoluto si no estuviera marcada y su código PHP funcionaría.

Entonces, en lugar de crear siempre estas 2 variables

'acknowledge-standard-rate'     : $('input[name=acknowledge-standard-rate]').is(':checked'),
'acknowledge-emergency-rate'    : $('input[name=acknowledge-emergency-rate]').is(':checked')
};

En su javascript, solo necesita crearlos si la casilla de verificación correspondiente está marcada.

Tal vez algo como esto

var formData = {
    'first_name'        : $('input[name=first_name]').val(),
    'last_name'         : $('input[name=last_name]').val(),
    'email'             : $('input[name=email]').val(),
    'phone'             : $('input[name=phone]').val(),
    'message'           : $('textarea[name=message]').val(),
    'severity'          : $('select[name=severity]').val()
};
if ( $('input[name=acknowledge-standard-rate]').is(':checked') ) {
    formData.acknowledge-standard-rate = $('input[name=acknowledge-standard-rate]').val();
}
if ( $('input[name=acknowledge-emergency-rate]').is(':checked') ) {
    formData.acknowledge-emergency-rate = $('input[name=acknowledge-emergency-rate'].val();
}

process the form
var request = $.ajax({
        type     : 'POST', 
        url      : 'process.php',
        data     : formData, 
        dataType : 'json', 
        encode   : true
});

También es posible que desee validar que uno de estos esté realmente marcado en el javascript antes incluso de iniciar este proceso AJAX, lo que proporciona un cuadro de diálogo de error simple que le indica al usuario que elija uno.

1
RiggsFolly 18 ago. 2016 a las 16:43

Prueba esto:

if ($_POST['acknowledge-standard-rate'] == false && $_POST['acknowledge-emergency-rate'] == false) {// if
    //doing null check for checkbox and returning one
    $errors['checkbox'] = 'Please check the check box aknowledging payment.';  
}  
0
Ivnhal 18 ago. 2016 a las 16:17