Foros del Web » Programando para Internet » PHP »

Formulario - Validar

Estas en el tema de Formulario - Validar en el foro de PHP en Foros del Web. Estoy aprendiendo php, y estoy haciendo un formulario, y quiero validar los campos, y luego mandarlo a una base de datos, (mysql) ya logre hacer ...
  #1 (permalink)  
Antiguo 09/01/2004, 16:04
 
Fecha de Ingreso: enero-2004
Mensajes: 3
Antigüedad: 20 años, 3 meses
Puntos: 0
Formulario - Validar

Estoy aprendiendo php, y estoy haciendo un formulario, y quiero validar los campos, y luego mandarlo a una base de datos, (mysql) ya logre hacer q cuando no es valido no envie a la base de datos, pero tengo dudas con los mensajes de error que coloco para los formularios no validos...
coloque al lado del texfield una variable $error la cual la hago "" o "Error ingresar mail nuevamente" pero m problema es q al entrar a la pagina por primera vez ya me aparece el mensaje de error, siendo q esta asignacion esta dentro de una funcion, lo q pienso yo es q como no tiene valor inicial, agarra ese...nose, necesito ayuda, pq ya me quebre la cabeza tratando de arreglarlo............ aca dejo el codigo......

<?php
//Connection statement
require_once('Connections/db2.php');

//Aditional Functions
require_once('includes/functions.inc.php');
//global $error;
//$errorm=$error;
//if(!$i==1){$error="";}
//$error="";
function Validar(){
//global $error;
//$error="";
//$i=1;
if(comprobar_email($_POST['email'])){
$error="";
return true;}
else {
$emilio=$_POST['email'];
$error="El email ".$emilio." es incorrecto";
return false;}
}

function comprobar_email($email){
$mail_correcto = 0;
//compruebo unas cosas primeras
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
//miro si tiene caracter .
if (substr_count($email,".")>= 1){
//obtengo la terminacion del dominio
$term_dom = substr(strrchr ($email, '.'),1);
//compruebo que la terminación del dominio sea correcta
if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
//compruebo que lo de antes del dominio sea correcto
$antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
$caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
if ($caracter_ult != "@" && $caracter_ult != "."){
$mail_correcto = 1;
}
}
}
}
}
if ($mail_correcto==1)
return true;
else
return false;
}


if (Validar()){

// build the form action
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" . $HTTP_SERVER_VARS['QUERY_STRING'] : "");

if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO formulario (apellido, email) VALUES (%s, %s)",
GetSQLValueString($HTTP_POST_VARS['nombre'], "text"),
GetSQLValueString($HTTP_POST_VARS['email'], "text"));

$Result1 = $db2->Execute($insertSQL) or die($db2->ErrorMsg());
}
}

// begin Recordset
$query_rs_chica = "SELECT apellido, email FROM formulario";
$rs_chica = $db2->SelectLimit($query_rs_chica) or die($db2->ErrorMsg());
$totalRows_rs_chica = $rs_chica->RecordCount();
// end Recordset

//PHP ADODB document - made with PHAkt 2.6.0
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="<?php echo $editFormAction; ?>" name="form1" method="POST">

<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Nombre</td>
<td>
<input name="nombre" type="text" id="nombre"></td>
</tr>
<tr>
<td>Email</td>
<td><input name="email" type="text" id="email"><?php if(!Validar()){echo $error;}?></td>
</tr>
<tr>
<td>
<input type="submit" name="Submit" value="Submit"></td>
<td>&nbsp;</td>
</tr>
</table>

<input type="hidden" name="MM_insert" value="form1">
</form>
</body>
</html>
<?php
$rs_chica->Close();
?>
  #2 (permalink)  
Antiguo 09/01/2004, 16:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Eso es porque llamas a validar() hayas enviado el formulario o no.

Supongo que solo querras que se ejecute la query cuando se envia el formulario. Lo puedes hacer con algo asi:
Código PHP:
if (isset($_POST['Submit']) && Validar()){

// build the form action
$editFormAction $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" $HTTP_SERVER_VARS['QUERY_STRING'] : ""); 
Con ese isset() (www.php.net/isset) estas comprobando si existe en el $_POST un indice llamado 'Submit' (el nombre de tu boton submit del form). Si existe, es que se esta cargando el script como consecuencia de haber enviado el formulario.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 09/01/2004, 17:00
 
Fecha de Ingreso: enero-2004
Mensajes: 3
Antigüedad: 20 años, 3 meses
Puntos: 0
gracias

lo hice y cambio, pero = no se muestra el mensaje de errror cuando existe ek error, puedo escribir algo, asi como un echo, el q si se muestra al existir el error, pero me gustaria hacer q este error apareciera al lado del textfield correspondiente, y no se me ocurre como hacerlo con echo, pq poner un if al lado de textfield es lo mismo q hize pero en otro orden........

Código PHP:
<?php
//Connection statement
require_once('Connections/db2.php');

//Aditional Functions
require_once('includes/functions.inc.php');

function 
Validar(){
$error="";
if(
comprobar_email($_POST['email'])){
    
$error="";
    return 
true;}
else {
    
$emilio=$_POST['email'];
    
$error="El email ".$emilio." es incorrecto";
    
    return 
false;}
}

function 
comprobar_email($email){ 
    
$mail_correcto 0
    
//compruebo unas cosas primeras 
    
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
       if ((!
strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
          
//miro si tiene caracter . 
          
if (substr_count($email,".")>= 1){ 
             
//obtengo la terminacion del dominio 
             
$term_dom substr(strrchr ($email'.'),1); 
             
//compruebo que la terminación del dominio sea correcta 
             
if (strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){ 
                
//compruebo que lo de antes del dominio sea correcto 
                
$antes_dom substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                
$caracter_ult substr($antes_dom,strlen($antes_dom)-1,1); 
                if (
$caracter_ult != "@" && $caracter_ult != "."){ 
                   
$mail_correcto 1
                } 
             } 
          } 
       } 
    } 
    if (
$mail_correcto==1
       return 
true
    else 
       return 
false



if (isset(
$_POST['Submit']) && Validar()){

// build the form action
$editFormAction $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" $HTTP_SERVER_VARS['QUERY_STRING'] : "");

if ((isset(
$HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO formulario (apellido, email) VALUES (%s, %s)",
                       
GetSQLValueString($HTTP_POST_VARS['nombre'], "text"),
                       
GetSQLValueString($HTTP_POST_VARS['email'], "text"));

  
$Result1 $db2->Execute($insertSQL) or die($db2->ErrorMsg());
}

}

// begin Recordset
$query_rs_chica "SELECT apellido, email FROM formulario";
$rs_chica $db2->SelectLimit($query_rs_chica) or die($db2->ErrorMsg());
$totalRows_rs_chica $rs_chica->RecordCount();
// end Recordset

//PHP ADODB document - made with PHAkt 2.6.0
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="<?php echo $editFormAction?>" name="form1" method="POST">
  
  <table width="50%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>Nombre</td>
      <td>
<input name="nombre" type="text" id="nombre"></td>
    </tr>
    <tr>
      <td>Email</td>
      <td><input name="email" type="text" id="email"><?php echo $error;?></td>
    </tr>
    <tr>
      <td>
<input type="submit" name="Submit" value="Submit"></td>
      <td>&nbsp;</td>
    </tr>
  </table>
  
  <input type="hidden" name="MM_insert" value="form1">
</form>
</body>
</html>
<?php
$rs_chica
->Close();
?>
  #4 (permalink)  
Antiguo 09/01/2004, 17:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bien, ahora es problema del ambito de las variables. No se puede acceder desde fuera de una funcion a una variable creada dentro de una funcion; y tampoco se puede acceder directamente a una variable creada fuera de una funcion desde dentro de una funcion. Es decir, el $error definido dentro de tu funcion no es accesible desde el codigo que muestra el formulario.

Tienes mas info en http://www.php.net/manual/en/languag...bles.scope.php

La solucion aqui seria no usar la funcion Validar() en el if, sino usar comprobar_email() y poner un else a ese if que asignara el valor a la variable $error. Algo como:
Código PHP:
$ok=true;
$error='';
if (isset(
$_POST['Submit']) && $ok=comprobar_email($_POST['email'])){



// build the form action

$editFormAction $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" $HTTP_SERVER_VARS['QUERY_STRING'] : "");



if ((isset(
$HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {

  
$insertSQL sprintf("INSERT INTO formulario (apellido, email) VALUES (%s, %s)",

                       
GetSQLValueString($HTTP_POST_VARS['nombre'], "text"),

                       
GetSQLValueString($HTTP_POST_VARS['email'], "text"));



  
$Result1 $db2->Execute($insertSQL) or die($db2->ErrorMsg());

}



} else {
  if (!
$ok$error=$error="El email ".$_POST['email']." es incorrecto";

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 10/01/2004, 11:44
 
Fecha de Ingreso: enero-2004
Mensajes: 3
Antigüedad: 20 años, 3 meses
Puntos: 0
Gracias!!!! me tincaba q era algo asi, pero no podia cachar bien eso.............. Gracias!!
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:27.