Foros del Web » Programando para Internet » PHP »

Error con un formulario

Estas en el tema de Error con un formulario en el foro de PHP en Foros del Web. Hola!!! Tengo el archvio templates.php en el que tengo la función: Código PHP: function  registerForm ( $return ,  $error  =  "" ,  $username  =  "" ...
  #1 (permalink)  
Antiguo 10/01/2006, 17:38
 
Fecha de Ingreso: noviembre-2001
Ubicación: Pamplona - Marbella (Spain)
Mensajes: 298
Antigüedad: 16 años
Puntos: 0
Error con un formulario

Hola!!!

Tengo el archvio templates.php en el que tengo la función:

Código PHP:
function registerForm($return$error ""$username ""$firstname ""$lastname ""$email "") {
    
pageHeader("Regístrese");
    echo <<<EOT
<p>
 <font color="#FF0000" size="+1">
{$error}</font><br>
 Por favor rellene el formulario que le presentamos. Podrá acceder a su cuenta inmediatamente.
</p>
<form action='index.php?page=register&return=
{$return}' method='POST'>
 <input type='hidden' name='register2' value='true'>
 <p>DNI: <input type='text' name='username' value='
{$username}' size='50'></p>
 <p>Nombre: <input type='text' name='firstname' value='
{$firstname}' size='50'></p>
 <p>Apellidos: <input type='text' name='lastname' value='
{$lastname}' size='50'></p>
 <p>E-Mail: <input type='text' name='email' value='
{$email}' size='50'></p>
 <p>Dirección: <input type='text' name='direccion' size='50'></p>
 <p>Localidad: <input type='text' name='localidad' size='50'></p>
 <p>Provincia: <input type='text' name='provincia' size='50'></p>
 <p>Código Postal: <input type='text' name='cp' size='10'></p>
 <p>Teléfono: <input type='text' name='telefono' size='20'></p>
 <p>Fax: <input type='text' name='fax' size='20'></p>
 <p>Contraseña: <input type='password' name='password' size='50'></p>
 <p>Confirmar contraseña: <input type='password' name='confirm' size='50'></p>
 <input type='submit' value='Enviar'>
EOT;

Por otra parte el archivo page_register.php que procesa la consulta:

Código PHP:
if (!defined('IN_SUPPORT') || eregi("page_ticket_submit.php",$_SERVER['PHP_SELF'])) {
    die(
"No puede acceder a esta página directamente.");
}

if (!isset(
$_REQUEST['return'])) $_REQUEST['return'] = "ticket_main";

if (isset(
$_POST['register2'])) {
    if (!isset(
$_POST['username']) || $_POST['username'] == "") {
        
callRegisterForm("ERROR: Introduzca un DNI");
    } elseif (!isset(
$_POST['firstname']) || $_POST['firstname'] == "") {
        
callRegisterForm("ERROR: introduzca su nombre");
    } elseif (!isset(
$_POST['lastname']) || $_POST['lastname'] == "") {
        
callRegisterForm("ERROR: Introduzca sus apellidos");
    } elseif (!isset(
$_POST['email']) || $_POST['email'] == "") {
        
callRegisterForm("ERROR: Introduzca una dirección de correo electrónico");
    } elseif (!isset(
$_POST['password']) || $_POST['password'] == "") {
        
callRegisterForm("ERROR: La contraseña no puede estar en blanco");
    } elseif (
$_POST['password'] !== $_POST['confirm']) {
        
callRegisterForm("ERROR: Las contraseñas introducidas no coinciden. Por favor, introduzca la misma contraseña en las dos cajas.");
    } else {
        
$database->safe_query("SELECT username
                                  FROM users
                                  WHERE username='%s'"
,
                                array(
$_POST['username']), __FILE____LINE__);
        if(
$database->get_num_rows() != 0) {
            
callRegisterForm("ERROR: El DNI '{$_POST['username']}' ya existe. Por favor, eliga otro.");
        } else {
            
$database->safe_query("INSERT INTO users
                                      (firstName, lastName, email, username, password, direccion, localidad, provincia, cp, telefono, fax)
                                      VALUES ('%s', '%s', '%s', '%s', '%s', '$direccion', '$localidad', '$provincia', '$cp', '$telefono', '$fax')"
,
                                    array(
$_POST['firstname'], $_POST['lastname'], $_POST['email'],
                                          
$_POST['username'], md5($_POST['password'])),
                                     
__FILE____LINE__);
                 
            echo 
"Se ha registrado con éxito. Ahora puede <a href='index.php?page=login&amp;return={$_REQUEST['return']}'>acceder al sistema</a>";
            
        }
    }
} else {
    
registerForm($_REQUEST['return']);
}

function 
callRegisterForm($error) {
    
$_POST['username'] = isset($_POST['username']) ? $_POST['username'] : "";
    
$_POST['firstname'] = isset($_POST['firstname']) ? $_POST['firstname'] : "";
    
$_POST['lastname'] = isset($_POST['lastname']) ? $_POST['lastname'] : "";
    
$_POST['email'] = isset($_POST['email']) ? $_POST['email'] : "";
    
registerForm($_REQUEST['return'], $error$_POST['username'], $_POST['firstname'], $_POST['lastname'], $_POST['email']);
}
?> 
Al enviar el formulario me aparece siempre el mensaje:

Fecha/Hora: 11/01/2006 12:18:27 AM
Aviso en el archivo '***/page_register.php', línea 91:
Undefined variable: direccion


Qué puede pasar?????

Gracias por adelantado
__________________
SimDalom.com ¿Cómunicación Multimedia? Nosotros nos encargamos de eso, y tú... preocupate de lo importante
  #2 (permalink)  
Antiguo 10/01/2006, 19:20
 
Fecha de Ingreso: diciembre-2005
Mensajes: 122
Antigüedad: 12 años
Puntos: 0
pues mira, me parece que es demasiado código y que te estas complicando demasiado para algo tan sencillo. te recomiendo de que si vas a usar los arrays $_POST, $_GET, etc. dentro de funciones recuerda que debes declararlos como globales dentro de la función, de otra manera no los podrá ver. revisa con que valores direccion te provoca errores, creo que el problema radica ahí.
  #3 (permalink)  
Antiguo 10/01/2006, 19:25
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Checa bien tu síntaxis, solo falta una variable para que tu síntaxis esté enteramente completa en tu función...

Tu código es completísimo, el problema sería solo en una variable, igual falte parte de tu función de de page_register.php para completar todo.
  #4 (permalink)  
Antiguo 11/01/2006, 09:18
 
Fecha de Ingreso: noviembre-2001
Ubicación: Pamplona - Marbella (Spain)
Mensajes: 298
Antigüedad: 16 años
Puntos: 0
No alcanzo a ver el problema, de verdad podríais concretar un poco más. Intentaré colocar menos código para que no de pereza. El error está en estas líneas (ver completo arriba)

page_register.php
Código PHP:
$database->safe_query("INSERT INTO users
                                      (firstName, lastName, email, username, password, direccion, localidad, provincia, cp, telefono, fax)
                                      VALUES ('%s', '%s', '%s', '%s', '%s', '$direccion', '$localidad', '$provincia', '$cp', '$telefono', '$fax')"
,
                                    array(
$_POST['firstname'], $_POST['lastname'], $_POST['email'],
                                          
$_POST['username'], md5($_POST['password'])),
                                     
__FILE____LINE__); 
y el error es el siguiente:

Fecha/Hora: 11/01/2006 12:18:27 AM
Aviso en el archivo '***/page_register.php', línea 91:
Undefined variable: direccion
y se repite con las variables localidad, provincia, cp, telefono y fax.

La línea 91 es la de VALUES.

Gracias
__________________
SimDalom.com ¿Cómunicación Multimedia? Nosotros nos encargamos de eso, y tú... preocupate de lo importante
  #5 (permalink)  
Antiguo 11/01/2006, 09:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El aviso te dice que esas variables "dirección" y demás no están definidas en tu array $_POST .. bien sea por qué no indicastes ningún valor desde tu formulario (por qué tal vez sea opcional) o por qué te equivacastes en el nombre .. (ej. defines "name="direccion" y luego pretendes acceder a $_POST['otracosa'] ...), o por qué en el flujo del proceso de ese script no se le dé valor en ese instante (al cargarlo por primera vez) sino en sub-siguientes veces (recarga, actuar sobre el formulario .. etc).

El error más bien es un "aviso" y en tu código hay una función que lo controla:
callRegisterForm() .. ahí hace una validación de que si "existe" tal variable .. toma su valor y sino le asigna una cadena vacia (por lo menos para "definirla").

En esa función no incluyes tu "dirección" y esas variables que parece que has añadido al código original. (en parte por qué ahí valida que sean obligatorioas no?).

Bueno . .el caso es que antes de atactar tu consulta SQL deberías hacer una validación estilo:


Código PHP:
$_POST['direccion'] = isset($_POST['direccion']) ? $_POST['direccion'] : ""
Y así con el resto de variables.

Por lo demás .. ese error ("AVISO" mejor dicho) te dice que ahí tienes una "mala" programación .. Siempre debes (como hace el código "original" que presentas) verificar si existe una variable antes de pretender accederla (o como hace ahí .. simplemente le dá un valor "nulo" y acaba el problema ahí mismo).

Estos mensajes de error de PHP también lo puedes controlar (para que no "de avisos" de ese estilo con:
error_reporting()

Eso sí .. no es muy buena práctica "ocultar" errores, más bien deberías ver por qué sucede y programar "bien" en consecuencia.

Un saludo,
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 18:16.