Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/12/2010, 06:41
danipalen
 
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>