Ver Mensaje Individual
  #13 (permalink)  
Antiguo 15/12/2006, 06:49
Avatar de Javiglez
Javiglez
 
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: otra opción a las sesiones

Gracias avlin por tu ayuda, te lo voy a poner todo y mas o menos la idea que tengo para que veas lo que quiero hacer y el sistema y tal. Es un sistema para gestionar clientes y los documentos de esos clientes....el sistema lo maneja un adminsitrador que mediante su sesion dara de alta clientes documentos etc..luego los clientes una vez dados de alta se loguearan en la zona clientes y accederan a su propia sesion...
Bien el sistema de base de datos es este muy sencillo, creo las tablas y creo ya el administrador por defecto insertando datos en la tabla admin...
Código PHP:
$sql "CREATE TABLE Clientes ( 
dni VARCHAR (9) NOT NULL,
nombre VARCHAR (100) NOT NULL,
apellido1 VARCHAR (100) NOT NULL,
apellido2 VARCHAR (100) NOT NULL,
direccion VARCHAR (200) NOT NULL,
telefono INT (9) NOT NULL,
mail VARCHAR (50) NOT NULL,
login VARCHAR (100) NOT NULL,
pass  VARCHAR (100) NOT NULL,
pass2  VARCHAR (100) NOT NULL,
PRIMARY KEY (dni)
) TYPE = INNODB;"


//--------------------------------------------------------------------------------

$sql "CREATE TABLE Expedientes (
expediente INT (20) NOT NULL AUTO_INCREMENT,
nombre VARCHAR (50) NOT NULL,
fecha VARCHAR (20) NOT NULL,
direccion VARCHAR (200) NOT NULL,
dni VARCHAR (9) NOT NULL,
PRIMARY KEY (expediente),
INDEX (dni),
FOREIGN KEY (dni) REFERENCES Clientes(dni) 
) TYPE = INNODB;"
;
      
//----------------------------------------------------------------------------------------

$sql "CREATE TABLE Documentos(
id_documento VARCHAR (40) NOT NULL,
tipo VARCHAR (20) NOT NULL,
nombre VARCHAR (50) NOT NULL,
expediente INT (20) NOT NULL,
comentario VARCHAR (255),
PRIMARY KEY (id_documento),
INDEX (expediente),
FOREIGN KEY (expediente) REFERENCES Expedientes(expediente) 
) TYPE = INNODB;"
;
     
//-----------------------------------------------------------------------------------------
                    
      
$sql "CREATE TABLE Admin(

login VARCHAR (50) NOT NULL,
id int(11) NOT NULL,
pass VARCHAR (50) NOT NULL,
pass2 VARCHAR (50) NOT NULL,
mail VARCHAR (100) NOT NULL,
PRIMARY KEY (login)
) TYPE = INNODB;"
;           
 
//administrador por defecto
     
$sql "INSERT INTO Admin (login,pass,pass2,mail)
 VALUES ("

$sql .= "'****'"
$sql .= ",'****'"
$sql .= ",'****'";
$sql .= ",'****@******'"

$sql .= ")"
mysql_query($sql);     
?> 
Bien ahora ire al index de la aplicación que es donde pongo el administrador por defecto que he insertado al crear las tablas y me logueo. y hasta ahi bien, es un simple formulario donde paso a otra pagina los valores que meto con el metodo POST a ingresar_admin.php

index.html
Código:
<form id="form1" method="post" action="ingresar_admin.php">	
<fieldset class="clase1">
<legend>Identificaci&oacute;n</legend>
<label for="login">Login</label><input type="text" name="login" id="login" /><br />
<label for="pass">Password</label><input type="password" name="pass" id="pass" /><br />
</fieldset>
<fieldset class="clase1">
<legend>Acciones</legend>
<INPUT TYPE="submit" NAME="accion"  VALUE="Aceptar" > 
</fieldset>
</form>
Bien en esta clase ingresar_admin es donde recojo esos datos y donde establezco las odiosas cookiees y donde ya me da warnings al establecerlas (lo marco en negrita)...
ingresar_admin.php
Código PHP:
<?php 
ob_start
();
include(
"../conectarse_bd.php"); 
//$link=Conectarse(); 
function quitar($mensaje

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","&#92",$mensaje); 
return 
$mensaje

if(
trim($HTTP_POST_VARS["login"]) != "" && trim($HTTP_POST_VARS["pass"]) != ""

/*Asi que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle el html, 
apostrofe comillas y demas al nick y password enviados por el usuario para su comprobacion 
con la base de datos, para ello utilizamos la funcion quitar($mensaje) que explicamos antes, 
y guardamos las nuevas cadenas en dos nuevas variables:*/ 
$nickN quitar($HTTP_POST_VARS["login"]); 
$passN quitar($HTTP_POST_VARS["pass"]); 
/*Ahora ejecutamos una instruccion sql, en la cual le pedimos a la base de da
tos que de la tabla usuarios nos devuelva la fila cuyo nick corresponda por 
el enviado por el usuario: */
$result mysql_query("SELECT pass FROM Admin WHERE login='$nickN'"); 
if(
$row mysql_fetch_array($result)) 

/*Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos ahora 
debemos comprobar que el password sea correcto, para ello hacemos una simple comparacion, si 
es correcto continuamos de lo contrario mostramos el mensaje de password incorrecto: */
if($row["pass"] == $passN

//90 dias dura la cookie 
/*Ahora suponiendo que el password es correcto continuamos y lo proximo a hacer es establecer las 
cookies de nick y password (Las cuales nombramos "usNick"/"usPass" y contienen el nick y password
respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login
y lo enviamos a la pagina principal
*/
[B]setcookie("usNick",$nickN,time()+7776000); 
setcookie("usPass",$passN,time()+7776000);  [/B]
ob_end_flush();
?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "panel_admin.php"; 
</SCRIPT> 
<? 

else 

?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 


else
    {
?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 
    
}
mysql_free_result($result); 

else 

?> 
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<?  

mysql_close(); 
?>
En ingresar_admin incluyo conectarse_bd que es esta

Código PHP:
<?php
//Funcion que se conecta a la base de datos
function Conectarse()
{
    if (!(
$link=mysql_connect("server""base""pass")))
    {
        echo 
"Error conectando a la base de datos.";
        exit();
    }
    if (!
mysql_select_db("base",$link))
    {
        echo 
"Error de  la base de datos.";
        exit();
    }
    return 
$link;
}
$link=Conectarse();
//mysql_close($link); //cierra la conexion
?>
y por ultimo si todo esta bien si has puesto el administrador por defecto bien te manda a panel_admin pero si reconocerte en la sesión.... ademas de incluir conectarse_bd.php incluyo login_admin.php que es donde valido....no se si sera muy enrevesado..

Este es panel_admin.php
Código PHP:
<?php 
include("../conectarse_bd.php");
include(
"../login_admin.php"); 

?>
<div id="Contenedor">
<div id="Capa_titulo">
<div id="logo" onclick="location='../index.html'" title="Inicio" ></div> 
</div>
<div id="Capa_panel">

  <div align="center">
    <p>
<?php 
$result 
mysql_query("SELECT * FROM Admin WHERE login='".$HTTP_COOKIE_VARS["usNick"]."' AND pass='".$HTTP_COOKIE_VARS["usPass"]."'");
while(
$row mysql_fetch_array($result)) {
        
printf("<tr><td><td>  %s</td><td><td>  %s </td><td> </tr>"$row["nombre"],$row["apellido1"], $row["apellido2"]);
    }
if(
$loginCorrecto


echo 
"<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold; float:right;'  > Bienvenido Administrador $nickUsuarioL </p>";

else 

echo 
"Bienvenido visitante, el sistema no te ha reconocido, sino te autentificas no podras realizar ninguna de las funciones"
//falla
//header("Location: index.html"); 

?>
y login_admin.php que es este..
Código PHP:
<?php 
/*Guardar datos Administrador */
$loginCorrecto false

$nickUsuarioL
$emailUsuarioL
$nombreUsuarioL
/*Copmprobaciono cookies" : */

if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"])) 


session_start(); 
$_SESSION["autentificado"]= "SI"

 


/*resultado de nick y pass guardado por las cookies */

$result mysql_query("SELECT * FROM Admin WHERE login='".$HTTP_COOKIE_VARS["usNick"]."' AND pass='".$HTTP_COOKIE_VARS["usPass"]."'"); 



if(
$row mysql_fetch_array($result)) 


/*si los datos son correctos se actualizan las cookiees caducan a los 90 dias*/ 
 
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000); 
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000); 
$loginCorrecto true

$nickUsuarioL $row["login"];  
$emailUsuarioL $row["mail"]; 
}

else 

//Destruimos las cookies.
setcookie("usNick","x",time()-3600); 
setcookie("usPass","x",time()-3600); 

mysql_free_result($result); 


?>
Pues eso es todo, no se si sera muy enrevesadoy fijo que se puede simplificar y algo hago mal al establecer las cookies, seguro que se puede hacer mas sencillo, espero que hayais entendido la idea de lo que quiero para poder ayudarme, Gracias y perdonad por el tocho pero aqui esta todo