Buenas, muchachos como estan,
bueno tengo este code:
validacion de usuarios
<?php session_start();
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','root','')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('agsiscom')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
//Caracteres no permitidos
function quitar($mensaje)
{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
if(trim($HTTP_POST_VARS["user"]) != "" && trim($HTTP_POST_VARS["pass"]) != "")
{
// Puedes utilizar la funcion para eliminar algun caracter en especifico
//$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
//$password = $HTTP_POST_VARS["password"];
// o puedes convertir los a su entidad HTML aplicable con htmlentities
$usuario = strtolower(htmlentities($HTTP_POST_VARS["user"], ENT_QUOTES));
$password = $HTTP_POST_VARS["pass"];
$resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser=\''.$usuario.'\'');
if($row= mysql_fetch_array($resultado)){
if($row["pass"] == $password){
$_SESSION["k_username"] = $row['user'];
$_SESSION["k_typeuser"]=$row['type'];
?>
<script language="javascript">
alert("Usuario identificado correctamente");
location.href="admin.php";
</script>
<?php
}else{
?>
<script language="javascript">
alert("Contraseña incorrecta");
location.href="index.php";
</script>
<?php
}
}else{
?>
<script language="javascript">
alert("Usuario inexistente.");
location.href="index.php";
</script>
<?php
}
mysql_free_result($result);
}else{
?>
<script language="javascript">
alert("Debe espeficicar un usuario y una contraseña");
location.href="index.php";
</script>
<?php
}
mysql_close();
?>
admin.php
<?php session_start();
if ($_SESSION['k_username']) {
if ($_SESSION["k_typeuser"]=='admin'){
$mcount="adm/counts.php";
$mproducts="adm/products.php";
$mlogout="logout.php";
$moferts="adm/oferts.php";
$mnews="adm/news.php";
$resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>
<p class=\"color1\">Por favor escoja una de las siguientes operaciones a realizar.</p>
<p class=\"color1\"> </p>
<p class=\"color1\"><a href="adm/news.php">Agregar novedades</a></p>
<p class=\"color1\"><a href="adm/offerts.php">Modificar ofertas</a></p>
<p class=\"color1\"><a href="adm/products.php">Administrar productos</a></p>
<p class=\"color1\"><a href="adm/counts.php">Modificar cuentas</a></p>
<p class=\"color1\"><a href="mail.agsiscom.com">Ver correo electronico</a></p>';
} else{
$mcount="mensaje();";
$mproducts="mensaje();";
$mlogout="mensaje();";
$moferts="mensaje();";
$mnews="mensaje();";
$resultsession="<h2>Sesion incorrecta!</h2>
<p class=\"color1\">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
<p class=\"color1\">Por favor cierre la sesión actual y a continuación entre com una cuenta de administrador</p>
<p class=\"color1\"> </p>";
}
} else {
$mcount="mensaje();";
$mproducts="mensaje();";
$mlogout="mensaje();";
$moferts="mensaje();";
$mnews="mensaje();";
$resultsession="<h2>Debe iniciar sesion primero!</h2>
<p class=\"color1\">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
<p class=\"color1\">Para ello ingresa tu nombre de usuario y contraseña en el formulario de abajo.</p>
<p class=\"color1\"> </p><article class=\"col2 pad_left1\">
<h2>Inicio de sesion</h2>
<form id=\"ContactForm\" name= \"login\" action=\"valida.php\" method=\"post\">
<div>
<div class=\"wrapper\"><br />
</div>
<div class=\"bg\">
<input type=\"text\" name=\"user\" class=\"input3\"/>
</div>
Usuario:<br />
</div>
<div class=\"wrapper\">
<div class=\"bg\">
<input type=\"password\" name=\"pass\" class=\"input3\" />
</div>
Contraseña:<br />
</div>
<div class=\"wrapper\"><br/>
</div>
<input type=\"submit\" name=\"submit\" class=\"button2\" value=\"Entrar\" >
<input type=\"reset\" name=\"clean\" class=\"button2\" value=\"limpiar\" onClick=\"cleanform\">
</form>
</article>";
}
?>
Bueno resulta que en admin.php no me esta tomando los datos de session_start();
me sale siempre es la ultimap arte del else.
me pueden decir que estoy haciendo mal????
o por que nome da???
saludos
Que quieres decir con,
if ($_SESSION['k_username']) {
Hola, en ves de usar $HTTP_POST_VARS utiliza $_POST porque en algunas configuraciones de servidores dan problemas con superglobales antiguas.
Después si aun no resulta prueba poniendo print_r($_SESSION) al principio del script después de session_start() para que puedas ver si es la sesión o tu script el que está fallando.
Yo apuesto a que el problema está cuando declara el valor, lo mas probable es que no esté declarando bién el nombre de usuario.
//Caracteres no permitidos
function quitar($mensaje)
{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
Que tal si mi nombre de usuario tiene una comilla como por ejemplo marco's
para eso ya exste una función llamada mysql_real_escape_string(); además no necesitas escapar comillas dentro de la query, puedes usar comillas dobles:
$resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser="'.mysql_real_escape_string($_POST['user']).'" limit 1');
y htmlentities no te va a salvar de una inyección sql como los saltos de linea y retorno de carácter como el \x1a y el \x0d, para eso está el mysql real escape string, además mysql no es case sensitive asi que está demás el strtolower().
El limit 1 se pone siempre por costumbre para que el sistema funcione mejor debido a que te daría problemas si hay dos registros con el mismo nombre por algún motivo como por ejemplo migración de base de datos.
mysql_free_result($result);
Según tu script es "resultado" no "result"
La próxima ves intenta por favor no escribir los títulos de mensajes con mayusculas porque casi me dejaste sordo.
Saludos.
WHK gracias por tu aporte, mejore algunas cositas, pero te cuento que use esta misma funcion de session_start en otr proyecto y funciona de maravilla, realmente me extraña el saber por k no funciona bien en esta pagina.
esta tal cual el proyecto anterior.
al igual mejore algunas de tus recomendaciones y no funciona bien.
PD: ya arregle el titulo, jeje que pena me pase con el grito. no me habia dado cuenta que estaba ne mayus xD
saludos
A mi me ha pasado que en algunas veces te equibocas de codificación de archivo y aparece un pequeño carácter raro al comienzo de tu script y esto se debe a que este carácter define si tu script está escrito en utf-8 o no, en ese caso puede no estar haciendo efecto el session_start() ya que hay que recordar que envía un header al cliente cosa que no puede hacer si ya se ha enviado buffer antes.
Tienes los errores habilitados? error_reporting(all)
eso mismo estaba mirando yo en otros post. uso dreamweaver para esto pero mejor no me confio y lo paso a otro codificador a ver si es eso...
gracias estare avisando que sucede
Ya encontré el error:
$_SESSION["k_typeuser"]=$row['type'];
No hay columna type ya que en tu query de sql solamente seleccionaste user y pass:
$resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser=\''.$usuario.'\'');
Lo solucionas seleccionando todo con * y ya.
Hize un par de arreglos en tu script porque le encontré como 3 errores mas como por ejemplo lo del free_result y un xss en :
$resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>
En ese caso se usa htmlspecialchars.
<?php
session_start();
/* Login */
if(!$handle_sql = mysql_connect('localhost','root',''))
die('Ha fallado la conexión');
if(!mysql_select_db('agsiscom'))
die('Error al seleccionar la Base de Datos');
if(isset($_POST['user']) and isset($_POST['pass'])){
$resultado = mysql_query('select * from users where nuser = "'.mysql_real_escape_string($_POST['user']).'" limit 1');
if($row = mysql_fetch_array($resultado, MYSQL_ASSOC)){
@mysql_free_result($resultado);
if($row['pass'] == $_POST['pass']){
$_SESSION['k_username'] = $row['user'];
$_SESSION['k_typeuser'] = $row['type']; /* !!! select * entrega type */
header('location: '.str_replace(array("\x0d", "\x0a"), '', $_SERVER['PHP_SELF']));
}else
$status['error'] = 'Contraseña incorrecta.';
}else
$status['error'] = 'Usuario inexistente.';
}
mysql_close();
/* Start content */
if($_SESSION['k_username']){
if($_SESSION["k_typeuser"] == 'admin'){
?>
<h2>Sesion: <?php echo htmlspecialchars($_SESSION['k_username'], ENT_QUOTES); ?>!</h2>
<p class="color1">Por favor escoja una de las siguientes operaciones a realizar.</p>
<p class="color1"> </p>
<p class="color1"><a href="news.php">Agregar novedades</a></p>
<p class="color1"><a href="offerts.php">Modificar ofertas</a></p>
<p class="color1"><a href="products.php">Administrar productos</a></p>
<p class="color1"><a href="counts.php">Modificar cuentas</a></p>
<p class="color1"><a target="_blank" href="http://mail.agsiscom.com/">Ver correo electronico</a></p>
<?php
}else{
?>
<h2>Sesion incorrecta!</h2>
<p class="color1">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
<p class="color1">Por favor cierre la sesión actual y a continuación entre com una cuenta de administrador</p>
<?php
}
}else{
?>
<h2>Debe iniciar sesion primero!</h2>
<p class="color1">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
<p class="color1">Para ello ingresa tu nombre de usuario y contraseña en el formulario de abajo.</p>
<p class="color1"> </p><article class="col2 pad_left1">
<h2>Inicio de sesion</h2>
<form id="ContactForm" name= "login" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<div>
<div class="wrapper"><br /></div>
<div class="bg">
<input type="text" name="user" class="input3"/>
</div>
Usuario:<br />
</div>
<div class="wrapper">
<div class="bg">
<input type="password" name="pass" class="input3" />
</div>
Contraseña:<br />
</div>
<div class="wrapper"><br/></div>
<input type="submit" name="submit" class="button2" value="Entrar" >
<input type="reset" name="clean" class="button2" value="limpiar" onClick="cleanform">
</form>
<?php
}
?>
Saludos.
oye muchas gracias!!!!! xD
estaba mirando lo del sistema utf-8 y aun asi no me daba, voy a probar con tu solucion,
aun asi te agradezco enormemente...
WHK acabo de probar tu solucion y no me trajo ningun resultado!!!
el problema es que ahora estoy pensado que es el sistema de uso para probaro, uso appserv 2.5.5 con MySQL Database Version 5.0.16 y phpMyAdmin Database Manager Version 2.6.4-pl4
tiene que ver esto?
por que ya pase todos los archivos de la pagina a utf-8 muchos estaban en ANSI.
la verdad esto es ya molesto que no funcione, acabo de correr un archivo anterior donde use esto mismo y funciona de maravilla!!!!
AYUDA!!!!!!
instala xampp
Buenas. bueno ya instale el xampp, gracias por este server, lo veo mas completo
pero ahora tengo estos problemas:
1 cuando ejecuto el archivo pagina el que contiene lo del formulario y eso me dice esto:
Notice: Undefined index: k_username in C:\xampp\htdocs\agsiscom\admin.php on line 2
y ahi tengo esto:
<?php session_start();
if ($_SESSION['k_username']) {
if ($_SESSION["k_typeuser"]=='admin'){
lo otro es que cuando salgo a validar los usuarios me salta el siguiente error:
$_SESSION["k_username"] = $row['user'];
que sucede???
YA arregle el problema!!!
estaba mal definido lo siguiente:
$_SESSION["k_username"] = $row['user'];
deberia ser:
$_SESSION["k_username"] = $row['nuser'];
al igual tambien tenia errores de server ya tampoco me reconocia algunas lineas y no pasaba del sistema de conexion bien.
GRACIAS A TODOS POR SU COLABORACION!!!