Hola a todos, como lo prometido es deuda, este es el código más simplificado para acceder a vuestra aplicación web mediante usuario y contraseña.
Con la correspondiente validación de datos y retorno de errores.
En este ejemplo se graba la hora y el día de entrada y salida del usuario.
El código completo de la aplicación y su manual lo podéis descargar desde este enlace CONTABILIDAD COMERCIAL O DOMESTICA EN PHP o este otro enlace.
Espero que os sea útil a todos.
<?php
session_start();
/* Llamamos al archivo con el código Xhtml5. Ojo a la ruta relativa */
require 'Inclu/Inclu_Menu_00.php';
/* Declaramos globales las variables de BBDD.
Antes de la variable, si lo hacemos depués, declaramos global la siguiente, no la anterior.
Llamamos al archivo de variables de conexión y relizamos la conexión.
En caso de error imprime un mensaje. */
global $db;
global $db_name;
require 'Conections/conection.php';
$db = mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if (!$db){ die ("Es imposible conectar con la bbdd ".$db_name."</br>".mysqli_connect_error());
}
///////////////////////////////////////////////////////////////////////////////////////
/* Leemos la bbdd donde conincida el campo usuario y password.
Creamos los objetos mysqli_query y mysqli_fetch_assoc respectivamente.
Generamos las superglobales de sesión. */
$sql = "SELECT * FROM `admin` WHERE `Usuario` = '$_POST[Usuario]' AND `Password` = '$_POST[Password]'";
$q = mysqli_query($db, $sql);
$row = mysqli_fetch_assoc($q);
global $userid;
global $uservisita;
$_SESSION['ID'] = $row['ID'];
$_SESSION['ref'] = $row['ref'];
$_SESSION['Nivel'] = $row['Nivel'];
$_SESSION['Nombre'] = $row['Nombre'];
$_SESSION['Apellidos'] = $row['Apellidos'];
$_SESSION['Email'] = $row['Email'];
$_SESSION['Usuario'] = $row['Usuario'];
$_SESSION['Password'] = $row['Password'];
$_SESSION['Direccion'] = $row['Direccion'];
$_SESSION['Tlf1'] = $row['Tlf1'];
$_SESSION['Tlf2'] = $row['Tlf2'];
$_SESSION['lastin'] = $row['lastin'];
$_SESSION['lastout'] = $row['lastout'];
$_SESSION['visitadmin'] = $row['visitadmin'];
$userid = $_SESSION['ID'];
global $uservisita;
$uservisita = $_SESSION['visitadmin'];
///////////////////////////////////////////////////////////////////////////////////////////////
/* Aplicamos la lógica del formulario, mediante la cual se ejecutaran una u otra función.
O simplemente se verá el formulario.
Se incluye una función que suma una visita al cargar la página y otra que suma una visita a las ya existentes en caso de inciarse sesión. */
if($_POST['oculto']){
if($form_errors = validate_form()){
show_form($form_errors);
} else {process_form();
admin_entrada();
}
}
elseif ($_POST['salir']){ salir();
show_form();
}
else { suma_visit();
show_form();
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* Al inciar sesion suma una visita de la pepona, la fecha y la hora de entrada en el sistema. */
function admin_entrada(){
global $db;
global $db_name;
global $userid;
global $uservisita;
global $dir;
if (($_SESSION['Nivel'] == 'admin') || ($_SESSION['Nivel'] == 'user')){
$dir = "Users/".$_SESSION['ref']."/log";
}
$uservisita = $_SESSION['visitadmin'];
$total = $uservisita + 1;
$datein = date('Y-m-d/H:i:s');
$sqladin = "UPDATE `$db_name`.`admin` SET `lastin` = '$datein', `visitadmin` = '$total' WHERE `admin`.`ID` = '$userid' LIMIT 1 ";
if(mysqli_query($db, $sqladin)){
// print("* ");
} else {
print("</br>
<font color='#FF0000'>
* FATAL ERROR funcion admin_entrada(): </font></br> ".mysqli_error($db))."
</br>";
}
/* Aqui grabamos un archivo de log de sistema para controlar la actividad de la pepona dentro de la aplicación.
En el resto de la aplicación se seguira grabando toda la actividad en el mismo archivo .log ... */
global $datos;
$logdocu = $_SESSION['ref'];
$logdate = date('Y_m_d');
$logtext = "\n** INICIO SESION => .".$datein.".\n\t User Ref: ".$_SESSION['ref'].".\n\t User Name: ".$_SESSION['Nombre']." ".$_SESSION['Apellidos']."\n \n".$datos;
$filename = $dir."/".$logdate."_".$logdocu.".log";
$log = fopen($filename, 'ab+');
fwrite($log, $logtext);
fclose($log);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* Suma la visita a la pagina al cargar */
function suma_visit(){
global $db;
global $db_name;
global $rowv;
global $sumavisit;
$sqlv = "SELECT * FROM `visitasadmin`";
$qv = mysqli_query($db, $sqlv);
$rowv = mysqli_fetch_assoc($qv);
$_SESSION['admin'] = $rowv['admin'];
$tot = $rowv['admin'];
global $sumavisit;
$sumavisit = $tot + 1;
$idv = 69;
$sqlv = "UPDATE `$db_name`.`visitasadmin` SET `admin` = '$sumavisit' WHERE `visitasadmin`.`idv` = '$idv' LIMIT 1 ";
if(mysqli_query($db, $sqlv)){
/**/ print(" </br>");
}
else {
print("<font color='#FF0000'>
* Error: </font>
</br>
".mysqli_error($db)."
</br>");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
/* Valida el formulario. Y retorna los errores. */
function validate_form(){
global $db;
$errors = array();
if (strlen(trim($_POST['Usuario'])) == 0){
$errors [] = "Usuario: Campo obligatorio.";
}
if (strlen(trim($_POST['Password'])) == 0){
$errors [] = "Password: Campo Obligatorio:";
}
global $sql;
global $q;
global $row;
if(trim($_POST['Usuario'] != $row['Usuario'])){
$errors [] = "Nombre o Password incorrecto.";
}
elseif(trim($_POST['Password'] != $row['Password'])){
$errors [] = "Nombre o Password incorrecto.";
}
return $errors;
}
//////////////////////////////////////////////////////////////////////////////////////////////
/* Se procesa el formulario, en caso de pasar la validación.
Se imprime el index de la aplicación según el nivel del usuario.
Si error bbdd, mensaje.
Si no permitido, consulte con WEBMASTER */
function process_form(){
global $db;
if (($_SESSION['Nivel'] == 'admin') || ($_SESSION['Nivel'] == 'user')){
print("Wellcome: ".$_SESSION['Nombre']." ".$_SESSION['Apellidos'].".");
master_index();
print("<table align='center' style=\"margin-top:4px;margin-bottom:4px\">
<tr align='center'>
<td>
<font color='#2E939A'>
<b>
HOLA ".strtoupper($_SESSION['Nombre'])." ".strtoupper($_SESSION['Apellidos']).".
</br>
HA ACCEDIDO AL SISTEMA COMO ".strtoupper($_SESSION['Nivel']).".
</font>
</td>
</tr>
</table>");
show_balance();
} else { print("<table align='center' style=\"margin-top:200px;margin-bottom:200px\">
<tr align='center'>
<td>
<font color='red'>
<b>
ACCESO RESTRINGIDO.
</br></br>
CONSULTE SUS PERMISOS ADMINISTRATIVOS.
</font>
</td>
</tr>
</table>");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* El formulario de acceso a la plataforma. */
function show_form($errors=''){
if($_POST['oculto']){
$defaults = $_POST;
} else {
$defaults = array ('Usuario' => '',
'Password' => '');
}
if ($errors){
print(" <div width='90%' style='float:left'>
<table align='left' style='border:none'>
<th style='text-align:left'>
<font color='#FF0000'>* SOLUCIONE ESTOS ERRORES:</font><br/>
</th>
<tr>
<td style='text-align:left'>");
for($a=0; $c=count($errors), $a<$c; $a++){
print("<font color='#FF0000'>**</font> ".$errors [$a]."<br/>");
}
print("</td>
</tr>
</table>
</div>
<div style='clear:both'></div>");
}
print(" <div style='clear:both'></div>
<table align='center' style=\"margin-top:2px; margin-bottom:8px\" >
<tr>
<th colspan=2 width=100% valign=\"bottom\" class='BorderInf'>
SUS DATOS DE ACCESO
</th>
</tr>
<form name='form_tabla' method='post' action='$_SERVER[PHP_SELF]'>
<tr>
<td>
USUARIO
</td>
<td>
<input type='Password' name='Usuario' size=20 maxlength=50 value='".$defaults['Usuario']."' />
</td>
</tr>
<tr>
<td>
PASSWORD
</td>
<td>
<input type='Password' name='Password' size=20 maxlength=50 value='".$defaults['Password']."' />
</td>
</tr>
<tr>
<td valign='middle' align='right' colspan='2'>
<input type='submit' value='ACCEDER' />
<input type='hidden' name='oculto' value=1 />
</td>
</tr>
</form>
</table>
");
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* Llamamos al master index segun el nivel del usuario. */
function master_index(){
require 'Inclu/Master_Index_00.php';
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* Desconectamos del sistema y grabamos en la bbdd la hora y el dia en que el usuario cierra sesión.
La funcion desconexion se ejecuta en otro script que graba la hora de salida del sistema.
Lo he integrado en el master index por cuestiones de comodidad, esta función no se ejecuta en este script directamente. */
function desconexion(){
print("<form name='cerrar' action='Admin/mcgexit.php' method='post'>
<tr>
<td valign='bottom' align='right' colspan='8'>
<input type='submit' value='Cerrar Sesion' />
</td>
</tr>
<input type='hidden' name='cerrar' value=1 />
</form>
");
}
function salir() { unset($_SESSION['ID']);
unset($_SESSION['Nivel']);
unset($_SESSION['Nombre']);
unset($_SESSION['Apellidos']);
unset($_SESSION['doc']);
unset($_SESSION['dni']);
unset($_SESSION['ldni']);
unset($_SESSION['Email']);
unset($_SESSION['Usuario']);
unset($_SESSION['Password']);
unset($_SESSION['Direccion']);
unset($_SESSION['Tlf1']);
unset($_SESSION['Tlf2']);
unset($_SESSION['nclient']);
print("Se ha cerrado la sesión.</br>");
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/* El Xhtml5 que cierra la maquetación. */
require 'Inclu/Inclu_Footer_01.php';
/////////////////////////////////////////////////////////////////////////////////////////////////
?>
No hay comentarios:
Publicar un comentario
Gracias por vuestros aportes.