hopla a todos, lo
lo que pasa es que quiero comparar q si el nombre de usuario == admin entonces que me muestre la pagina de admin, y si el nombre de usuario es == secretaria me muestre otra pagina. ahora estoy utilizando este codigo para leer el nombre de la sesion asi:
<?php
session_start();
?>
<?php
if (isset($_SESSION['k_username']='admin')) {
echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
}
if (isset($_SESSION['k_username']='f')) {
echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
}else {
echo "Error, no tienes permiso.";
echo '<p><a href="index.php">Necesita Loguearse</a></p>';
exit;
}
?>
pero me dice que el error esta en la linea 6 del codigo, y el tipo de error es
Parse error: syntax error, unexpected '=', expecting ',' or ')' in C:\wamp\www\tallerphp\validar_sesion.php on line 6
Gracias y espero prontas soluciones
No puedes agregar un valor a $_SESSION..
estas tratando de hacer 2 comprobaciones al mismo tiempo.
Primero fijate si la variable k_username está "seteada" con la función isset y luego si miras si tiene tal o cual valor.
<?php
session_start();
?>
<?php
if (isset($_SESSION)) {
if ($_SESSION['k_username']=='admin') {
echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
} elseif ($_SESSION['k_username']=='f') {
echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
}
}
echo "Error, no tienes permiso.";
echo '<p><a href="index.php">Necesita Loguearse</a></p>';
exit;
}
?>
cabe acotar que el caracter '=' se uriliza solo para asignación y para condición un doble '=='.
Muy cierto ;)
Corrigiendo..
Cita de: Freeze. en 25 Noviembre 2009, 23:06 PM
No puedes agregar un valor a $_SESSION..
estas tratando de hacer 2 comprobaciones al mismo tiempo.
Primero fijate si la variable k_username está "seteada" con la función isset y luego si miras si tiene tal o cual valor.
<?php
session_start();
?>
<?php
if (isset($_SESSION)) {
if ($_SESSION['k_username']=='admin') {
echo '<p><a href="index.php">Redirigir a la pagina Administrador</a></p>';
} elseif ($_SESSION['k_username']=='f') {
echo '<p><a href="index2.php">Redirigir a la pagina Secretaria</a></p>';
}
}
echo "Error, no tienes permiso.";
echo '<p><a href="index.php">Necesita Loguearse</a></p>';
exit;
}
?>
seteads?? :huh: :huh: :huh: :huh:
te refieres a esto
<?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('empresa')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function quitar($mensaje)
{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
if(trim($_POST["usuario"]) != "" && trim($_POST["password"]) != "")
{
// 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($_POST["usuario"], ENT_QUOTES));
$password = $_POST["password"];
$result = mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
if($row = mysql_fetch_array($result)){
if($row["password"] == $password){
session_start();
$_SESSION["k_username"] = $row['usuario'];
echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
//echo '<a href="inicio.php">Index</a></p>';
header("location: inicio.php");
//Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
//Ingreso exitoso, ahora sera dirigido a la pagina principal.
/*<SCRIPT LANGUAGE="javascript">
location.href = "inicio.php";
</SCRIPT>*/
}else{
echo 'Password incorrecto';
}
}else{
echo 'Usuario no existente en la base de datos';
}
mysql_free_result($result);
}else{
echo 'Debe especificar un usuario y password';
}
mysql_close();
?>
porfa explicame..
graciass
lo que quiere decir es que primero haces una comparación y luego la otra y no como lo tenias.
Cita de: cΔssiΔni en 26 Noviembre 2009, 05:52 AM
lo que quiere decir es que primero haces una comparación y luego la otra y no como lo tenias.
vale listo, la condicion se efectua pero no redirecciona a la pagina de inicio creo que es porke no crea la session, la pagina de inicio le hago un include_once("validar_sesion.php"); para que incluya a esta para que se pueda ver si esta la session creada, pero al parecer aun no esta creada... que hago mal?? :huh:
que estoy haciendo mal??
Respondo apurado porque estoy en el trabajo... ;)
Esta línea está mal:
if($row = mysql_fetch_array($result)){
Debería ser:
while($row = mysql_fetch_array($result)){
Si alguien pusiera como user algo como ' OR 1=1' conseguiria acceso sin epecificar una contraseña (SQL Injection).
session_start();
$_SESSION["k_username"] = $row['usuario'];
echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
//echo '<a href="inicio.php">Index</a></p>';
header("location: inicio.php");
1. session_start() debe usarse UNA SOLA VEZ, y debe ser la primera sentencia del script.
2. No podes usar header() si ya has mostrado algo en la pagina, es decir no podes usar un echo o printf antes de header.
Saludos
yo tengo un porblema asi, lo que pasa es que no me setea la variable session, cuando llego a mi casa, (toy en el cole) subo el code que lo tengo enlocal host
Mira, si queres usar sesiones, y algun script externo que trabaje sobre estas (llamdo con i
nclude_once,
include,
requiere...)tenes que usar
session_start(); dentro del script principal. Esta sentencia solo debe aparecer una vez, y solo en el script principal (no en los que se llamen mediante
include o el metodo que sea..)
Por ejemplo supongamos que el script principal sea
sesion.php, y tenemos un script llamdo
sesion_check.php que tiene una rutina que comprueba la variable $_SESSION, es decir, que controla si esta definida, quevalor tiene, etc..un ejemplo sencillo de ambos script seria el siguiente:
sesion.php
<?php
session_start();
echo "A continuacion usare un script externo para trabajar con \$_SESSION<br />\n";
include_once("sesion_check.php");
?>
Y el script
sesion_check.php seria este:
<?php
if( isset($_SESSION['nombre']) )
{
echo "\$_SESSION['nombre']: ".$_SESSION['nombre'];
}
else
{
$_SESSION['nombre'] = "UNSIGNED";
echo "\$_SESSION['nombre'] creada con valor ".$_SESSION['nombre'];
}
?>
En este segundo (que usara como 'externo') no uso
session_start(); ya que lo debo usar en el script principal(
sesion.php).
En el script principal
session_start(); debe solo usarse
una vez, y de ser posible debe ser la primera linea, o el interprete de PHP nos dara un Warning:
<?php
echo "xD"; //he agregado esta linea ANTES de session_start() para provocar un Warning
session_start();
echo "A continuacion usare un script externo para trabajar con \$_SESSION<br />\n";
include_once("sesion_check.php");
?>
CitarxD
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\test\sesion.php:2) in C:\AppServ\www\test\sesion.php on line 3
A continuacion usare un script externo para trabajar con $_SESSION
$_SESSION['nombre']: UNSIGNED
Espero haber aclarado algunas dudas..
Saludos
mejor hago un nuevo tema para no romper las reglas xD! http://foro.elhacker.net/php/problema_con_session-t275965.0.html (http://foro.elhacker.net/php/problema_con_session-t275965.0.html)
gracias todo solucionado, pero el
header("location: inicio.php");
este me pone problemas el navegador me dice q rechaza las conexiones..
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH
Cita de: castg en 27 Noviembre 2009, 17:28 PM
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH
No es necesario que
header() este al princio (eso es para
session_start() para evitar Warnings), pero no podes printar nada en l aweb antes de usar un header().
Si tu codigo necesita usar un header en determinados lugares, lo que te recomiendo hacer es que no imprimas nada a vuelo, sino que gaurdes todo lo que quieras mostrar en tu web en una variable, y asi podes usar header("Location: loquesea.php") donde quieras, y por ultimo pasas a imprimir la variable.
saludos
Cita de: ❶ en 27 Noviembre 2009, 18:34 PM
Cita de: castg en 27 Noviembre 2009, 17:28 PM
el problema es que ya imprimiste datos en pantalla, asi no podes poner un header, tenes que ponerlo alprincipio del codigo, pero no imprimirias nada, asi que imprimi y en vez de pone header ponelo en html con un "<META REFRESH
No es necesario que header() este al princio (eso es para session_start() para evitar Warnings), pero no podes printar nada en l aweb antes de usar un header().
Si tu codigo necesita usar un header en determinados lugares, lo que te recomiendo hacer es que no imprimas nada a vuelo, sino que gaurdes todo lo que quieras mostrar en tu web en una variable, y asi podes usar header("Location: loquesea.php") donde quieras, y por ultimo pasas a imprimir la variable.
saludos
pues con metafresh no porke despues cada 2 segundo se actuliza la pagina que tengo y distrae la vista cliente. mejor la dejo con un <a href>
y Gracias ya solucione mi probleba
Si todavia te interesa, luego de usar header("Location: ..."); tenes que usar exit();
header("Location: algo.php");
exit();
Y asi te evitas cualquier error en la redireccion, como por ejemplo que no cambie la url en el navegador.
Esto se deberia hacer con el detectabot.php del foro, que luego de redirecionar al index.php no cambia la url en el navegador :xD
saludos