Problema con php Condicion de session

Iniciado por alexkof158, 25 Noviembre 2009, 22:49 PM

0 Miembros y 2 Visitantes están viendo este tema.

alexkof158

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
"noproxy"

Freeze.

#1
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.

Código (php) [Seleccionar]
<?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;
}
?>


cassiani

cabe acotar que el caracter '=' se uriliza solo para asignación y para condición un doble '=='.

Freeze.


alexkof158

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.

Código (php) [Seleccionar]
<?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
"noproxy"

cassiani

lo que quiere decir es que primero haces una comparación y luego la otra y no como lo tenias.

alexkof158

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??
"noproxy"

[u]nsigned

Respondo apurado porque estoy en el trabajo... ;)

Esta línea está mal:
Código (php) [Seleccionar]
if($row = mysql_fetch_array($result)){

Debería ser:

Código (php) [Seleccionar]
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).


Código (php,1,5) [Seleccionar]

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Castg!

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

[u]nsigned

Mira, si queres usar sesiones, y algun script externo que trabaje sobre estas (llamdo con include_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
Código (php) [Seleccionar]

<?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:

Código (php) [Seleccionar]
<?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:

Código (php,2) [Seleccionar]
<?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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!