Foros del Web » Programando para Internet » PHP »

validar campo con datos de Base de datos

Estas en el tema de validar campo con datos de Base de datos en el foro de PHP en Foros del Web. Hola a todos, Tengo un formulario que uno de sus campos es el Código Postal, pero aparte de que solo pueda escribir solo 5 números ...
  #1 (permalink)  
Antiguo 29/05/2009, 13:03
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
validar campo con datos de Base de datos

Hola a todos,

Tengo un formulario que uno de sus campos es el Código Postal, pero aparte de que solo pueda escribir solo 5 números (q eso ya lo tengo) necesito que verifique si existe en una base de datos MySQL antes de enviar el formulario.

Lo que no tengo ni idea por donde empezar, alguien me puede decir como hacerlo???

solo que lo explique en palabras como planteármelo, el código ya me lo monto yo (o eso intentaré, jejeje)

Gracias

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #2 (permalink)  
Antiguo 29/05/2009, 13:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: validar campo con datos de Base de datos

Hola

Necesitarás PHP, ASP o cualquier otro lenguaje del lado del servidor. Dirígete a alguno de esos foros y te podrán ayudar mejor

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 30/05/2009, 02:56
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

OK, algún administrador me puede mover al foro de PHP???

Gracias
__________________
=================
Chiqui nunca muere ! ! !
  #4 (permalink)  
Antiguo 30/05/2009, 03:26
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: validar campo con datos de Base de datos

Mensaje movido al foro de PHP desde Javascript.

Saludos,
  #5 (permalink)  
Antiguo 30/05/2009, 05:24
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

Gracias... pues esto es lo que necesito,

no puedo validar el formulario con PHP enviando el formulario a sí mismo, y si hay un error, volver a mostrar el formulario indicando el error. Esto ya lo hago, por ejemplo, en una ventana de Login y Pass.

El problema es que al hacer eso todo el formulario se limpia y habrá que volver a rellenarlo, y como son muchos campos, es un trabajo de chinos volver a rellenar los campos que ya halla llenado, y para complicarla más, varios campos del formulario tienen funciones en javascript para habilitar y deshabilitar opciones del formulario, y al hacer la validacion con PHP eso se va al garete.

Por eso necesito ayuda, porque no se como validar por JavaScript con datos de una BBDD en MySQL.

Alguien me puede orientar por donde empezar???

Gracias.

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #6 (permalink)  
Antiguo 30/05/2009, 07:02
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: validar campo con datos de Base de datos

Hola,

para que no se vacíen los campos al darle a enviar puedes hacer lo siguiente, tienes el input

Código:
<input type="text" name="prueba">
así por ejemplo, pues lo pones así:

Código:
<input type="text" name="prueba" value="<?php echo $_POST['prueba']; ?>">
un saludo.
  #7 (permalink)  
Antiguo 30/05/2009, 08:13
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

si lo se, lo malo de eso es que:

1.- son muchos campos
2.- algunas funciones de JavaScript del formulario se ejecutan con onChange o con onClick, y al ponerle los values, no existen esos eventos, y el formulario no vuele a ser "exactamente" el mismo.

Por eso necesariamente tiene que ser por JavaScript la validación del formulario.

Se me había ocurrido "construir" con PHP un array de JavaScript con el contenido de todos los códigos postales y luego hacer una función que busque si existe en ese array.

Pero son mas de 10mil códigos postales y, entre otras coas, no se si un array de JS aguante tanto.

De repente se pueda con Ajax (que pueda hacer llamadas de servidor sin cambiar de página), lo malo es que no tengo ni idea de Ajax, pero bueno, a ver si alguien se le ocurre algo.

Gracias

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #8 (permalink)  
Antiguo 30/05/2009, 08:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: validar campo con datos de Base de datos

Bueno con ajax trata de hacerlo de esta forma. Por lo general con este codigo lo que tu modificas son variables y tal vez alguno que otro campo. Vas a ver que se te va a ser bien facil

Código PHP:
var xmlHttp;
function 
showPoll(VARIABLE){
    
xmlHttp=GetXmlHttpObject();
    if (
xmlHttp==null){
        
alert ("Tu navegador no soporta AJAX! No podras usar esta aplicación.");
        return;
    }

    var 
url="PAGINA_QUE_VAS_A_HACER_CONSULTA.php";
    
url=url+"?VARIABLE="+VARIABLE;


    
//Puedes crear una variable en la funcion que diga cual es el id que deseas verificar tu escoges
    
document.getElementById("DIV_ID").innerHTML="";
    
xmlHttp.onreadystatechange=function(){
        if (
xmlHttp.readyState==1){
        
img document.createElement('img');
        
img.src="images/ajaxLoading.gif";
        
document.getElementById("DIV_ID").appendChild(img);
        
document.getElementById("DIV_ID").appendChild(document.createTextNode(" Cargando por favor espere..."));
        }
        if (
xmlHttp.readyState==4){
            
document.getElementById("DIV_ID").innerHTML=xmlHttp.responseText;
        }
    }
    
xmlHttp.open("GET",url,true);
    
xmlHttp.send(null);
}

function 
GetXmlHttpObject(){
    var 
xmlHttp=null;
    try{
        
// Firefox, Opera 8.0+, Safari
        
xmlHttp=new XMLHttpRequest();
    }catch(
e){
        
// Internet Explorer
        
try{
            
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }catch(
e){
            try{
                
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }catch(
e){}
        }
    }
    return 
xmlHttp;


Parece complicado pero intentalo. Solo tienes que asegurarte que todo este bien en el archivo de PHP

Última edición por abimaelrc; 05/06/2009 a las 07:44
  #9 (permalink)  
Antiguo 30/05/2009, 10:57
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

Antes de poner me a ello, a ver is entendí para que sirve cada cosa

la comento dentro de tu código


Código PHP:
var xmlHttp;
function 
showPoll(VARIABLE){
    
xmlHttp=GetXmlHttpObject();
    if (
xmlHttp==null){
        
alert ("Tu navegador no soporta AJAX! No podras usar esta aplicación.");
        return;
    } 
// esto es obvio, el mensaje de alert lo dice todo.

    
var url="PAGINA_QUE_VAS_A_HACER_CONSULTA.php"//este va ha ser el php donde hago mi consulta si mi VARIABLE existe
    
url=url+"?VARIABLE="+VARIABLE// VARIABLE es el valor que ingresa el usuario, para mi caso el código postal


    //Puedes crear una variable en la funcion que diga cual es el id que deseas verificar tu escoges
    
document.getElementById("DIV_ID").innerHTML=""// DIV_ID es una capa que debo tener por ahí vacía que usaré para mostrar el mensaje de cargando y la img ajaxLoading.gif
    
xmlHttp.onreadystatechange=function(){
        if (
xmlHttp.readyState==1){ //readyState==1 supongo que es el estado en que se encuentra mientras esta haciendo la llamada al php.
        
img document.createElement('img');
        
img.src="images/ajaxLoading.gif";
        
document.getElementById("DIV_ID").appendChild(img);
        
document.getElementById("DIV_ID").appendChild(document.createTextNode(" Cargando por favor espere..."));
        }
        if (
xmlHttp.readyState==4){ //readyState==4 es cuando ya tuvo una respuesta, y esa respuesta se guarda en responseText.
            
document.getElementById("DIV_ID").innerHTML=xmlHttp.responseText// muestro el responseText dentro de la capa DIV_ID
        
}
    }
    
xmlHttp.open("GET",url,true); // para hacer la llamada a mi php
    
xmlHttp.send(null); // para que se menatenga en la misma página... de eso se trata el ajax no????, jajajaja
}

function 
GetXmlHttpObject(){ // crea el objeto de Ajax para hacer lo que quiero.
    
var xmlHttp=null;
    try{
        
// Firefox, Opera 8.0+, Safari
        
xmlHttp=new XMLHttpRequest();
    }catch(
e){
        
// Internet Explorer
        
try{
            
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }catch(
e){
            try{
                
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }catch(
e){}
        }
    }
    return 
xmlHttp;


Si es que he acertado en todo, tengo unas preguntitas:

* Confirmame si en este ejemplo el DIV_ID es una capa que está por ahí en mi HTML y me muestra el " Cargando por favor espere..." y luego la respuesta del php.

* Esa respuesta del PHP como debe ser, puede ser un simple "echo 'ok';" o "echo 'ko'; o también puede ser "true" o "false" o un "<img src=ok.gif>"????

* si esto es así, en vez de que guarde la respuesta en DIV_ID, puede entregarlo como "return" de la función showPoll()???


Lo que me gustaría hacer es esto:
Código PHP:
<script>
function 
valDatos(F) {

    
txt_alerta "No existe el código postal introducido.";
    
    if( !
showPoll(F.codpostal.value)) { alert(txt_alerta); F.codpostal.focus();  return false;}
    else{ 
F.submit(); }

</script>


....

<form action="inicio.php" method="post" name="datosForm" id="datosForm">

Código postal: <input name="codpostal" id="codpostal" type="text" />

<input id="btn" name="btn" onclick="return valDatos(document.datosForm);" type="button" value="Enviar" /> 
si se puede hacer así sería de PM, porque así tengo todas las demás validaciones.

Saludos y gracias

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #10 (permalink)  
Antiguo 30/05/2009, 11:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: validar campo con datos de Base de datos

Dios mio, ojala todo el mundo pudiera hacer la duda como tu haces que dices hasta la hormiga que te paso por tu teclado describiendola con detalles. Me gusto eso.

Bueno al detalle entonces de lo que me estas preguntando.

Tienes que crear un div, span, p... o lo que quieras

//Puedes cambiarle el id a lo que tu quieras pero tienes que modificar el id tambien en la funcion
<div id="DIV_ID"></div>

la respuesta tiene que ser con echo y lo puedes hacer como tu quieras el va a regresar la informacion. Te advierto que hay problemas con los acentos lo mejor es hacer un RegExp y cambiar los acentos por

$aacute;
$eacute;
$iacute;
$oacute;
$uacute;

y asi tambien con las ñ.

Y no he tratado de hacer con un return pero como es ajax yo prefiero usarlo como te lo envie
  #11 (permalink)  
Antiguo 30/05/2009, 12:30
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

Gracias abimaelrc, es lo que tiene el RedBull, jajaja pero siempre soy así, aunque a veces se quejan de lo "detalloso" que soy, ya que siempre me dicen que me enrollo más que las persianas, jajajajaja pero en estos casos es importante ser así

Bueno, mientras leía tu comentario se me ocurrió algo:

1.- que mi PHP me devuelva el texto "ok" o "ko"

2.- en vez de poner un DIV, pongo un
<input name="codpostalvalid" id="codpostalvalid" type="hidden" value="" />

3.- en el ajax reemplazo
document.getElementById("DIV_ID").innerHTML=xmlHtt p.responseText;

por
document.getElementById("codpostalvalid").value=xm lHttp.responseText;

4.- en el input de "id=codpostal" pongo un
onBlur="javascript:showPoll(this.value);"

5.- en mi valDatos() pondríar:

if( F.codpostalvalid.value == "ko") { alert(txt_alerta); F.codpostal.focus(); return false;}
else{ F.submit(); }



DEBERIA FUNCIONAR NO???????

QUE OPINAS?????

Gracias

Saludos

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #12 (permalink)  
Antiguo 30/05/2009, 12:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: validar campo con datos de Base de datos

ok de detallista pasaste a incomprensible en el punto 5 no te entendi ni la z de lo que enviaste
  #13 (permalink)  
Antiguo 30/05/2009, 13:32
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

jajajja, lo siento es la emoción de hacer mi primer AJAX, jajajaj

el pto 5 me refiero a esto:

Originalmente te puse que quería hacer esto en mi función para validar mi formulario:

Código PHP:
<script>
function 
valDatos(F) {

    
txt_alerta "No existe el código postal introducido.";
    
    if( !
showPoll(F.codpostal.value)) { alert(txt_alerta); F.codpostal.focus();  return false;}
    else{ 
F.submit(); }

</script> 
Pero como me dijiste que nunca habías devuelto un return, se me ocurrió devolver el texto ok o ko (paso 1) y guardarlo en un input hidden llamado "codpostalvalid" (paso2).

entonces, con esto en mi funcion para validar en el formulario (paso 5) pondría esto:
Código PHP:
<script>
function 
valDatos(F) {

    
txt_alerta "No existe el código postal introducido.";
    
    if( 
F.codpostalvalid.value == "ko") { alert(txt_alerta); F.codpostal.focus(); return false;} // esto es, si codpostalvalid == KO, no envía el formulario y muestra un alert.
    
else{ F.submit(); }

</script> 

Pues nada, creo que debería funcionar verdad????

Gracias y saludos...
__________________
=================
Chiqui nunca muere ! ! !
  #14 (permalink)  
Antiguo 30/05/2009, 13:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: validar campo con datos de Base de datos

Puede que resulte pero tambien puedes escribir la funcion en esta parte


Código PHP:
if (xmlHttp.readyState==4){ //readyState==4 es cuando ya tuvo una respuesta, y esa respuesta se guarda en responseText. 
       //Puedes escribir la respuesta en una variable
       
var mensaje xmlHttp.responseText;
       
valDatos(mensaje);

        
//Esta linea no es requisito
       
document.getElementById("DIV_ID").innerHTML=xmlHttp.responseText// muestro el responseText dentro de la capa DIV_ID 

  #15 (permalink)  
Antiguo 30/05/2009, 14:59
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

algo así... es simplemente en tu código, en vez de tener un DIV y cambiar su innerHTML para mostrar el cargando y luego el resultado del php, es poner en un input hidden ese valor y luego utilizarlo para validar el formulario

bueno, voy a probarlo en un rato (que termine lo que estoy haciendo) y les cuento que tal...

Gracias por todo

Saludos

Carlos
__________________
=================
Chiqui nunca muere ! ! !
  #16 (permalink)  
Antiguo 11/06/2009, 04:55
Avatar de chiquirf  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid
Mensajes: 215
Antigüedad: 18 años, 5 meses
Puntos: 3
Respuesta: validar campo con datos de Base de datos

Pues funcionó a las mil maravillas, muchas gracias abimaelrc...

Este es el cod por si a alguien le interesa:

Código PHP:
var xmlHttp;
function 
showPoll(VARIABLE){
    
xmlHttp=GetXmlHttpObject();
    if (
xmlHttp==null){
        
alert ("Tu navegador no soporta AJAX! No podras usar esta aplicación.");
        return;
    }

    var 
url="codigos/codpostsearch.php";
    
url=url+"?cod_post="+VARIABLE;


    
//Puedes crear una variable en la funcion que diga cual es el id que deseas verificar tu escoges
    
document.getElementById("p3valid").value="";
    
document.getElementById("div_cp").innerHTML="";
    
xmlHttp.onreadystatechange=function(){
        
/*
        if (xmlHttp.readyState==1){
        
        }
        */
        
if (xmlHttp.readyState==4){
            
img document.createElement('img');
            if(
xmlHttp.responseText =="ok"){ img.src="img/ok.png";} //ok.png es una imagen con un checkok verde.
            
else { img.src="img/ko.png";} //ko.png es una imagen con una "X" rojas.
            
img.border=0;
            
img.width 16;
            
img.heigth 16;
            
document.getElementById("div_cp").appendChild(img);
            
            
document.getElementById("p3valid").value=xmlHttp.responseText;
            
// document.getElementById("span_cp").innerHTML=xmlHttp.responseText;
        
}
    }
    
xmlHttp.open("GET",url,true);
    
xmlHttp.send(null);
}

function 
GetXmlHttpObject(){
    var 
xmlHttp=null;
    try{
        
// Firefox, Opera 8.0+, Safari
        
xmlHttp=new XMLHttpRequest();
    }catch(
e){
        
// Internet Explorer
        
try{
            
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }catch(
e){
            try{
                
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }catch(
e){}
        }
    }
    return 
xmlHttp;

y el HTML

Código HTML:
<input name="p3" id="p3" type="text" maxlength="5"  onblur="javascript:showPoll(this.value);"  value="" />

<div id="div_cp"></div>

<input name="p3valid" id="p3valid" type="hidden"/>


Luego en codpostsearch.php lo unico que hace es recibir el codigo postal por GET, buscar en la BBDD y si lo encuentra hace un echo 'ok' y si no lo encuntra hace un echo 'ko' .

Luego cuando envío el formulario, valido si p3valid es OK o KO para dejar continuar o no.


Pues este es mi primer AJAX, y no ha sido muy dificil.

Gracias a todos...

Saludos

Carlos
__________________
=================
Chiqui nunca muere ! ! !
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:00.