Как проверить, существует ли значение с помощью Jquery, и если это так, чтобы предотвратить отправку журнала?


я получил несколько кодов JQuery, чтобы проверить, существует ли какое-либо значение (cedula в этом случае) в базе данных.

система работает нормально, показывает, когда значение cedula существует или нет, я хотел бы теперь, чтобы предотвратить отправку формы, потому что, хотя он говорит, что он не может быть использован, потому что он уже существует, он отправляет данные, и поскольку это уже сохраненная cedula не вставляет.

Registro.php

    <?php
include "conexion.php";
?>
<!doctype html>
<html>
<head>
<link href="styles.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery-1.3.2.js"></script>

    <meta charset="utf-8">
    <title> </title>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {    
    $('#cedula').blur(function(){

        $('#info').html('<img src="loader.gif" alt="" />').fadeOut(300);

        var cedula = $(this).val();        
        var dataString = 'cedula='+cedula;

        $.ajax({
            type: "POST",
            url: "comprobar_disponibilidad.php",
            data: dataString,
            success: function(data) {
                $('#info').fadeIn(300).html(data);
            }
        });
    });              
});    
</script>
<h1 align ="center">Bienvenido</h1>
<a href ="index.html"><ol>Pagina Principal</ol></a>
<a href ="registrar.php"><ol>Registrar</ol></a>
<a href ="listado.php"><ol>Listado</ol></a>
<a href ="Sancion.php"><ol>Sancion</ol></a>
<form method="POST" action ="procesar.php">     



    <div>
    <label> Ingrese su cedula </label>
    <input type="text" id="cedula" name="cedula">
    <div id="info"></div>
    </div>



    <label> Ingrese su primer nombre </label>
    <input type="text" id="nombre1" name="nombre1"><br/>

    <label> Ingrese su segundo nombre </label>
    <input type="text" id="nombre2" name="nombre2"><br/>

    <label> Ingrese su primer apellido </label>
    <input type="text" id="apellido1" name="apellido1"><br/>

     <label> Ingrese su segundo apellido </label>
    <input type="text" id="apellido2" name="apellido2"><br/>

    <label> Ingrese su rango </label>
    <div><select name="rango">
<?php
global $cone;
$registros=mysqli_query($cone,"select * from rangos");
while ($reg = mysqli_fetch_array($registros))
echo "<option value='$reg[id_rango]'>".$reg[rango]."</option>";


?>
  </select></div>  
    <input type="submit" value="enviar">
</form>

</body>
</html>

Comprobar_disponibilidad.php

 <?php
sleep(1);
require_once'conexion.php';
    global $cone;

if($_REQUEST) {
    $cedula = $_REQUEST['cedula'];
    $sql="Select * from personal where cedula = '$cedula'";
if ($result=mysqli_query($cone,$sql))
  {
  // Return the number of rows in result set
  $rowcount=mysqli_num_rows($result);
  //printf("Result set has %d rows.\n",$rowcount); mostrar resultado
 if($rowcount > 0)
        echo '<div id="Error">Cedula ya registrada</div>';
    else
        echo '<div id="Success">Disponible</div>';
}
  }



?>
Author: Victor Alvarado, 2017-01-25

2 answers

В вашем коде есть две совершенно разные вещи, которые вы хотите получить; динамическая проверка бюллетеня с помощью ajax и окончательная отправка данных, когда пользователь отправляет полную форму.

Сначала определите, каким образом вы хотите выполнить проверку своих данных; на стороне сервера или на стороне клиента.

Давайте посмотрим на пример на стороне клиента:

Хорошо структурируйте свою форму:

<form action="procesar.php" method="post" id="myform">
  <input type="text" name="cedula">
  <input type="text" name="nombre">
  <input type="text" name="apellido">
  ...
  <input type="submit" value="enviar">
</form>

Немного модульность:

function requestValidation(done) {
  $.ajax({
    url: 'validate.php',
    type: 'POST',
    contentType: 'application/json',
    data: { cedula: $('input[name=cedula]').val().trim() }
    success: function(res) { done(null, JSON.parse(res).isValid) },
    error: function(err) { done(err) }
  });
}

Проверить cedula:

$('input[name=cedula]').blur(function() {
  requestValidation(function(err, isValid) {
    if (err) console.error(err);
    if (isValid) // Dar visto bueno
    else // Cédula ya existe
  });
});

Проверка данных при отправке формы

function submit(e) {
  // Recoger los datos:
  var data = {};
  $('#myform').children('input[type=text]').each(function(i, input) {
    var name = $(input).attr('name');
    var value = $(input).val().trim() || undefined;
    data[name] = value;
  });

  // Comprobar validez de los datos:
  var emptyFields = Object.keys(data).some(function(key) {
    return data[key] !== undefined;
  });

  // Evitar enviar el formulario si alguna validación no se cumple:
  if (emptyFields) {
    e.preventDefault();
    return alert('Todos los campos son obligatorios!');
  }

  requestValidation(function(err, isValid) {
    if (err) {
      e.preventDefault();
      alert('Error al intentar validar la existencia de la cedula');
      console.error(err);
    } else if (!isValid) {
      e.preventDefault();
      alert('El número de cédula ya existe');
    }

    // Filtro superado, formulario enviado.
  });
}

$('#myform').submit(submit);

Этого должно быть достаточно.

Помните, что e.preventDefault() - это то, что предотвращает отправку формы, submit - это событие, которое выполняется, когда пользователь пытается отправить форму. Отправьте JSON в качестве ответа из php, чтобы ajax мог работать для вас.

Если вы хотите сделать это с сервера, вам просто нужно отправить данные вашей формы, сделать соответствующие проверки из php и отправить ответы в соответствии с вашими проверками, если пользователь ошибся, он снова отображает ту же страницу с сообщением об ошибке.

 2
Author: Mauro Aguilar, 2017-01-26 02:44:15

В JQuery вам нужно избежать события, и вы можете лучше оптимизировать ajax как PHP.

JQuery имеет funcion". on()", затем вы предвидите событие отправки с этим funcion". preventDefault()" и улучшаете ajax.

Пример:

$('#formCedula').on("submit", function(event){
   // Evita el envio del formulario
   event.preventDefault();

   // Cache variables
   var divInfo = $("#info");
   var loader = "<img src='loader.gif' />";

   $.ajax({
       type: "POST",
       url: "comprobar_disponibilidad.php",
       beforeSend: divInfo.html(loader);
       data: this.serialize(),
       done: function(data){
          divInfo.html(data);
       }
   })


})

И в PHP:

<?php

$postCedula = ( isset($_POST['cedula']) )? trim($_POST['cedula']) : '';

if( !empty($_POST['cedula']) ) ){
  require_once'conexion.php';

  $sql = "SELECT * FROM personal WHERE cedula = '$cedula'"
  $result = mysqli_query($connection, $sql);
  $counter = mysqli_num_rows($result);

  if($result AND $counter){ // Cero 0, PHP lo toma como FALSE
     echo "Cedula ya existe";
  }
  else {
     mysqli_free_result($result);
     $sql = "INSERT INTO personal (cedula) VALUES ('$cedula')";
     if( mysqli_query($connection, $sql) ){
        echo "Exito, se guardo cedula $cedula";
     }
     else {
        echo "Error, no se guardo cedula $cedula";
     }         
  }
}
else {
   echo "Falto cedula...";
}

Очевидно, что много не хватает в 2 кодах, в бэкэнде проверки, санации, оптимизации кода и т. д.

Интерфейс может быть лучше оптимизирован с помощью HTML5, JQuery и некоторые инструменты javascript, я надеюсь, помогут вам.

 2
Author: , 2017-01-26 03:08:58