Comunidad de diseño web y desarrollo en internet online

datos pegados cuando actualizo

Citar            
MensajeEscrito el 04 Oct 2011 03:19 pm
cada ves que actualizo el formulario index.php los datos previos ingresados como nombre apellidos etc, no se limpian de los textbox
see-datos.php
<?php
//iniciamos la sesion
session_start();
//guardamos los valores que fueron enviados por el formulario en variables de sesion
$_SESSION['A'] = $_POST['campo1'];
$_SESSION['B'] = $_POST['campo2'];
$_SESSION['C'] = $_POST['campo3'];
$_SESSION['D'] = $_POST['campo4'];
$_SESSION['E'] = $_POST[campo5];
header ("Location: insertarpais.php");
?>

index.php
...
value="<?php if (isset($_SESSION['A'])){ echo $_SESSION['A']; } ?>"
...

el inserta_pais.php tiene un insert para la tabla de la BD solamente

Por angelo27

Claber

136 de clabLevel



 

msie8
Citar            
MensajeEscrito el 04 Oct 2011 06:50 pm
cuando dejes de necesitar los datos, vacia las variables de session

puedes hacer $_SESSION = array() si no tienes mas variables de sesion a parte de las del formulario. o vaciarlas una a una si almacenas otros datos en el el array $_SESSION
yo te recomendaría que todas las variables del formulario las metieses en un mismo array dentro de $_SESSION por ejemplo

$_SESSION['form']['a'] , $_SESSION['form']['b'], ...
y de esta forma cuando no vuelvas a necesitarlas solo tienes que hacer

$_SESSION['form'] = array(); y eliminaras el contenido

saludos.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 01:28 am
ok Bray puedes explicar mas

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 10:21 am
Estas almacenando los datos en las variables de $_SESSION['a'], $_SESSION['b'],....
cuando actualizas el formulario, el script lee estas variables para rellenar los campos, pero estas variables no eliminan hasta que la sesion se cierra o se limpia el historial del navegador, (al limpiar el historial tampoco se eliminan las variables ya que se almacenan en el servidor, lo unico que se hace es cambiar la id de session del usuario y asignar otras variables)

El script no sabe por si solo cuando debe ignorar o eliminar el contenido de las variables asi que debes indicarselo tu. Una vez el formulario es enviado puedes eliminar el contenido de las variables.

si en el array $_SESSION no almacenas nada mas que las variables del formulario, entonces puedes hacer $_SESSION = array() para vaciar el contenido, de esta forma al leer las variables para rellenar los campos del formulario, estaran vacias.

Pero esto no te lo recomiendo porque si agregas al formulario otras variables , por ejemplo para controlar el login de un usuario y no recuerdas cambiar esa linea, entonces la sesion tambien se cerrara al enviar el formulario, para evitar eso tienes dos opciones

1 eliminar una a una las variables que usas en el formulario
unset($_SESSION['a'])
unset($_SESSION['b'])

Nota: NUNCA se hace unset($_SESSION) para eliminar todas las variables, en su lugar se utiliza session_destroy()

2 lo que yo haria es, o bien cambiar el array $_SESSION por el array $_COOKIE y eliminar los valores mediante $_COOKIE = array() que asignara valores vacios a todos los campos o bien en lugar de almacenar separadas las variables , en $_SESSION
como $_SESSION['a']
$_SESSION['b']....

yo crearia un array dentro del propio session con el nombre form, y ahi almacenaria las variables
$_SESSION['form']['a']
$_SESSION['form']['b']

de esta forma para eliminarlas todas si puedes hacer $_SESSION['form'] = array() puesto que aqui solo eliminas las variables dentro del array form y no afecta el resto de variables de $_SESSION.


Ademas es conveniente tener presente la diferencia entre variables de sesion $_SESSION y las cookies $_COOKIE. Las variables de sesion se almacenan en el servidor y utilizan sólo 1 cookie que se almacena en el navegador del usuario con el identificador de sesion. Las cookies se almacenan en el ordenador del usuario, por lo que cuando la informacion de un formulario no contiene datos demasiado importantes como puede ser numeros de tarjeta etc... yo prefiero utilizar cookies y hacer que caduquen en un periodo de tiempo corto, media hora o asi, por si el ordenador desde el que se envia el formulario es publico, evitar que la informacion del usuario que de expuesta

un saludo.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 03:11 pm
para conservar los datos previos en edicion.php (ojo:este form edicion.php viene con los datos ya cargados en los text ) para eso uso db_user(que contiene un select anidado)
<?php
$var_user = $_POST["user"];
...
$sel_user = "SELECT I.*, SS.nombredelpais,C.nombrecorto AS nombre_curso
FROM tabla1 AS I
LEFT JOIN tabla2 AS C ON I.idcampo2 = C.idcampo2
LEFT JOIN tabla3 AS SS ON I.idcampo3 = SS.idcampo3
WHERE I.id_inscrito = '".$var_user."'";

$res_user = mysql_query($sel_user, $link);
$db_user = mysql_fetch_array($res_user);
?>

y en el html lo llamo asi:
....
value="<?php echo $db_user["apellidom"];?>" <?php if ($_SESSION["id_tipousuario"] != 1) echo 'readonly="readonly"' ;?>
...

*********************************
entonces es aqui en edicion.php donde tengo los objetos (text + button + ...) y un boton me lleva a otro form (agregarnuevopais.php) es ai que al volver al form edicion.php cuando los datos ya no estan

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 03:40 pm
yo ahi no veo donde estas usando las variables $_SESSION para conservar los datos del formulario, es mas no veo ni que intentes utilizar lo que te he dicho antes


si tienes un formluario como este que se envia a otro script.

Código HTML :

<form method="post" action="procesar.php">
<input type="text" <?php echo 'value="'.$_SESSION['form']['texto1'].' " '; ?> name ="texto1"/>
<input type="submit" name ="enviar" value="enviar"/>
</form>


en el script procesar.php haces

Código PHP :

 $_SESSION['form']['texto1'] = $_POST['texto1'];
....

if ($procesadoConExito){
   $_SESSION['form'] = array(); // asi borras los datos insertados por el usuario una vez 
                                              // dejan de ser necesarios
}
....

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 03:42 pm
por supuesto es IMPRESCINDIBLE que tanto en el archivo donde tienes el formulario como los archivos que lo procesan indiques en las primeras lineas

session_start()

si no, no se crearan las variables de sesion

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 06:14 pm
index.php:

session_start();
...
<form id="form_a" name="form_a" method="post" action="proceso.php">
...
<td width="50%" align="right" nowrap="nowrap">Nombres <span class="campo_obligatorio">*</span></td>
<td nowrap="nowrap">
<input name="nombres" type="text" id="nombres" size="35" maxlength="35" <?php echo 'value="'.$_SESSION['form_a']['nombres'].' " '; ?> onKeyUp="validar(this)" /> </td>
...
<input type="submit" name="nuevopais" value="Nuevo Pa&iacute;s" />


proceso.php:

<?php
session_start()
$_SESSION['form_a']['r'] = $_POST['rut'];
$_SESSION['form_a']['d'] = $_POST['dv'];
$_SESSION['form_a']['nombre'] = $_POST['nombres'];
$_SESSION['form_a']['apellidopat'] = $_POST['apellidopat'];
$_SESSION['form_a']['apellidomat'] = $_POST['apellidomat'];
$_SESSION['form_a']['ciudad'] = $_POST['ciudad'];
$_SESSION['form_a']['profesion'] = $_POST['profesion'];
$_SESSION['form_a']['cargo'] = $_POST['cargo'];

if ($procesadoConExito){
$_SESSION['form_a'] = array();
}
header ("Location: insertarpais.php");

?>



el resultado es mensajes de Notice por todos lados y una tabla callstrack aparte que muestra los objetos desordenado ,,como corrijo esto

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2011 06:27 pm
El notice probablemente sera porque en un primer momento cuando no se ha introducido nada en el formulario o cuando borras las variables, al buscarlas para insertarlas en el atributo value, la variable no existe y te lo esta indicando

puedes hacer dos cosas, comprobar primero que la variable existe

Código :

if (isset($_SESSION['form']['a']){
$valorCampoA = $_SESSION['form']['a'}



y posteriormente pasar el valor de esa variable al "value" de la etiqueta del campo

o bien
puedes crear un archivo htaccess que elimine los informes de error para que no aparezca el mensaje notice

lo de la tabla call stack eso no se de donde te sale seguramente es algun mensaje de depuracion.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2011 12:54 pm
proceso.php:

<?php
session_start()
isset($_SESSION['form_a']['r']) = $_POST['rut'];
isset($_SESSION['form_a']['d']) = $_POST['dv'];
isset($_SESSION['form_a']['nombre']) = $_POST['nombres'];
isset($_SESSION['form_a']['apellidopat']) = $_POST['apellidopat'];
isset($_SESSION['form_a']['apellidomat']) = $_POST['apellidomat'];
isset($_SESSION['form_a']['ciudad']) = $_POST['ciudad'];
isset($_SESSION['form_a']['profesion']) = $_POST['profesion'];
isset($_SESSION['form_a']['cargo']) = $_POST['cargo'];

if ($procesadoConExito){
isset($_SESSION['form_a']) = array();
}
?>


la figura no a cambiado sigue mostrando Notice por todos lados y una tabla callstrack aparte que muestra los objetos desordenado

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2011 01:43 pm
se borra los datos que ya habia ingresado en index.php cuando doy click en Cancelar>> de insertarpais.php

index.php
...
<form id="form_a" name="form_a" method="post" action="see-data.php">
...
<input name="nombres" type="text" id="nombres" size="35" maxlength="35" value="<?php if (isset($_SESSION['form_a']['nom'])) { echo $_SESSION['form_a']['nom']; } ?>" onKeyUp="validar(this)" />
...
</form>

see-data.php
<?php
$_SESSION['form_a'] = array(
'nom' => $_POST['nombres'],
'campo2' => $_POST['campo2'],
'campo3' => $_POST['campo3'],
);
header ("Location: insertarpais.php");
?>

insertarpais.php
<form name="f1" method="post" action="insertapais.php" onsubmit="return validar()">
...
<input name="boton_volver" type="button" value="Cancelar >>" id="boton_volver" onclick="location.href='index.php'" />
...
</form>

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2011 03:26 pm
cuando programas con php para que recuerde los datos de un formulario lo mejor es que el parámetro value o cualquier otro que contenga codigo php lo coloques en los ultimos lugares para evitar que el servidor se confunda.

prueba a crear un archivo llamado .htaccess con la siguiente linea
php_flag display_errors off

y se dejaran de mostrar TODOS los avisos de error incluidos los notice , pero el codigo debe funcionar aun sin esto

No se lo que quieres decir cuando dices que "aparece una tabla callstack y los objetos desordenados" la call stack es la pila de llamadas del sistema y no debe imprimirse salvo que lo hagas tu especificamente mediante codigo o bien que tengas activado algun depurador . Imagino que los objetos que salen desordenados son los elementos del formulario html pero eso es normal al aparecer mensajes de error. desactivando los mensajes de error te desaparecera ese problema pero el codigo debe funcionar aun con los mensajes de error. es un codigo bastante basico el que te he pasado y estoy seguro de que funciona porque es el codigo que utilice para aprender a conservar las variables.

Comprueba que $procesadoConExito es true en algún momento y que ese momento es cuando ya sabes que no vas a necesitar las variables , y que no se vuelve true cuando das al boton cancelar ya que en tu codigo no veo en ningun momento cuando se hace verdadero.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2011 03:36 pm
por otro lado estas lineas
isset($_SESSION['form_a']['r']) = $_POST['rut'];

no hacen lo que yo te he dicho antes, yo ahi no veo el condicional por ningun lado y de hecho no cero ni que sintacticamente sea correcto ya que isset solo devuelve true o false no se que quieres hacer en ese codigo.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 03:17 am
if ($procesadoConExito){
isset($_SESSION['form_a']) = array();
}
?>

nose que codigo contiene $procesadoConExito

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 08:25 am
amigo, debes entender lo que hacen los códigos, si te limitas a copiarlos y pegarlos te vas a encontrar con un montón de problemas que no sabrás de donde vienen. Si no sabes que código contiene $procesadoconexito es porque te limitaste a pegarlo en tu script y es normal que no funcione ya que si tu no has creado esa variable. la variable sencillamente no existe.

En cuanto a las lineas que te he dicho en mi post anterior:

isset($_SESSION['form_a']['r']) = $_POST['rut'];
isset($_SESSION['form_a']['d']) = $_POST['dv'];
isset($_SESSION['form_a']['nombre']) = $_POST['nombres'];
isset($_SESSION['form_a']['apellidopat']) = $_POST['apellidopat'];
isset($_SESSION['form_a']['apellidomat']) = $_POST['apellidomat'];
isset($_SESSION['form_a']['ciudad']) = $_POST['ciudad'];
isset($_SESSION['form_a']['profesion']) = $_POST['profesion'];
isset($_SESSION['form_a']['cargo']) = $_POST['cargo'];

Estas lineas no hacen lo que tu esperas, incluso deben darte error mira la documentación de la función isset para saber como funciona.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 12:42 pm
isset devuelve el valor false o true solamente el problema es que el codigo solo que me diste me vota mensaje tipo Notice que segun lei no es un error propio sino que tal variable o fue declarada en ese caso le agrego isset ademas estoy con la version PHP 2.2.17 del WAMP y me arroja estos mensajes Notice y en la version php del appserv me corre todo el formulario y los demas sin ningun error ni notice perfecto el sistema,, lamentablemente los otros servicios ya estan en wamp y tengo que adaptarlo ,es eso, e leido que algunas funcionaliades estan obsoletas en esta nueva version.

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 01:01 pm
claro si te lo he dicho antes si no declaraste la variable $procesadoConExito aparecera por primera vez en el if .

no entiendo que uses php 2 cuando php 2 no se usa desde hace 14 años o mas y se esta empezando a usar la version 6 , instala una versión mas reciente del wamp server no te estarás confundiendo de versión? ese wamp debe ser del año 99 por lo menos.

de todas formas las lineas con isset que has puesto no pueden funcionar en ninguna versión de php porque eso no es posible de hacer con un ordenador, no puedes asignar un valor a un valor, porque un valor no tiene dirección de memoria asignada para eso estan las variables, que contienen valores. Por lo tanto un bool (true / false) no puede ser el primer operando de un operador de asignacion (=) "true = $_POST['loquesea'] " es un error sintáctico. la función isset solo sirve para saber si una variable existe o no y no pueden asignarse valores a su salida.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 02:44 pm
perdon es la version es 5.3.5 del php el wamp es 2.1 y el apache 2.2.17 me equivoque

Por angelo27

Claber

136 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Oct 2011 03:05 pm
ahh ok ok, luego pense que tal vez estabas intentando que funcionase en algun ordenador antiguo (de los 90) y que por eso usabas esa version de php.

Bueno, lo que me da la sensación de que estas aprendiendo php o tienes poca experiencia aun (yo tampoco es que tenga mucha) pero que estas intentando avanzar en el aprendizaje con grandes saltos y con algo que puede resultar complejo.

Ahorraras mucho tiempo si paras, revisas tu código por partes (todo el codigo) y las partes en las que tengas dudas , las repasas en la bibliografía , las posteas aqui o revisas la documentación de internet para evitar que errores de programación que puedas tener ahora se vayan sumando y posteriormente se hagan mas difíciles de detectar.

un saludo y suerte

Por bray

65 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.