Foros del Web » Programando para Internet » PHP »

Problema con ifs

Estas en el tema de Problema con ifs en el foro de PHP en Foros del Web. Hola amigos, tengo un problemilla con unos ifs. Haber explico un poco para que sepais por donde va la cosa, utilizo un sistema de usuarios ...
  #1 (permalink)  
Antiguo 29/04/2009, 04:59
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Problema con ifs

Hola amigos, tengo un problemilla con unos ifs. Haber explico un poco para que sepais por donde va la cosa, utilizo un sistema de usuarios el cual usa niveles de usuarios y la pagina donde se redirige el usuario al hacer login es donde intento usar los ifs estableciendo el nivel de usuario, en esta pagina no hace caso a los ifs el codigo es el siguiente:

Código PHP:
<?php
session_start
();

if(!isset(
$_SESSION)){
header("location: login.php");
}
include(
"../reg/config.php"); // incluir configuracion.

$sql="SELECT * FROM usu WHERE userlevel='".$_SESSION['userlevel']."'";
$result=mysql_query($sql);
$nivel=$_SESSION['userlevel'];
$login=$_SESSION["login"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
Estás logueado pero todavía este apartado permanece en construcción.

<a href="logout.php">Cerrar Sesión</a><br/><br/>
<?php
if($nivel <= 1) {   
echo 
"Hola $login. "
// Aqui le das acceso al area restringida 
}
else{ die (
'Solo usuarios registrados');  

if(
$nivel == 9) {  
echo 
"Eres Administrador";        
// Aqui muestras opciones de administrador     
} else {  die ('Solo administradores');;
}
?>
</body>
</html>
Al acceder como un usuario con nivel 9 me indica "Solo usuarios registrados" y al acceder con un usuario con nivel 0 indica "Hola (Aqui el email). Solo Administradores". En que falla mi codigo?
  #2 (permalink)  
Antiguo 29/04/2009, 05:51
 
Fecha de Ingreso: diciembre-2007
Mensajes: 131
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Problema con ifs

En primer lugar, la llamada SQL que estas haciendo en las primeras lineas de codigo es muy amplia,. estas buscando todos los usuarios pertenecientes a un nivel y no al revez (como deberia ser). Esto es bastante inseguro, sobre todo si usas "SELECT * ". Siempre has el select por los datos que realmente necesitas y no mas.


Segundo... supongo que las variables $_SESSION['userlevel'] y $_SESSION['login'] existen cierto? Fijate si ese no es el problema (con un simple echo bastara).



Tercero
Cita:
Al acceder como un usuario con nivel 9 me indica "Solo usuarios registrados" y al acceder con un usuario con nivel 0 indica "Hola (Aqui el email). Solo Administradores". En que falla mi codigo?
Tu codigo no falla en nada... eso es justamente lo que indica tu codigo... paso a explicarte (lee los comentarios del codigo)

Código PHP:
<?php
if($nivel <= 1) {   
    echo 
"Hola $login. "# 0 es menor a 1, por lo tanto si entras con nivel 1 te va a decir 'Hola (aqui el email)'.
}
else{ 
    die (
'Solo usuarios registrados');  # En caso de que ingreses como nivel 9, ya que es mayor a 0 (notece el if), te va a pedir que solo usuarios registrados y va a finalizar el programa.

if(
$nivel == 9) {  
    echo 
"Eres Administrador"# A partir de aca el codigo ya no funciona, porque lo mata el 'die' anterior.

else {  
    die (
'Solo administradores');;
}
?>
  #3 (permalink)  
Antiguo 29/04/2009, 05:54
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con ifs

El problema que tienes es al usar el die que es equivalente a exit... Lo que hacen es para el script...

Haz algo como eso...
Código php:
Ver original
  1. if($nivel <= 1)
  2. {
  3.     echo "Hola $login. ";
  4. }
  5. else if($nivel == 9)
  6. {
  7.     echo "Hola $login. ";
  8. }
  9. else
  10. {
  11.     echo "Error de login o no tienes permisos, etc..."
  12. }
  #4 (permalink)  
Antiguo 29/04/2009, 06:17
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Respuesta: Problema con ifs

Haber, lo que yo pretendo es que el primer if lo vean usuarios con nivel 0 y el segundo if lo vean usuarios con nivel 9. Poniendolo como dice machoman112233 funciona todo perfecto pero ahora mi duda es la siguiente: El primer if es correcto o en vez de llevar "<=" deberia de ser "==" ? y cuando añada mas niveles de usuarios como seria?

Con respecto al select lo he puesto asi:

$sql="SELECT userlevel FROM usu WHERE userlevel='".$_SESSION['userlevel']."'";

Es correcto asi?
  #5 (permalink)  
Antiguo 29/04/2009, 06:31
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con ifs

Creo que es mejor usa ==... con <= 1 dices todo lo que esta por debajo de 1 incluyendo numeros negativos... En cuanto a mas niveles de seguridad, todo depende de como te lo montas.... Para que sea mas facil lo puedes hacer por modulos... asi en un futuro si tienes que ampliar los niveles de seguridad puede que sea mas facil...

Algo parecido a:

Código php:
Ver original
  1. include('seguridad_' .$nivel. '.php');
  2. //quedaria algo asi:
  3. //seguridad_1.php
  4. //seguridad_9.php
  #6 (permalink)  
Antiguo 29/04/2009, 06:39
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Problema con ifs

Vale no entiendo muy bien como dices por modulos pero no te preocupes que buscare informacion ya mas adelante. Me acabo de dar cuenta de un problemilla que me imagino que sera una tonteria pero para "tontos" como yo es muy complicao :P jejeje, el problema es el siguiente que si entro con nivel 0 veo lo que haya en el if de nivel 0 y si entro con nivel 9 veo lo del if de nivel 9 cosa que deberia ser de este modo: si entro como nivel 0 solo veo nivel 0, si entro como nivel 1 debo de ver el if de nivel 1 y el if de nivel 0, si entro con nivel 9 ver todos los anteriores, ¿Comprendes lo que quiero decir? que siempre el nivel superior pueda ver su if y los inferiores, ¿Como se hace eso?
  #7 (permalink)  
Antiguo 29/04/2009, 12:12
 
Fecha de Ingreso: diciembre-2007
Mensajes: 131
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Problema con ifs

En ese caso, en vez de usar if-else if-else .. usarias if-if-else

Ejemplo

Código PHP:
   1.
      
if($nivel <= 1)
      {
          echo 
"Hola $login. ";
      }
      if (
$nivel <= 2)
      {
          echo 
"Contenido de nivel 1 y 2";
      }
      if (
$nivel <= 3)
      {
          echo 
"Contenido de nivel 1, 2 y 3";
      }
      if(
$nivel <= 9)
      {
          echo 
"Hola $login. ";
      }
      if(!isset(
$nivel)) # si no existe la variable $nivel
      
{
          echo 
"Error de login o no tienes permisos, etc..."
      

  #8 (permalink)  
Antiguo 29/04/2009, 12:16
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Respuesta: Problema con ifs

Ya esta solucionado todo esto ahora me esta volviendo loco otro error que no tiene nada que ver con este erro pero mirar es el siguiente:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/27/51920027/htdocs/coriaweb/usuarios/noticias/mas.php on line 9

y el codigo es de mas.php que recoge el not_ID de una noticia y las muestra es el siguiente:

Código PHP:
<?php 

include("../reg/config.php");

if(isset(
$_GET['not_ID'])){     
    
$not_ID $_GET['not_ID']; 
    
$sqlQueryNot mysql_query("SELECT * FROM noticias WHERE not_ID"$db_link) or die(mysql_error);
}
$rowNot mysql_fetch_array($sqlQueryNot);{
    echo 
"<h2>".$rowNot['titulo']."</h2>"
    echo 
$rowNot['texto'];
    } 

?>
En que falla?
  #9 (permalink)  
Antiguo 29/04/2009, 13:02
 
Fecha de Ingreso: diciembre-2007
Mensajes: 131
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Problema con ifs

esta mal hecha la query SQL...

SELECT * FROM noticias WHERE not_ID

Esta query es incompleta ya que no especificas ninguna busqueda comparativa con not_ID.


Deberia ser

SELECT * FROM noticias WHERE not_ID = 'algun valor'

y en tu codigo quedaria

$sqlQueryNot = mysql_query("SELECT * FROM noticias WHERE not_ID = '".addslashes($_GET['not_ID'])."'", $db_link) or die(mysql_error);
  #10 (permalink)  
Antiguo 29/04/2009, 13:11
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Problema con ifs

lo he puesto asi y sigue saliendo el mismo error, el mas.php a quedado asi:

Código PHP:
<?php  

include("../reg/config.php"); 

if(isset(
$_GET['not_ID'])){      
    
$not_ID $_GET['not_ID'];  
    
$sqlQueryNot mysql_query("SELECT * FROM noticias WHERE not_ID = '".addslashes($_GET['not_ID'])."'"$db_link) or die(mysql_error); 

$rowNot mysql_fetch_array($sqlQueryNot);{ 
    echo 
"<h2>".$rowNot['titulo']."</h2>";  
    echo 
$rowNot['texto']; 
    }  

?>
y el error que sigue saliendo es este:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/27/51920027/htdocs/coriaweb/usuarios/noticias/mas.php on line 9
  #11 (permalink)  
Antiguo 29/04/2009, 13:16
 
Fecha de Ingreso: diciembre-2007
Mensajes: 131
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Problema con ifs

Ese error te lo tira porque el resultado dado por la query 'no es un objeto mysql valido'. Esto se puede deber a 2 causas: que la query este mal hecha (lo que pense) o que efectivamente esa query no devuelva ningun resultado.

Estas seguro de que existe una noticia cargada en la base de datos que pertenezca a el 'not_ID' que vos estas buscando?
  #12 (permalink)  
Antiguo 29/04/2009, 13:22
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Respuesta: Problema con ifs

Si a esta pagina llegas desde un enlace (Mas..) que hay junto a las noticias.

El codigo que te envia hasta esa pagina esta aqui explicao pasate a este post y dejemos este que el otro lo abri cuando todavia aqui se trataba lo de los usuarios, el post es este:

http://www.forosdelweb.com/f18/error...ult-re-694498/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:41.