| |||
Problema con sesiones Hola, resulta que estoy trabajando en un sitio con sesiones y tengo un formulario que al darle a un botón, busca en una base de datos y el resultado lo mete en un campo select. Bueno pues resulta que al darle, me cambia el valor de una variable de sesión. ¿Qué puede pasar ahí? |
| |||
Re: Problema con sesiones En este fichero (llamado colegiados.php), al darle al enlace "volver atras", se me desconecta de la sesión y no se porqué <?php include_once ('config.php'); include_once ('funciones.php'); include_once ("config_bbdd.php"); //formo el enlace para volver atrás $pos=strripos ($_SERVER['REQUEST_URI'], 'colegiado='); $enlace_atras=substr ($_SERVER['REQUEST_URI'], 0, $pos-1); $dureza=1; $mensaje1="Colegiados/Listado de colegiados por provincias"; $mensaje2="Esta sección recoge un listado de todos los colegiados por provincias de Andalucía."; $tabla=$tabla_colegiados; $campos_busqueda=$campos_busqueda_colegiados; $campos_busqueda_detalle=$campos_busqueda_colegiad os_detalle; echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Colegío Profesional de Podólogos de Andalucía</title> <link href="estilos.css" rel="stylesheet" type="text/css" /> </head> <body> <div align="left"> <table width="617" height="330" border="0"> <!--DWLayoutTable--> <tr> <td width="611"> <div align="left"> <table width="609" height="324" border="0"> <tr> <td height="21" bgcolor="#FFFFFF"><img src="img/titulo-el-colegio.jpg" alt="El colegio" width="605" height="42" /></td> </tr> <tr> <td height="73" bgcolor="#FFFFFF"><table width="590" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="19" class="Estilo6"><div align="justify" class="Estilo8">'.$mensaje1.'</div></td> </tr> <tr>'; if ((!isset ($_SESSION['num_colegiado'])) || (!isset($_SESSION['usuario']))) echo '<table><tr><td align="center" class="texto_destacado">Lo sentimos, pero esta sección sólo es para colegiados</td></tr></table>'; else{ if (isset($_POST['enviar_correo'])){ envia_correo ($_POST['correoe'], "Correo desde la web de colegiopodologos.org", $_POST['consulta']); echo '<td class="texto_destacado">Mensaje enviado</td></tr><tr><td class="texto_destacado"><a href="'.$enlace_atras.'">Volver atrás</a></td></tr>'; } //si entra aquí es porque se pinchó en un enlace para ver más información sobre un colegiado if (isset($_GET['colegiado'])){ echo '<tr> <td> <table width="426" border="0" align="center"> <form name="envio_correo" action="'.$_SERVER["REQUEST_URI"].'" method="post">'; $argumentos=array('colegiado'=>$_GET['colegiado']); $detalle=busqueda ($argumentos, $tabla, $campos_busqueda_detalle, $dureza, 1); while (list ($num_colegiado, $colegiado)=each($detalle)){ while (list ($llave, $valor)=each ($colegiado)) echo "<tr> <td bgcolor=\"#EAEAEA\" class=\"textos\">".strtoupper ($llave)."</td> <td colspan=\"2\" bgcolor=\"#EAEAEA\" class=\"Estilo8\">$valor</span></td> <input type=\"hidden\" name=\"$llave\" value=\"$valor\" /> </tr>"; } echo '<tr> <td colspan="3" bgcolor="#EAEAEA" class="textos">Mandar un correo-e: </td> </tr> <tr> <td colspan="3" bgcolor="#FFFFFF" class="textos"><label> <textarea name="consulta" cols="65"></textarea> </label></td> </tr> <tr> <td colspan="3" bgcolor="#EAEAEA" class="textos"><label> <div align="center"> <input type="submit" name="enviar_correo" value="Enviar" /> </div> </label></td> </tr> <tr> <td colspan="2" rowspan="2" bgcolor="#FFFFFF"> </td> <td bgcolor="#FFFFFF"><div align="right"><a href="'.$enlace_atras.'">Volver atrás </div></td> </tr> <tr> <td bgcolor="#FFFFFF"><div align="right"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="88" height="17" title="boton volver"> <param name="movie" value="boton volver compra.swf" /> <param name="quality" value="high" /> <embed src="boton volver compra.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="88" height="17"></embed> </object> </div></td> </tr> </form></table></td> </tr> </table> </td> </tr> </table> </div></td> </tr> </table> </div> </body>'; //si entra aquí es porque vamos a ver la información básica y el buscador de colegiados }else{ echo '<td height="21" class="textos">'.$mensaje2.'</td> </tr> <table width="580" border="0"> <form name="buscar_colegiado" method="post" action="'.$_SERVER['PHP_SELF'].'"> <tr> <td colspan="3" class="textos">Busqueda de colegiados: </td> </tr> <tr> <td bgcolor="#EAEAEA" class="textos">Provincia: <label> <select name="provincia" id="provincia"> <option value="">Cualquiera</option> <option>Almería</option> <option>Cádiz</option> <option>Granada</option> <option>Málaga</option> <option>Huelva</option> <option>Sevilla</option> <option>Córdoba</option> </select> </label></td> <td bgcolor="#EAEAEA" class="textos">Población: <input name="población" type="text" id="población" size="25" /></td> <td bgcolor="#EAEAEA" class="textos">Estado <select name="estado" id="estado"> <option value="">Cualquiera</option> <option>De baja</option> <option>Ejerciente</option> <option>Inactivo</option> <option>Jubilado</option> </select></td> </tr> <tr> <td colspan="3"><div align="center"> <input name="buscar_colegiados" type="submit" id="buscar_colegiados" value="Buscar" /> </div></td> </tr> </form> </table>'; //formo la matriz de argumentos $argumentos=array('provincia'=>@$_REQUEST['provincia'], 'población'=>@$_REQUEST['población'], 'estado'=>@$_REQUEST['estado']); //realizo la búsqueda @$resultado=busqueda ($argumentos, $tabla, $campos_busqueda, $dureza); //obtengo el número de registros que devuelve la consulta $total_resultados=count($resultado); //si hay información que mostrar.... if ($total_resultados>0){ //imprimo cabeceras de tablas $aux=array_values ($campos_busqueda); //obtengo los nombres de los campos echo '<tr> <td> <table width="589" border="0"><tr>'; while (list (, $valor)= each ($aux)) //los voy recorriendo para dibujarlos como cabecera de columna echo "<td bgcolor=\"#EBEBEB\" class=\"Estilo13\">".strtoupper($valor)."</td>"; echo '</tr>'; //¿hace falta paginar? if ($total_resultados>$resultados_por_pagina){ if (!isset ($_GET['pagina'])) //obtengo las clínicas correspondientes a la página 1 $resultado=busqueda ($argumentos, $tabla, $campos_busqueda, $dureza, 1); else //obtengo las clínicas correspondientes a la página que el usuario haya pulsado $resultado=busqueda ($argumentos, $tabla, $campos_busqueda, $dureza, $_GET['pagina']); } //imprimo el resultado de la búsqueda while (list ($indice, $matriz)=each($resultado)){ echo '<tr>'; $aux=array_values($matriz); while (list (, $valor)= each ($aux)) echo "<td class=\"Estilo8\"><a href=\"$enlace\">$valor</a></td>"; echo '</tr>'; //si la url ya tiene argumentos, hay que añadir la info sobre el colegiado con un & y si no, con un ? (al ser el primer parámetro) if (stripos($_SERVER["REQUEST_URI"], "?")) $enlace=$_SERVER["REQUEST_URI"]."&colegiado=".$_SESSION['num_colegiado']; else $enlace=$_SERVER["REQUEST_URI"]."?colegiado=".$_SESSION['num_colegiado']; echo "<td class=\"Estilo8\"><a href=\"$enlace\">$valor</a></td>"; } //formo el valor de los parámetros (el de página depende del bucle que se hará más adelante) //recojo el valor de los parámetros para volver a repetir la consulta $enlace_paginacion=$_SERVER['PHP_SELF']."?provincia=".@$_REQUEST['provincia']."&población=".@$_REQUEST['población']."&estado=".@$_REQUEST['estado']."&pagina="; paginar ($total_resultados, $enlace_paginacion); }else //si no hay nada que mostrar... echo "<tr><td class=\"texto_destacado\">Lo sentimos, no hay resultados con esas características</td></tr>"; echo '<tr> <td colspan="8" bgcolor="#FFFFFF"><div align="right"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="88" height="17" title="boton volver al menu"> <param name="movie" value="boton volver.swf" /> <param name="quality" value="high" /> <embed src="boton volver.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="88" height="17"></embed> .... Última edición por aviana; 01/10/2007 a las 08:24 |
| |||
Re: Problema con sesiones En este otro fichero, llamado cambiar_datos_personales.php, (El anterior es colegiados.php), al darle a buscar clínicas, la variable de sesión num_colegiado cambia de valor: <?php include_once ('config.php'); include_once ('config_bbdd.php'); include_once ('funciones.php'); echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Colegío Profesional de Podólogos de Andalucía</title> <link href="estilos.css" rel="stylesheet" type="text/css" /> </head> <body>'; if ((!isset ($_SESSION['num_colegiado'])) || (!isset($_SESSION['usuario']))) echo '<table><tr><td align="center" class="texto_destacado">Lo sentimos, pero esta sección sólo es para colegiados</td></tr></table>'; else{ echo $_SESSION['num_colegiado']; //Si el colegiado ha pinchado en guardar cambios... if (isset($_POST['guardar_cambios'])){ //comprobación de si ha rellenado los campos de cambio de clave if (@$_POST['nueva_clave']!=@$_POST['clave_repetida']) echo '<table width="617" border="0"> <tr><td class="texto_destacado">Error, las claves no coinciden</td></tr></table>'; else if (@$_POST['usuario']=="") echo '<table width="617" border="0"> <tr><td class="texto_destacado">Error, el usuario no puede estar vacío</td></tr></table>'; else{ $consulta="update colegiado set usuario='".$_POST['usuario']."', clave='".$_POST['nueva_clave']."', nombre='".$_POST['nombre']."', apellidos='".$_POST['apellidos']."', población='".$_POST['población']."', provincia='".$_POST['provincia']."', teléfono1='".$_POST['teléfono1']."', correoe='".$_POST['correoe']."', estado='".$_POST['estado']."' where colegiado='".$_SESSION['num_colegiado']."'"; mysql_query ($consulta) or vuelca_error ($fichero_registro, 'Error en '.$_SERVER['PHP_SELF'].' al hacer la consulta: '.$consulta.'. El error fue: '.mysql_error().'<br>'); $consulta="insert into ejerce values ('".$_SESSION['num_colegiado']."', '".$_POST['clínica']."')"; mysql_query ($consulta) or vuelca_error ($fichero_registro, 'Error en '.$_SERVER['PHP_SELF'].' al hacer la consulta: '.$consulta.'. El error fue: '.mysql_error().'<br>'); echo '<table width="617" border="0"> <tr><td class="texto_destacado">Datos modificados correctamente</td></tr></table>'; } } echo '<div align="left"> <form name="guardar_cambios_personales" action="'.$_SERVER['PHP_SELF'].'" method="post"> <table width="617" height="330" border="0"> <!--DWLayoutTable--> <tr> <td width="611"> <div align="left"> <table width="609" height="324" border="0"> <tr> <td height="21" bgcolor="#FFFFFF"><img src="img/titulo-el-colegio.jpg" alt="El colegio" width="605" height="42" /></td> </tr> <tr> <td height="73" bgcolor="#FFFFFF"><table width="590" height="124" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="590" class="Estilo6"><div align="justify" class="Estilo8">Colegiados/Modificar datos personales </div></td> </tr> <tr> <td height="5" class="Estilo6"><div align="justify" class="Estilo9">En esta sección los colegiados pueden cambiar sus datos personales : </div></td> </tr> <tr> <td class="Estilo6"><table width="590" border="0"> <tr> <td colspan="2" bgcolor="#EBEBEB" class="textos">Datos personales: </td> <td colspan="4" bgcolor="#EBEBEB" class="textos"> </td> </tr>'; //parte de datos personales del colegiado //la idea es que cada campo que esté en la bbdd, aparezca relleno //formo la matriz de argumentos y hago la búsqueda $argumentos=array('colegiado'=>$_SESSION['num_colegiado']); $detalle=@busqueda ($argumentos, $tabla_colegiados, $campos_busqueda_colegiados_detalle, 1); //como sólo hay un resultado, no hace falta un bucle while list ($num_colegiado, $colegiado)=each($detalle); print_r ($colegiado); for ($i=1; $i<(count($colegiado)/2)-1; $i++){ echo '<tr>'; for ($j=0; $j<2; $j++){ list ($llave, $valor)=each ($colegiado); echo '<td class="Estilo10">'.$llave.'</td>'; //si el usuario ha rellenado los campos y hay recarga de página, que no los pierda if (isset ($_POST[$llave])) echo '<td class="textos"><input name="'.$llave.'" type="text" value="'.$_POST[$llave].'" id="'.$llave.'" size="30" /></td>'; else echo '<td class="textos"><input name="'.$llave.'" type="text" value="'.$valor.'" id="'.$llave.'" size="30" /></td>'; } echo '</tr>'; } //los 2 últimos valores no se pueden listar dentro del bucle porque el último es un campo de selección list ($llave, $valor)=each ($colegiado); echo '<td class="Estilo10">'.$llave.'</td>'; //si el usuario ha rellenado los campos y hay recarga de página, que no los pierda if (isset ($_POST[$llave])) echo '<td class="textos"><input name="'.$llave.'" type="text" value="'.$_POST[$llave].'" id="'.$llave.'" size="30" /></td>'; else echo '<td class="textos"><input name="'.$llave.'" type="text" value="'.$valor.'" id="'.$llave.'" size="30" /></td>'; //campo de selección "Estado" list ($llave, $valor)=each ($colegiado); echo '<td class="Estilo10">'.$llave.'</td> <td class="textos"><select name="'.$llave.'" id="'.$llave.'" />'; //el siguiente switch es para que aparezca seleccionado el estado del colegiado switch ($_POST['estado']){ case 'de baja': echo '<option value="NULL">Elija uno</option> <option value="de baja" selected>De baja</option> <option value="ejerciente">Ejerciente</opton> <option value="inactivo">Inactivo</option> <option value="jubilado">Jubilado</option> </select> </td>'; break; case 'ejerciente': echo '<option value="NULL">Elija uno</option> <option value="de baja">De baja</option> <option value="ejerciente" selected>Ejerciente</opton> <option value="inactivo">Inactivo</option> <option value="jubilado">Jubilado</option> </select>'; break; case 'inactivo': echo '<option value="NULL">Elija uno</option> <option value="de baja" selected>De baja</option> <option value="ejerciente">Ejerciente</opton> <option value="inactivo" selected>Inactivo</option> <option value="jubilado">Jubilado</option> </select>'; break; case 'jubilado': echo '<option value="NULL">Elija uno</option> <option value="de baja" selected>De baja</option> <option value="ejerciente">Ejerciente</opton> <option value="inactivo">Inactivo</option> <option value="jubilado" selected>Jubilado</option> </select>'; break; default: echo '<option value="NULL" selected>Elija uno</option> <option value="de baja">De baja</option> <option value="ejerciente">Ejerciente</opton> <option value="inactivo">Inactivo</option> <option value="jubilado">Jubilado</option> </select>'; break; } echo '<tr> <td class="Estilo10">Nueva clave</td> <td class="textos"><input name="nueva_clave" type="password" id="nueva_clave" size="30" /></td> <td class="Estilo10">Repita la clave nueva</td> <td class="textos"><input name="clave_repetida" type="password" id="clave_repetida" size="30" /></td> </tr> <tr> <td colspan="6" bgcolor="#EBEBEB" class="Estilo10"><span class="textos">Datos de las clínicas donde ha ejercido</span></td> </tr>'; /*parte donde se muestran las clínicas donde ha trabajado. No se puede usar la función busqueda porque ésta sólo realiza búsquedas simples y en este caso, hay que buscar en dos tablas*/ $consulta="select id_clínica, dirección, cp, localidad, provincia, teléfono from clinica where id_clínica in (select id_clínica from ejerce where num_colegiado='".$_SESSION['num_colegiado']."')"; $aux=mysql_query($consulta) or vuelca_error ($fichero_registro, 'Error en '.$_SERVER['PHP_SELF'].' al hacer la consulta: '.$consulta.'. El error fue: '.mysql_error().'<br>'); $k=0; //recorro cada consulta while ($resultado=mysql_fetch_assoc($aux)){ echo '<tr><td colspan="4" bgcolor="#EBEBEB" class="Estilo10">Clínica '.++$k.'</td></tr>'; //para sacar los resultados en varias filas y 2 columnas for ($i=0; $i<(count($resultado)/2); $i++){ echo '<tr>'; for ($j=0; $j<2; $j++){ //obtengo la clave y el valor de cada campo de cada clínica list ($llave, $valor)=each ($resultado); echo '<td class="Estilo10">'.$llave.'</td> <td class="textos"><input name="'.$llave.'_clínica" type="text" value="'.$valor.'" id="'.$llave.'_clínica" readonly size="30" /></td>'; } } } echo '</td></tr> <tr> <td colspan="6" bgcolor="#EBEBEB" class="Estilo10"><span class="textos">Registrar un nuevo trabajo en una Clínica</span></td> </tr> <tr> <td class="Estilo10">Provincia</td> <td class="textos"><select name="provincia_nueva_clínica" id="select">'; //lo siguiente es para que al darle a buscar, ponga en el campo de selección la última provincia seleccionada |
| |||
Re: Problema con sesiones switch (@$_POST['provincia_nueva_clínica']){ case 'Almería': echo '<option value="Almería" selected>Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Cádiz': echo '<option value="Almería">Almería</option> <option value="Cádiz" selected>Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Córdoba': echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba" selected>Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Granada': echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada" selected>Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Huelva': echo '<option value="Almería">Almería</option> <option value="Cádiz" selected>Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva" selected>Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Jaén': echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén" selected>Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Málaga': echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga" selected>Málaga</option> <option value="Sevilla">Sevilla</option>'; break; case 'Sevilla': echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla" selected>Sevilla</option>'; break; default: echo '<option value="Almería">Almería</option> <option value="Cádiz">Cádiz</option> <option value="Córdoba">Córdoba</option> <option value="Granada">Granada</option> <option value="Huelva">Huelva</option> <option value="Jaén">Jaén</option> <option value="Málaga">Málaga</option> <option value="Sevilla">Sevilla</option>'; break; } echo '</select></td> <td colspan="2"><input name="buscar_clinicas" type="submit" id="buscar_clinicas" value="Buscar clínicas" /></td> </tr>'; /*lo siguiente es para sacar el listado de clínicas de una provincia para que el usuario seleccione una y para hacer que la que haya elegido no se pierda si al darle a buscar cambios hay un error con la clave*/ if ((isset($_POST['guardar_cambios'])) || (isset($_POST['buscar_clinicas']))){ //formación de la matriz de criterios $argumentos=array ("provincia"=>$_POST['provincia_nueva_clínica']); //hago la búsquda $detalle=@busqueda ($argumentos, $tabla_clinicas, $campos_busqueda_clinicas, 1); //si la búsqueda ha devuelto resultados... if ((count($detalle))>0){ echo '<tr><td class="Estilo10">Clínica</td><td colspan="3" class="textos"><select name="clínica" id="clínica">'; //recorro la matriz de resultados while (list ($llave, $valor)=each($detalle)){ //junto en una cadena los valores de la matriz (no las llaves) $cadena=implode ("---", array_values($valor)); //y la imprimo en un campo de selección if ($_POST['clínica']==$valor['id_clínica']) echo '<option value="'.$valor['id_clínica'].'" selected>'.$cadena.'</option>'; else echo '<option value="'.$valor['id_clínica'].'">'.$cadena.'</option>'; } echo '</select></td></tr>'; } } echo ' <tr> <td colspan="6" bgcolor="#EBEBEB" class="Estilo10"><label></label> <div align="center"> <input type="submit" name="guardar_cambios" value="Guardar cambios" /> </div></td> </tr> </table></td> </tr> <tr> <td><div align="right"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="88" height="17" title="boton volver al menu"> <param name="movie" value="boton volver.swf" /> <param name="quality" value="high" /> <embed src="boton volver.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="88" height="17"></embed> </object> </div></td> </tr> </table> </td> </tr> </table> </div> </td> </tr> </table></form> </div> </body> </html>'; } ?> |