Comunidad de diseño web y desarrollo en internet online

Ayuda Código que verifica que no exista registro en campo repetido

Citar            
MensajeEscrito el 19 Abr 2018 07:02 pm
tengo el siguiente problema el siguiente script hace una comprobación a una base de datos para que el valor agregado en un campo (nic) no se repita y muestra una alerta y desabilita algunos campos del formulario si este dato agregado ya existe en ese campo de la tabla de la BD. todo funciona, el único inconveniente es que en la bd que me pasaron hay muchos de estos campos en Blanco osea hay algunas que no tiene nic (ya que este campo es opcional) y que si yo dejo en blanco o vació este campo para ingresar un registro nuevo hace la consulta y me toma los campos vacíos como que ya existen en la bd y me inhabilita el formulario. he intentado con empty, isset(), is_null() pero no me resulta.

lo he usado en el query así (comprobar las que no estén vacías)

Código :

$query = "select * from datos where nic =$nic AND nic !=""";


y en el condicional ya que esta de esta manera en el tuto que me ayudo a realizar esto

Código :

if(mysql_num_rows(@$results) > 0) 


por algo asi

Código :

if (($nic!="") || ($nic==$nic)) 


para que cuando sea igual al que se ingresa en el campo del formulario o no este vacio (como los que estan en la BD) deje realizar


Código PHP :

<?php

//------------------------
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'usersuserrr);
define('DB_SERVER_PASSWORD', '**************');
define('DB_DATABASE', 'BasedeDatos');

$conexion = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
mysql_select_db(DB_DATABASE, $conexion);
//----------------------------
if($_REQUEST)
{
   $nic    = $_REQUEST['nic'];
   $query = "select * from datos where nic =$nic";
   $results = mysql_query($query) or die('ok');
   if(mysql_num_rows(@$results) > 0)  
   {
      echo '<div id="Error"></div>';
      echo "<script type=''>alert('Ya existe el Nic $nic en la Base de Datos');</script>";       
         }
   else
   {
        echo ""; 

   }
   
}?>

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 11:14 am
Esta expresion esta mal

$query = "select * from datos where nic =$nic AND nic !=""";

Deberia ser

$query = "select * from datos where nic =$nic AND nic !=''";

La diferencia es que al final uso comillas simples y luego una doble

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Abr 2018 01:04 pm
Hola gracias por responder aun así no me funciona, ya que existen en la BD muchos registros que este campo esta vacío (pues hay registros que aun no le han asignado el NIC) y al dejar el campo del formulario en blanco o vacío obviamente lo compara con los datos vacíos de la BD en este campo y me sale la alerta que ya existe. por lo que necesito excluir los campos vacios nic

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 01:21 pm
Entonces

select * from datos where nic =$nic AND nic !=''

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Abr 2018 01:40 pm
Amigos Lo he agregado así como me dicen en esa parte y nada un sin funcionar al dejar el campo en blanco los sigue comparando con los datos nic en la base de datos que están vacíos y lo toma como igual...
no sera en el if de mas abajo donde habrá que realizar la comprobación... muchas gracias...

Código PHP :

if($_REQUEST)
{
   $nic    = $_REQUEST['nic'];
   //$query = "select * from contenido_archivo where nic = '".strtolower($numeroproceso)."'";
   
   $query = "select * from datos where nic =$nic AND nic !=''";
   $results = mysql_query($query) or die('ok');
   if(mysql_num_rows(@$results) > 0)  
   {
      echo '<div id="Error"></div>';
      echo "<script type=''>alert('Ya existe el Nic $nic en la Base de Datos');</script>";       
         }
   else
   {
        echo ""; 

   }
   
}?>

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 01:47 pm
No se, yo soy medio basico, pero veamos

select * from datos where nic =$nic AND nic !=''

Esto me tiene que traer todos los registros que tienen nic y no esta vacio (o esta a NULL en la base de datos?)

Para eso voy a phpmyadmin (o lo que uses como manejador de base de datos) y corro la consulta, veo que me devuelve. Si tengo alguno con el nic vacio, entonces quizas sea NULL, entonces lo cambio a

select * from datos where nic =$nic AND !ISNULL(nic);

etc. Una vez que consigo que me devuelva los registros que no tienen el nic vacio, pongo el SQL en el PHP y sigo adelante

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Abr 2018 02:28 pm
Nada aun no me funciona y no se que mas hacer...
funciona si le ingreso un numero diferente al que tenga almacedano algun nic

no funciona si lo dejo en blanco... se inhabilitan los campos del formulario y sale la alerta que ya existe el nic en la Base de datos.

[img]https://drive.google.com/file/d/1FxUFhuRO4l0i__l1_GLnLwAiHNnrCM63/view?usp=sharing[/img]


y asi si lo dejo en Blanco


[img]https://drive.google.com/file/d/1lHXAS_6-eoD-Y54rVLEdytKdOBw-iA6x/view?usp=sharing[/img]

Pero estoy notando que al dejarlo en blanco me aparece el ok en el div Info que esta alado del campo para ingresar el nic en el formulario, el cual es parte de este result


Código :

$results = mysql_query($query) or die('ok');



por lo que se me puede ocurrir algo hacer esta comprobación no se si la este diseñando bien

Código :

if ((mysql_num_rows(@$results) > 0)|| ($results!='ok')) 


y quedaría algo así....

if ((mysql_num_rows(@$results) > 0)|| ($results!='ok'))
{
echo '<div id="Error"></div>';
echo "<script type=''>alert('Ya existe el Nic $nic en la Base de Datos');</script>";
}
else
{
echo "";

}

}?>

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 02:36 pm
PERO NADA aun no me funciona...

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 02:40 pm
No se visualizan las imágenes acá pongo los enlaces de las mismas nuevamente:

https://drive.google.com/file/d/1FxUFhuRO4l0i__l1_GLnLwAiHNnrCM63/view

https://drive.google.com/file/d/1lHXAS_6-eoD-Y54rVLEdytKdOBw-iA6x/view

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 02:48 pm
No veo que este probando en la base de datos, haces prueba y error desde el formulario. Primero verifica el SQL desde phpmyadmin o lo que uses para administrar la base de datos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Abr 2018 02:51 pm
Hola es un script Javascript que rueda en el formulario al ir tipeando el cual incluye el archivo php que pase.. el cual si se escribe un valor que ya este en la base de datos este consulta y muestra la alerta y desactiva el formulario (por que ya existe ese valor y no se admite repetirlo) solo puse acá ese archivo pues el otro no hay necesidad por que el que hace la magia es el php ese que estoy pasando.

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Abr 2018 03:02 pm
Ok, vamos por partes

El PHP no hace magia, sino que consulta una base de datos

La base de datos devuelve datos segun el SQL que le pasas

Pafra obtener datos hay que pasar el SQL correcto

El SQL posiblemente sea incorrecto y hay que testearlo

Para testearlo tienes que ejecutarlo directamente contra la base de datos, pues sino al problema de los datos, le sumas el del JS que interpreta lo que devuelve el PHP que hace "magia"

Entonces para resolver un problema hay que separarlo en partes e ir descartando posibles opciones. El primero: depurar la consulta a la base de datos. Usar la adivinación consume mas tiempo y si el problema es complejo te garantiza el fracaso

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Abr 2018 03:05 pm
de todas maneras aca posteo el archivo del formulario

Código PHP :

<?php
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'usuario');
define('DB_SERVER_PASSWORD', 'contrasena');
define('DB_DATABASE', 'basededatos');

$conexion = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
mysql_select_db(DB_DATABASE, $conexion);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Dev-PHP 1.9.4">
<link rel="stylesheet" href="css/form-field-tooltip.css" media="screen" type="text/css">
   <script type="text/javascript" src="js/rounded-corners.js"></script>
   <script type="text/javascript" src="js/form-field-tooltip.js"></script>
    <!--------------------ESTE Script hace que se muentre y se oculten DIVS------------------------------->
<script language="JavaScript">
function muestra_oculta(id){
if (document.getElementById){ //se obtiene el id
var el = document.getElementById(id); //se define la variable "el" igual a nuestro div
el.style.display = (el.style.display == 'none') ? 'block' : 'none'; //damos un atributo display:none que oculta el div
}
}
window.onload = function(){/*hace que se cargue la función lo que predetermina que div estará oculto hasta llamar a la función nuevamente*/
muestra_oculta('contenido_a_mostrar');/* "contenido_a_mostrar" es el nombre que le dimos al DIV */
}
</script>
<!--------------------ESTE SCRIPT ES PARA  VERIFICAR EN VIVO QUE SO SE REPITA PROCESOS------------------------------->
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<link href="css.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {   
   $('#nic').blur(function(){
      
      $('#Info').html('<img src="" alt="" />').fadeOut(1000);

      var nic = $(this).val();      
      var dataString = 'nic='+nic;
      
      $.ajax({
            type: "POST",
            url: "-check_username_availablity.php",
            data: dataString,
           // success: function(data) {
            success: function(data) {
                if(data!="") {
               //------------------------------------------------
                    
                    $("#local").attr("disabled", "disabled");
               $("#nombre").attr("disabled", "disabled");
               $("#direccion").attr("disabled", "disabled");
               $("#barrio").attr("disabled", "disabled");
               $("#botoncrearbarriod.png").attr("disabled", "disabled");
                $("#submit").attr("disabled", "disabled");
                } else {
                   <!------ $("#nic").removeAttr("disabled");-------->
                    $("#local").removeAttr("disabled");
                $("#nombre").removeAttr("disabled");
                $("#direccion").removeAttr("disabled");
               $("#barrio").removeAttr("disabled");
               $("#botoncrearbarriod.png").removeAttr("disabled");
               $("#submit").removeAttr("disabled");
                }
                $('#Info').fadeIn(1000).html(data);
                //alert(data);
            }
        });
    });              
});  
</script>
<form name="formulario" method="post" action="sube.php">
  <table width="500" border="0" align="center" cellpadding="0" cellspacing="0" class="contenedorr3">
    <tr>
      <td width="703" height="442"><table width="729" height="305" border="0" align="center" cellpadding="1" cellspacing="0">
        <tr bgcolor="#0099FF">
          <td height="20" colspan="2" bgcolor="#FFFFFF">&nbsp;</td>
        </tr>
        <tr bgcolor="#0099FF">
          <td width="30%" height="25" bgcolor="#009933">&nbsp;</td>
          <td width="70%" height="25" bgcolor="#009933"><strong><center>
            AGREGAR NUEVA SOLICITUD
          </center></strong></td>
          </tr>
        <tr>
          <td height="155" colspan="2" bgcolor="#EEEEEE"><table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td><table width="100%" border="0" cellspacing="0" cellpadding="2">
                <tr>
                  <td width="141"><table width="98%" border="0" align="center" cellpadding="2" cellspacing="3">
                    <tr>
                      <td height="22">&nbsp;</td>
                      <td colspan="3"><strong>
                        <input name="id" type="hidden" id="id" value="<? echo $id?>">
                      </strong></td>
                      <td colspan="2">&nbsp;</td>
                    </tr>
                    <tr>
                      <td width="6" height="33">&nbsp;</td>
                      <td width="274">C&oacute;digo NIC:                        
                        <input onKeyPress="return handleEnter(this, event)" name="nic" type="text" id="nic" size="15"/></td>
                      <td width="84"><div id="Info"></div></td>
                      <td width="73">&nbsp;</td>
                      <td colspan="2">&nbsp;</td>
                    </tr>
                    <tr>
                      <td height="33">&nbsp;</td>
                      <td colspan="5">Nombre Local Comercial:
                        <input name="local" type="text" id="local" size="35" style="text-transform:uppercase;" onKeyUp="javascript:this.value=this.value.toUpperCase();" onKeyPress="return handleEnter(this, event)"/>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                      </tr>
                    <tr>
                      <td height="33">&nbsp;</td>
                      <td colspan="5">Nombre :
                        <input name="nombre" type="text" id="nombre" size="65" style="text-transform:uppercase;" onKeyUp="javascript:this.value=this.value.toUpperCase();" onKeyPress="return handleEnter(this, event)"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                    </tr>
                    <tr>
                      <td height="26">&nbsp;</td>
                      <td colspan="5"> Direcci&oacute;n:                        <span style="font-size: 12px">
                        <input name="direccion" type="text" id="direccion" size="25" style="text-transform:uppercase;" onKeyUp="javascript:this.value=this.value.toUpperCase();" onKeyPress="return handleEnter(this, event)"/>
                        &nbsp;&nbsp;Barrio:
                        </center>
                        <input name="barrio" type="text" id="barrio" size="25" style="text-transform:uppercase;" onKeyUp="javascript:this.value=this.value.toUpperCase();" onKeyPress="return handleEnter(this, event)"/>
                      </span></td>
                      </tr>
                    <tr>
                      <td height="46">&nbsp;</td>
                      <td colspan="3">&nbsp;</td>
                      <td width="169">&nbsp;</td>
                      <td width="58"><span style="font-size: 12px"><span class="Estilo131">
                        <input type="submit" name="Submit" value="Grabar">
                      </span></span></td>
                    </tr>
                    </table></td>
                  </tr>
                </table></td>
              </tr>
            </table></td>
        </tr>
        <tr>
          <td height="32" colspan="2" bgcolor="#009933">&nbsp;</td>
        </tr>
      </table>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
      <p>&nbsp;</p></td>
    </tr>
  </table>
</form>




adicional el archivo que comprueba in situ (check_username_availablity.php) el cual se incluye en el js lo llama


Código PHP :

<?php
sleep(1);
//------------------------
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'usuario');
define('DB_SERVER_PASSWORD', 'contrasena');
define('DB_DATABASE', 'basededatos');

$conexion = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
mysql_select_db(DB_DATABASE, $conexion);
//----------------------------


if($_REQUEST)
{
   $nic    = $_REQUEST['nic'];
   //$query = "select * from contenido_archivo where nic = '".strtolower($numeroproceso)."'";
   //$query = "select * from datos where nic =$nic AND nic !=''";
   $query = "select * from datos where nic =$nic AND !ISNULL(nic);";
   $results = mysql_query($query) or die('ok');
   
   //if ((mysql_num_rows(@$results) > 0)||($results!='ok'))  // not available
   if (mysql_num_rows(@$results) > 0)
   {
      echo '<div id="Error"></div>';
      echo "<script type=''>alert('Ya existe el Nic $nic en la Base de Datos');</script>";       
         }
   else
   {
        echo ""; 

   }
   
}?>


adicional un archivo de la librería js que sin el no funciona esto (jquery-1.3.2.js)

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 21 Abr 2018 03:02 pm
alguien de otro foro me ayudo a resolver el problema (Gracias syaf) el cual me sugirio que pusiera esto

Código :

if(!empty($nic)){


antes de la condicional que evaluaba por lo que quedo asi:

Código :

......

if($_REQUEST)
{
   $nic = $_REQUEST['nic'];
   $query = "SELECT * FROM datos WHERE nic = '$nic'";
   $results = mysql_query($query) or die('ok');
   //codigo que excluye los campos nic vacios ya que hay 
   if(!empty($nic)){
   if(mysql_num_rows(@$results) > 0)
   {
      echo '<div id="Error"></div>';
      echo "<script type=''>alert('Ya existe el Nic $nic en la Base de Datos');</script>";
    }else{
      echo "";
   }
   }
}
?>

Por flashtrix

21 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.