giniromero
Usuario Novato
Usuario Novato

Hola a todos,

Tengo que montar un formulario en el que se validen los campos antes de enviarse por correo, y que, obviamente, si los datos no son correctos, no envíe el correo, y se quede esperando a que los modifiquemos.

Actualmente tengo un formulario funcionando, que no valida los campos, que usa cgi-bin, cuya estructura es:


Formulario que funciona OK:

<form action="/cgi-bin/formail" enctype="x-www-form-urlencoded" method="post">
<input name="destaddr" type="hidden" value="[email protected]">
<input name="msgsubj" type="hidden" value="SubjetText">

<input name="reset" type="reset" value="borrar">
<input name="submit" type="submit" value="confirmar">
</form>



El problema es que si uso este tipo de código, junto con el que he conseguido en:

http://www.elcodigo.com/cgi-bin/DBread.cgi?tabla=scripts&campo=0&clave=48&info=1

si los campos están mal o vacíos, también me envía el correo, a pesar de mostrarme el alert con "Texto incorrecto.", cuando cierro dicho mensaje, me lo envía, y me manda a la página de mensaje enviado satisfactoriamente. Da igual si le pongo return(false) en el código para esos casos.

Ejemplo validación formulario



function ValidaCampos(form)
{
if(vacio(form.texto.value))
alert("Texto incorrecto.");

else if(!email(form.email.value, "-_"))
alert("Dirección de correo electrónico incorrecta.");

else
//sustituir esta linea por return(true) para hacer el submit de un formulario real
alert("Los datos son correctos");
return(true);
}



Form modificado que me envía siempre el e-mail aunque vacío:

<form name="miformu" action="/cgi-bin/formail" enctype="x-www-form-urlencoded" method="post" onSubmit="return ValidaCampos(this)">
Texto: <input type="text" name="texto" size="30"><br>
Correo electrónico: <input type="text" name="email" size="30"><br>
Dirección (URL): <input type="text" name="url" size="30"><br><br>
<input name="destaddr" type="hidden" value="[email protected]">
<input name="msgsubj" type="hidden" value="AsuntoText">
<input type="submit" value="Validar">
<input type="reset" value="Borrar">
</form>




Necesito ayuda urgente, no sé donde más mirar, y no tengo mucha idea de este tipo de programación.

Muchas gracias por la ayuda,

virginia romero






Avatar Image
User 390661
@man / @woman
@man / @woman

Es porque no has pues el script completo y el nombre del formulario cambialo de "miformu" a "form"
este es el script completo

Codigo PHP:

<script language="javascript">
// Abril 2001, David Hernández Sanz
// <a href="http://www.terra.es/personal3/davidhdezsanz/" target="_blank">http://www.terra.es/personal3/davidhdezsanz/</a>
// Validacion de distintos tipos de campos de formulario:
// - Texto no nulo
// - Direccion de correo electronico (e-mail): <a href='mailto:[email protected]'>[email protected]</a>[.alfanum], donde alfanum son caracteres alfanumericos u otros (pasados como parametro)
// - Direccion en Internet (URL)
// Para ello no se utilizan expresiones regulares.
//
//Este script y otros muchos pueden
//descarse on-line de forma gratuita
//en El Código: <a href="http://www.elcodigo.net" target="_blank">www.elcodigo.net</a>

/* dice si cadena es texto no vacio o no                                     */
function vacio(cadena)
  {                                    // DECLARACION DE CONSTANTES
    var blanco = " " + String.fromCharCode(13); // blancos
                                       // DECLARACION DE VARIABLES
    var i;                             // indice en cadena
    var es_vacio;                      // cadena es vacio o no
    for(i = 0, es_vacio = true; (i < cadena.length) && es_vacio; i++) // INICIO
      es_vacio = blanco.indexOf(cadena.charAt(i)) != - 1;
    return(es_vacio);
  }


/* dice si cadena es un email ([email protected][.alfanum]) o no, don- */
/* de alfanum son caracteres alfanumericos u otros                           */
function email(cadena, otros)
  {                                    // DECLARACION-INICIALIZACION VARIABLES
    var i, j;                          // indice en cadena
    var es_email = 0 < cadena.length;  // cadena es email o no
    i = salta_alfanumerico(cadena, 0, otros); // INICIO
    if(es_email = 0 < i)               // lee "alfanum*"
      if(es_email = (i < cadena.length))
        if(es_email = cadena.charAt(i) == '@') // lee "alfanum@*"
          {
            i++;
            j = salta_alfanumerico(cadena, i, otros);
            if(es_email = i < j)       // lee "alfanum@alfanum*"
              if(es_email = j < cadena.length)
                if(es_email = cadena.charAt(j) == '.')
                  {                    // lee "alfanum@alfanum.*"
                    j++;
                    i = salta_alfanumerico(cadena, j, otros);
                    if(es_email = j < i) // lee "[email protected]*"
                      while(es_email && (i < cadena.length))
                        if(es_email = cadena.charAt(i) == '.')
                          {
                            i++;
                            j = salta_alfanumerico(cadena, i, otros);
                            if(es_email = i < j) // lee "[email protected][.alfanum]*"
                              i = j;
                          }
                  }
          }
    return(es_email);
  }


/* dice si cadena es url (http://... ) o no                                     */
function url(cadena)
  {                                    // DECLARACION DE CONSTANTES
    var http = "http://";              // protocolo HTTP
                                       // DECLARACION DE VARIABLES
    var es_url;                        // cadena es url o no
    if(cadena.length <= 7)             // INICIO
      es_url = false;                  // no cabe "http://*"
    else
      es_url = http.indexOf(cadena.substring(0, 7)) != - 1; // lee "http://*"
    return(es_url);
  }


/* salta caracteres alfanumericos y otros a partir de  cadena  y  da  si- */
/* guiente posicion                                                          */
function salta_alfanumerico(cadena, i, otros)
  {                                    // DECLARACION DE VARIABLES
    var j;                             // indice en cadena
    var car;                           // caracter de cadena
    var alfanum;                       // cadena[j] es alfanumerico u otros
    for(j = i, alfanum = true; (j < cadena.length) && alfanum; j++) // INICIO
      {
        car = cadena.charAt(j);
        alfanum = alfanumerico(car) || (otros.indexOf(car) != -1);
      }
    if(!alfanum)                       // lee "alfanumX"
      j--;
    return(j);
  }
  
/* dice si car es alfanumerico                                               */
function alfanumerico(car)
  {
    return(alfabetico(car) || numerico(car));
  }


/* dice si car es alfabetico                                                 */
function alfabetico(car)               // DECLARACION DE CONSTANTES
  {                                    // caracteres alfabeticos
    var alfa = "ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvxyz";
    return(alfa.indexOf(car) != - 1);  // INICIO
  }


/* dice si car es numerico                                                   */
function numerico(car)
  {                                    // DECLARACION DE CONSTANTES
    var num = "0123456789";            // caracteres numericos
    return(num.indexOf(car) != - 1);   // INICIO
  }


// ejemplo validacion formulario
function ValidaCampos(form)
  {
    if(vacio(form.texto.value))
      alert("Texto incorrecto.");
    else if(!email(form.email.value, "-_"))
      alert("Dirección de correo electrónico incorrecta.");
    else if(!url(form.url.value))
      alert("Dirección del sitio incorrecta.");
    else
      //sustituir esta linea por return(true) para hacer el submit de un formulario real
      alert("Los datos son correctos");
    return(false);
  }


</script>

giniromero
Usuario Novato
Usuario Novato

Hola,

te agradezco mucho la contestación, pero la verdad, la parte del código que no está, es la referida a que me valide el campo de url, pero como no lo necesito, lo quité.

El caso es que, por desgracia, el poner ese trozo de código o no, no me modifica el resultado del procedure. quiero decir, invariablemente, con ese código, me dice que no está OK el campo X, y a continuación manda el formulario igualmente.

Tal vez el if, tal como está entiende que en el else SÓLO va:
alert("Los datos son correctos&quotGiño;

y la parte de:
return(true);

tal vez la considere fuera del if, por lo que es primera instrucción al salir del IF, y la ejecuta siempre.
Por desgracia no entiendo mucho de java, y mis conocimientos de esta programación no me permiten asegurarme de esto.

Sería posible que me verificaseis si es así? o que otra causa me puede estar dando este problema.

Muchas gracias a todos, por anticipado,

Virginia

Avatar Image
User 390661
@man / @woman
@man / @woman

No puedes usar una función que no este escrita
por tanto si borras 'vacio' o 'email' o 'url' habra pobremas porque las estas mandando llamar a la hora de validar el formulario.
<script language="javascript">
// Abril 2001, David Hernández Sanz
// http://www.terra.es/personal3/davidhdezsanz/
// Validacion de distintos tipos de campos de formulario:
// - Texto no nulo
// - Direccion de correo electronico (e-mail): [email protected][.alfanum], donde alfanum son caracteres alfanumericos u otros (pasados como parametro)
// - Direccion en Internet (URL)
// Para ello no se utilizan expresiones regulares.
//
//Este script y otros muchos pueden
//descarse on-line de forma gratuita
//en El Código: www.elcodigo.net

/* dice si cadena es texto no vacio o no */
function vacio(cadena)
{ // DECLARACION DE CONSTANTES
var blanco = " \n\t" + String.fromCharCode(13); // blancos
// DECLARACION DE VARIABLES
var i; // indice en cadena
var es_vacio; // cadena es vacio o no
for(i = 0, es_vacio = true; (i < cadena.length) && es_vacio; i++) // INICIO
es_vacio = blanco.indexOf(cadena.charAt(i)) != - 1;
return(es_vacio);
}


/* dice si cadena es un email ([email protected][.alfanum]) o no, don- */
/* de alfanum son caracteres alfanumericos u otros */
function email(cadena, otros)
{ // DECLARACION-INICIALIZACION VARIABLES
var i, j; // indice en cadena
var es_email = 0 < cadena.length; // cadena es email o no
i = salta_alfanumerico(cadena, 0, otros); // INICIO
if(es_email = 0 < i) // lee "alfanum*"
if(es_email = (i < cadena.length))
if(es_email = cadena.charAt(i) == '@') // lee "alfanum@*"
{
i++;
j = salta_alfanumerico(cadena, i, otros);
if(es_email = i < j) // lee "alfanum@alfanum*"
if(es_email = j < cadena.length)
if(es_email = cadena.charAt(j) == '\.')
{ // lee "alfanum@alfanum.*"
j++;
i = salta_alfanumerico(cadena, j, otros);
if(es_email = j < i) // lee "[email protected]*"
while(es_email && (i < cadena.length))
if(es_email = cadena.charAt(i) == '\.')
{
i++;
j = salta_alfanumerico(cadena, i, otros);
if(es_email = i < j) // lee "[email protected][.alfanum]*"
i = j;
}
}
}
return(es_email);
}


/* dice si cadena es url (http://... ) o no */
function url(cadena)
{ // DECLARACION DE CONSTANTES
var http = "http://"; // protocolo HTTP
// DECLARACION DE VARIABLES
var es_url; // cadena es url o no
if(cadena.length <= 7) // INICIO
es_url = false; // no cabe "http://*"
else
es_url = http.indexOf(cadena.substring(0, 7)) != - 1; // lee "http://*"
return(es_url);
}


/* salta caracteres alfanumericos y otros a partir de cadena y da si- */
/* guiente posicion */
function salta_alfanumerico(cadena, i, otros)
{ // DECLARACION DE VARIABLES
var j; // indice en cadena
var car; // caracter de cadena
var alfanum; // cadena[j] es alfanumerico u otros
for(j = i, alfanum = true; (j < cadena.length) && alfanum; j++) // INICIO
{
car = cadena.charAt(j);
alfanum = alfanumerico(car) || (otros.indexOf(car) != -1);
}
if(!alfanum) // lee "alfanumX"
j--;
return(j);
}

/* dice si car es alfanumerico */
function alfanumerico(car)
{
return(alfabetico(car) || numerico(car));
}


/* dice si car es alfabetico */
function alfabetico(car) // DECLARACION DE CONSTANTES
{ // caracteres alfabeticos
var alfa = "ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvxyz";
return(alfa.indexOf(car) != - 1); // INICIO
}


/* dice si car es numerico */
function numerico(car)
{ // DECLARACION DE CONSTANTES
var num = "0123456789"; // caracteres numericos
return(num.indexOf(car) != - 1); // INICIO
}


// ejemplo validacion formulario
function ValidaCampos(form)
{
if(vacio(form.texto.value))
alert("Texto incorrecto.&quotGiño;
else if(!email(form.email.value, "-_&quotGiño)
alert("Dirección de correo electrónico incorrecta.&quotGiño;
/* else if(!url(form.url.value))
alert("Dirección del sitio incorrecta.&quotGiño; */
else
//sustituir esta linea por return(true) para hacer el submit de un formulario real
alert("Los datos son correctos&quotGiño;
return(true);
}


</script>


Lo puse la funcion que validaba el url entre comentarios para que no huebiera problemas y funciono perfecto

ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
No se han encontrado temas similares