[SOLUCIONADO] No entra el segundo IF

Iniciado por Rebeca, Junio 18, 2021, 04:25:30 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 18, 2021, 04:25:30 PM Ultima modificación: Julio 07, 2021, 02:51:54 PM por AXCESS
Hola a todos, Tengo una web , que un usuario que entre tenga un menú distinto al que este logueado y otro menú distinto al que este logueado y halla publicado.. lo hice con 3 if. de esta manera

Código: php
 if ((isset($anuncio)=="NO" AND (isset($social_id)=="INV"))) {
   $name = ucwords($_SESSION['name']);
   $PrimerItems =  "<a class='nav-link' href='./userspublicar/publicar.php'><spam class='textColor'>Publicar</spam></a>";
    $TercerItems =  "<a class='nav-link' href='#'><spam class='fas fa-user icon-cio'></spam>"."<b>".$name ."</b> </a>";
    $SegundItems =  "<a class='nav-link' href='./salir.php'>Salir</a>";
    $invItem1=null;
    $invItem2=null;

  echo "USUARIO REGISTRADO PERO NO PUBLICO";
 
  } elseif ((isset($social_id)=="INV") AND (isset($anuncio)=="SI" AND ((isset($temporal)=="1")))) {
    $TercerItems=null;
    $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>PublicarSI</a>";
    echo "algooo";
    $PrimerItems=null;
    $invItem2 =null;
    $SegundItems=null;
  echo "USUARIO REGISTRADO PERO SIIIIII PUBLICO (NO ME SALE)";
 
  } elseif ((isset($temporal)<>"1") ){
 
  echo "USUARIO MIRANDO";
  $TercerItems=null;
  $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>Ingresar</a>";
  $PrimerItems=null;
  $invItem2 =null;
  $SegundItems=null;

  }


Estoy segura que los datos a comprobar exitenn, si funciona el "USUARIO MIRANDO", y el "USUARIO REGISTRADO PERO NO PUBLICO";
el que no funciona por mas que esten dadas las condiciones es el "USUARIO REGISTRADO PERO SIIIIII PUBLICO (NO ME SALE)";.. :(

En que estoy fallando?, desde ya muchas gracias a todos.
Saludos Rebe


Hola @Rebeca

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta devuelve un booleano, entonces al compararlo con algo que nunca te dará (como en este caso, una cadena), te dará siempre como resultado false.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Hola, Gracias por responder,  lo hice sin "isset", salen error porque las variables no están definidas ya que es un usuario mirando la web...
ese no seria el problema, ahora con el cambio siempre sale "USUARIO MIRANDO", los datos están, no entiendo porque no me hace la comparación ( soy principiante) alomejor no me doy cuenta.... y mi lógica no sirve :)....

dejo los nuevos cambios. y gracias nuevamente.

Código: php

include("config.php");
$cone=conectar();
$registros=mysqli_query($cone,"SELECT * FROM users WHERE email = '$email'")  or die("Problemas en el select:".mysqli_error($cone));
while ($reg=mysqli_fetch_array($registros)){
 


$anuncio= $_SESSION['anuncio']=$reg['anuncio']."<br>";
$temporal= $_SESSION['temporal']=$reg['temporal']."<br>";
  $social_id= $_SESSION['social_id']=$reg['social_id']."<br>";
  }


include("./include/header.php"); // icluimos cabecera de boostrat


if ($anuncio=="NO" AND $social_id=="INV") {
   $name = ucwords($_SESSION['name']);
   $PrimerItems =  "<a class='nav-link' href='./userspublicar/publicar.php'><spam class='textColor'>Publicar</spam></a>";
    $TercerItems =  "<a class='nav-link' href='#'><spam class='fas fa-user icon-cio'></spam>"."<b>".$name ."</b> </a>";
    $SegundItems =  "<a class='nav-link' href='./salir.php'>Salir</a>";
    $invItem1=null;
    $invItem2=null;

  echo "USUARIO REGISTRADO PERO NO PUBLICO";
 
  } elseif ( $social_id=="INV" AND $anuncio=="SI") {
    $TercerItems=null;
    $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>PublicarSI</a>";
    echo "algooo";
    $PrimerItems=null;
    $invItem2 =null;
    $SegundItems=null;
  echo "USUARIO REGISTRADO PERO SIIIIII PUBLICO (NO ME SALE)";
 
  } elseif ($temporal<>"1"){
 
  echo "USUARIO MIRANDO";
  $TercerItems=null;
  $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>Ingresar</a>";
  $PrimerItems=null;
  $invItem2 =null;
  $SegundItems=null;

  }


Muchas gracias por su tiempo.!
Saludos rebe

@Rebeca

Código: php
isset($anuncio)=="NO"


Esto lo que hace es llamar a la función isset(...) para evaluar a la variable $anuncio, ya que se desea verificar si está ajustada. El valor retornado es un booleano (sí/no, true/false, 1/0, etc.), pero PHP tiene la peculiaridad que al usar un operador de comparación, que en este caso es de igualdad, primero hará algo implícitamente, que en este caso será convertir a la cadena en un booleano y si está ajustada (que en este caso lo está) será true, por lo tanto, si el resultado de isset(...) es true también, el resultado también será true. Por ejemplo:

Código: php
var_dump(isset($var) == "STRING");
/* Resultado: bool(false) */


false porque $var no está ajustada. Pero:

Código: php
var_dump(isset($var) == "");
/* Resultado: bool(true) */


El resultado de isset(...) dará false y como es un booleano, la cadena se convertirá también a este tipo, y como está vacía, es false.

No es necesario reescribir el código, sólo necesitas saber lo que se está haciendo en esas líneas.

isset(...) mayormente no se compara con cadenas en la práctica.

Referencia:

*.- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Hola, gracias por responder nuevamente.. lo he realizado sin "isset".. y no compara...
Imprimo por pantalla antes del if todas las variables y si están ..

Seguiré intentando...

Muchas gracias por su tiempo.

Saludos rebe


No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Hola, gracias por responder nuevamente.. lo he realizado sin "isset".. y no compara...
Imprimo por pantalla antes del if todas las variables y si están ..

Seguiré intentando...

Muchas gracias por su tiempo.

Saludos rebe

Vamos por partes porque seguro que es un error muy sencillo, prueba con lo siguiente y dinos si los valores impresos son los esperados, con un echo es suficiente, aunque, te recomiendo que también compares tipos usando === y los comprobemos tal y como ha dicho @DtxdF con var_dump:

Código: php

...
echo "Anuncio: ".$anuncio."<br/>";
echo "Social_id: ".$social_id."<br/>";

if ($anuncio=="NO" AND $social_id=="INV") {
   echo "A";
}
else{
  echo "B";
}
...







Hola Chicos, creo que lo solucione, he borrado todo el código y empecé esa parte de nuevo...

cuando hago el if ..... antes de hacerlo muestro los datos para guiarme ... de esta manera

Código: php
 echo  $_SESSION['name']."<br>"."2";


me muestra el name correcto... a la hora de comparar no lo hacia .... le saque el "echo, y el <br>"2";
Y si me funciona,, no estoy 100% si es eso.. pero por lo menos ahora da algo de lógica ...

podrá ser eso?
Se agradece el tiempo,
Saludos a todo.
Rebe.

@Rebeca

Es un placer colaborar.

A veces es necesario, cuando se aprende, volver a escribir el código, pero como te mencioné en un principio, el posible error es en la comparación: estás comparando dos tipos de datos diferentes; uno es una cadena y otro un booleano, entonces PHP realizará una conversión implícita.

Ahí está el meollo.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Hola Y gracias DtxdF
var_dump, me sirvió bastante ya que tenia valores mezclados, quise hacerlos sola y me salió  a medias... ahora si compraba bien, pero el asunto es que cuando uno visita la web , al no estar registrado sale error en las variables, lógico porque no se registro, ahora si le pongo isset a esas variables, o null, después no me lo toma cuando me registro,
Alguien me orienta un poco.. desde ya muchas gracias muy amables ...
El error puntual es que un invitado vea la web sin problemas.... :(



Código: php
/*
echo "Rebe<br>";
var_dump($_SESSION['email']);
echo "<br>";
var_dump($_SESSION['UserPubli']);
echo "<br>";
var_dump($_SESSION['TipoUser']);
*/
/*
var_dump ($email=$_SESSION['email']);
var_dump  ($TipoUser=$_SESSION['TipoUser']);
var_dump  ($UserPubli=$_SESSION['UserPubli']);
*/

if ($UserPubli=="NOP" AND  $TipoUser=="INVR"){
echo "2 USUARIO REGISTADO PERO NO PUBLICO <br>";


  $name = ucwords($_SESSION['name']);
  $PrimerItems=  "<a class='nav-link' href='./userspublicar/publicar.php'><spam class='textColor'>Publicar</spam></a>";
  $TercerItems=  "<a class='nav-link' href='#'><spam class='fas fa-user icon-cio'></spam>"."<b>".$name ."</b> </a>";
  $SegundItems=  "<a class='nav-link' href='./salir.php'>Salir</a>";
  $invItem1=null;
  $invItem2=null;
} elseif( $TipoUser=="INVR" AND $UserPubli=="SIP"){

  echo "2 USUARIO REGISTADO PERO SIIIII PUBLICO <br>";
}else{
  echo "3 USAURIO SIN LOGUEARSE Y SIN NADA <br>";

  $TercerItems=null;
  $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>Ingresar</a>";
  $PrimerItems=null;
  $invItem2 =null;
  $SegundItems=null;


}


Gracias de Nuevo.
Saludos
Rebe.


Hola Lo he intentado asi.. todos los valores impresos con vsr_dum, dan NULL....



dejo código

Código: php
var_dump ($email=$_SESSION['email']);
var_dump  ($TipoUser=$_SESSION['TipoUser']);
var_dump  ($UserPubli=$_SESSION['UserPubli']);

if ((!isset ($_SESSION['email'])==null) AND (isset($_SESSION['Tipouser'])==null) AND (isset ($_SESSION['UserPubli'])==null)){

$email=$_SESSION['email'];
$TipoUser=$_SESSION['TipoUser'];
$UserPubli=$_SESSION['UserPubli'];

}elseif( ($UserPubli=="NOP" AND  $TipoUser=="INVR")){

  echo "2 USUARIO REGISTADO PERO NO PUBLICO <br>";
 

   $name = ucwords($_SESSION['name']);
   $PrimerItems=  "<a class='nav-link' href='./userspublicar/publicar.php'><spam class='textColor'>Publicar</spam></a>";
   $TercerItems=  "<a class='nav-link' href='#'><spam class='fas fa-user icon-cio'></spam>"."<b>".$name ."</b> </a>";
   $SegundItems=  "<a class='nav-link' href='./salir.php'>Salir</a>";
   $invItem1=null;
   $invItem2=null;
} elseif( $TipoUser=="INVR" AND $UserPubli=="SIP"){

   echo "2 USUARIO REGISTADO PERO SIIIII PUBLICO <br>";

}else{
   echo "3 USAURIO SIN LOGUEARSE Y SIN NADA <br>";

   $TercerItems=null;
   $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>Ingresar</a>";
   $PrimerItems=null;
   $invItem2 =null;
   $SegundItems=null;

   echo "  TODO ES NULO";

}


Una ayuda.. estoy re perdida....  :'( :'(
Saludos

Hola .. encontré Mi error...
1º es isset y después lo compruebo normalmente ...

dejo código por si alguien lo necesita.... o lo ayuda como a mi .. gracias...

Código: php
if ((isset($_SESSION['email'])==null)  AND (isset($_SESSION['UserPubli'])==null) AND (isset($_SESSION['TipoUser'])==null)){
// echo "USUARIO INVITADO";
  $TercerItems=null;
   $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'>Ingresar</a>";
   $PrimerItems=null;
   $invItem2 =null;
   $SegundItems=null;


}elseif ( $_SESSION['UserPubli']=="SIP"  AND $_SESSION['TipoUser'] =="INVR")  {

  $TercerItems=null;
  $invItem1="<a class='nav-link' href='./registrocliente/login/login/index.php'><b>Mi Cuenta</b></a>";
  $PrimerItems=null;
  $invItem2 =null;
  $SegundItems=  "<a class='nav-link' href='./salir.php'>Salir</a>";


Muchas Gracias.!!
Saludos Rebe