Foros del Web » Programando para Internet » PHP »

Ayuda para conservar datos en un formulario tras error

Estas en el tema de Ayuda para conservar datos en un formulario tras error en el foro de PHP en Foros del Web. Hola, soy nuevo por aquí así que encantado de haberme registrado en el foro!!! También soy un poco novato con la programación en PHP y ...
  #1 (permalink)  
Antiguo 16/12/2010, 06:41
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Ayuda para conservar datos en un formulario tras error

Hola, soy nuevo por aquí así que encantado de haberme registrado en el foro!!!

También soy un poco novato con la programación en PHP y HTML.

Os comento mi caso a ver si me podéis echar una mano pues estoy bastante atascado. Tengo un formulario web para la gestión de roles en una aplicación de gestión de proyectos y qusiera conservar la información de los campos del formulario cuando ocurre algún error ya sea dejar algún campo en blanco o introducir datos erróneos. he estado mirando trabajar con sesiones pero tal y como tengo el código me salta un warning con el session_start() y no se me conservan los datos.

Os adjunto mi código (hay varias cosas comentadas, no las hagáis caso pues son pruebas que estuve haciendo y lo comenté por no perder el código)

Muchas gracias de antemano!!!

<HTML>
<HEAD>
<TITLE>Agile Project Manager</TITLE>
<link rel="stylesheet" href="estilo.css">

</HEAD>
<BODY>

<!-- Menú de navegación del sitio -->
<ul class="navbar">
<li><a href="./index.html">Index</a>
<li><a href="./Personas.php">PERSON</a>
<li><a href="./Proyectos.php">PROJECT</a>
<li class="current"><a href="./Roles.php">ROLE</a>
</ul>

<!-- Contenido principal -->
<h1>AGILE PROJECT MANAGER - ADD NEW ROLE</h1>

<?php

session_start();

function comprobar_errores_formato ($nombre, $descripcion) {

if (strlen($nombre) > 30) return 21;
if (strlen($descripcion) > 70) return 41;
return 0;
}

function insertar ($conexion, $nombre, $descripcion) {

$query_nombre = sprintf("SELECT * FROM roles WHERE nombre = '%s'", $nombre);

$res = mysql_query($query_nombre,$conexion);
if (mysql_num_rows($res) == 1){
return -11;
}
$query_inserccion = sprintf("INSERT INTO roles (nombre, descripcion) VALUES ('%s', '%s')", strtoupper($nombre), strtoupper($descripcion));
mysql_query ($query_inserccion, $conexion);

$error = mysql_error($conexion);
if (!empty($error)) {
return $error;
} else {
return 0;
}
}


/*function cambiaf_a_mysql ($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha = $mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}*/


if (count($_POST) > 0) {

// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
if ($_POST['nombre'] == NULL) {
$error = 2;
} elseif ($_POST['descripcion'] == NULL) {
$error = 3;
} else {
$error = comprobar_errores_formato($_POST['nombre'], $_POST['descripcion']);
}

if ($error == 0) {

$conexion = mysql_connect('localhost', 'root');
mysql_select_db('agileProject', $conexion);

$my_error = insertar($conexion, $_POST['nombre'], $_POST['descripcion']);

if(!empty($my_error)) {
print '<script language="JavaScript">';
switch ($my_error) {
case -11:
print 'alert("This ROLE NAME belongs to a role which already exists in database, please type other ROLE NAME");';
break;
default:
print 'alert("Error inserting into database.");';
}
print '</script>';
$url = $_SERVER['HTTP_REFERER'];
echo "<SCRIPT>window.location='$url';</SCRIPT>";

} else {
/*$query_consulta = sprintf("CREATE TABLE %s(id MEDIUMINT NOT NULL AUTO_INCREMENT, evento VARCHAR(30) NOT NULL,
fecha_inicio DATE NOT NULL, fecha_fin DATE NOT NULL, comentario VARCHAR(100), PRIMARY KEY (id))",
strtoupper($_POST['matricula']));
mysql_query($query_consulta,$conexion);
$query_consulta = sprintf("INSERT INTO %s(evento,fecha_inicio,fecha_fin) VALUES ('ALTA', CURDATE(), CURDATE())",
strtoupper($_POST['matricula']));
mysql_query($query_consulta,$conexion);
$query_consulta = sprintf("INSERT INTO %s(evento,fecha_inicio,fecha_fin) VALUES ('DISPONIBLE DESDE', '%s', '%s')",
strtoupper($_POST['matricula']), cambiaf_a_mysql($_POST['fecha']), cambiaf_a_mysql($_POST['fecha']));
mysql_query($query_consulta,$conexion);*/



print '<script language="JavaScript">';
print 'alert("Role added successfuly");';
print '</script>';
$url = $_SERVER['HTTP_REFERER'];
echo "<SCRIPT>window.location='$url';</SCRIPT>";
}
} else {

//echo "Ha habido un error al rellenar el formulario: $error";
print '<script language="JavaScript">';
switch ($error) {
case 2:
print 'alert("For ROLE is compulsory to type a ROLE NAME");';
break;
case 21:
print 'alert("ROLE NAME must have 30 characters at most.");';
break;
case 3:
print 'alert("For ROLE is compulsory to type a ROLE DESCRIPTION.");';
break;
case 41:
print 'alert("ROLE DESCRIPTION must have 70 characters at most.");';
break;
default:
print 'alert("Data format is not valid, please try again following the formats.");';
}
print '</script>';
$url = $_SERVER['HTTP_REFERER'];
echo "<SCRIPT>window.location='$url';</SCRIPT>";

}

//Cierra la conexion con la base de datos
mysql_close();

}

?>

<form NAME="add_role" METHOD="post" ACTION="AgregarRol.php">
<ul>
<li>Role name: <input type="text" name="nombre" size="30" MAXLENGTH="30"> <font face="Verdana" color="#000000" size="0.5" value="<?php if (isset($_SESSION['nombre'])){echo $_SESSION['nombre'];} ?>">(Format: Alphanumeric, 30 characters maximum)</font></li>
<br>
<li>Description: <input type="text" name="descripcion" size="70" MAXLENGTH="70"> <font face="Verdana" color="#000000" size="0.5" value="<?php if (isset($_SESSION['descripcion'])){ echo $_SESSION['descripcion'];} ?>">(Format: Alphanumeric, 70 characters maximum)</font></li>
<br>
<p style="text-align: left;">
<input type="submit" value="Add new role" name="enviar">
<input type="button" value="Go Back" onClick="javascript:history.go(-1)">
</p>
</UL>
</FORM>
<button onClick="opcion();">
Reset Values
</button>
</BODY>
</HTML>
  #2 (permalink)  
Antiguo 16/12/2010, 09:51
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 9 meses
Puntos: 35
Respuesta: Ayuda para conservar datos en un formulario tras error

El session_start(); debe ir al comienzo de todo el script!
__________________
I am Doyle please insert code.
  #3 (permalink)  
Antiguo 16/12/2010, 11:57
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ayuda para conservar datos en un formulario tras error

He introducido una parte de php al principio:

<?php
session_start();
?>

antes del código HTML que tengo y me sigue saliendo el warning:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\ProyectoAgil\AgregarRol.php:9) in C:\xampp\htdocs\ProyectoAgil\AgregarRol.php on line 10

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\ProyectoAgil\AgregarRol.php:9) in C:\xampp\htdocs\ProyectoAgil\AgregarRol.php on line 10

la linea 10 es donde he colocado dicho fragmento de código php.

Muchas gracias por contestar y perdón por mi ignorancia!! es posible que sea un error bastante tonto pero sigo atascado con ello.

Gracias de nuevo!
  #4 (permalink)  
Antiguo 16/12/2010, 12:00
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Ayuda para conservar datos en un formulario tras error

asi como dice doylelives quedaria:

Cita:
<?php session_start() ?>
<html>
.
.
.
.
  #5 (permalink)  
Antiguo 16/12/2010, 12:06
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ayuda para conservar datos en un formulario tras error

He probado eso mismo y me sigue saliendo el warning y no me conserva los datos....

Gracias!
  #6 (permalink)  
Antiguo 16/12/2010, 13:58
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Ayuda para conservar datos en un formulario tras error

solo debe haber 1 session_start() en tu documento... asi lo tienes?
  #7 (permalink)  
Antiguo 18/12/2010, 04:17
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ayuda para conservar datos en un formulario tras error

Si, efectivamente, tengo sólo el session_start():

<?
session_start();
?>

que lo tengo puesto al principio antes del código html y otra parte de php para el manejo de la inserción de los datos del formulario en la base de datos....

Etiquetas: conservar, tras, formulario
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 15:54.