Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con el isset

Estas en el tema de Problema con el isset en el foro de PHP en Foros del Web. Tengo un problema con el isset dentro de una función. Me salta una notificación que no esta definida la variable titulo en la línea 9. ...
  #1 (permalink)  
Antiguo 11/01/2013, 20:27
 
Fecha de Ingreso: marzo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Problema con el isset

Tengo un problema con el isset dentro de una función.
Me salta una notificación que no esta definida la variable titulo en la línea 9. No se porque me tiene que saltar la notificación cuando con el isset sirve para indicar si la variable esta definida y no es null con lo cual, creo yo, que lo que tendría que hacer seria ignorar el if y pasar al else. Creo yo que hace las dos cosas porque primero me imprime la notificación y luego seguido me imprime "Sin datos".

Este es el codigo:

cabecera.php
Código:
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title><?php echo "$titulo"; ?></title>
    </head>
    <body>
        <div align="center">Esto es la cabecera de la página</div>
        <hr />
index.php
Código:
<?php
//$titulo="Portada";

require_once("funciones.php");
include("cabecera.php");
?>

    <h1><?php hacer_encabezado($titulo); ?></h1>
    <p>Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal</p>

<?php include("pie.php"); ?>
pie.php
Código:
            <hr />
            <div align="center">Esto es el pie de la página</div>
    </body>
</html>
funciones.php
Código:
<?php 

function hacer_encabezado($titulo){  
    if(isset($titulo)){
        echo $titulo;
    } else {
        echo "Sin datos";
    }
}

?>
Muchas gracias por la ayuda!
  #2 (permalink)  
Antiguo 11/01/2013, 20:34
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Problema con el isset

Y la variable $titulo se la pasas a la funcion? veo que esta comentado $titulo.
  #3 (permalink)  
Antiguo 11/01/2013, 20:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con el isset

Bueno, supongo que la línea 9 donde salta el error es en index.php y no en funciones.php:

Código PHP:
Ver original
  1. <?php
  2. // Si $titulo no está definida, lógicamente saltará el error aquí, no dentro de la función
  3. ?>
  4.     <h1><?php hacer_encabezado($titulo); ?></h1>
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 11/01/2013, 21:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con el isset

Jeje, creo que a moreno_fa le hace falta sentido común.

Sin embargo con una ligera modificación dicho código es posible:
Código PHP:
function foo(&$bar) {
    return isset(
$bar) ? $bar '-';
}

echo 
foo($candy); 
Bueno, es un hack pero al fin y al cabo sirve.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 12/01/2013, 12:03
 
Fecha de Ingreso: marzo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con el isset

Si pero comento la variable $titulo porque quiero mostrar solamente "Sin datos", en cambio me sale esto:

"Notice: Undefined variable: titulo in /opt/lampp/htdocs/php/includes/Ejercicio 1/index.php on line 9
Sin datos"


Este es el codido de la pagina cuando me salta el error
Código:
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title><br />
<b>Notice</b>:  Undefined variable: titulo in <b>/opt/lampp/htdocs/php/includes/Ejercicio 1/cabecera.php</b> on line <b>5</b><br />
</title>
    </head>
    <body>
        <div align="center">Esto es la cabecera de la página</div>
        <hr />
    <h1><br />
<b>Notice</b>:  Undefined variable: titulo in <b>/opt/lampp/htdocs/php/includes/Ejercicio 1/index.php</b> on line <b>9</b><br />
Sin datos</h1>
    <p>Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal, Esto es el contenido de la página principal</p>

            <hr />
            <div align="center">Esto es el pie de la página</div>
    </body>
</html>
Estoy aprendiendo a programar con php. He seguido los pasos del video de Desarrolo Web
http://youtu.be/TNHBuqu-z4g?t=27m10s
  #6 (permalink)  
Antiguo 12/01/2013, 12:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con el isset

Lo que debes entender es el contexto donde está el isset(), que está dentro de la función.

Mientras que $titulo está fuera del alcance de la función hasta que la pasas como argumento, pero como no existe fuera de la función marcará error siempre.

Reflexiona un poco al respecto, y de paso consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 12/01/2013, 12:29
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Problema con el isset

Puedes ocultar el error con ésto: error_reporting(0); ponlo al comienzo de tu archivo
  #8 (permalink)  
Antiguo 12/01/2013, 12:35
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con el isset

Cita:
Iniciado por rodrigo791 Ver Mensaje
Puedes ocultar el error con ésto: error_reporting(0); ponlo al comienzo de tu archivo
Los errores se solucionan primero.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 12/01/2013, 12:49
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Problema con el isset

Si me equivoqué al decir "error", porque no lo es, es una advertencia, nada mas
  #10 (permalink)  
Antiguo 12/01/2013, 13:02
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con el isset

Las advertencias tampoco se ocultan y menos por un mal manejo del lenguaje, se solucionan.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #11 (permalink)  
Antiguo 12/01/2013, 13:10
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Problema con el isset

Es verdad concuerdo con eso, pero en éste caso no tenes otra chance.
si haces algo como ésto
Código PHP:
Ver original
  1. //$mensaje = "hola";
  2.  
  3. function mostrarMensaje($mensaje){
  4.  
  5. if(isset($mensaje)){
  6. echo $mensaje;
  7. }else{
  8.  
  9. echo "no existe mensaje";
  10.  
  11. }
  12. }
  13. mostrarMensaje($mensaje);

esto no está mal programado, simplemente llamo una variable que está comentada, sin embargo por como funciona el interprete PHP las advertencias aparecen.
  #12 (permalink)  
Antiguo 12/01/2013, 13:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con el isset

Cita:
Iniciado por rodrigo791 Ver Mensaje
Es verdad concuerdo con eso, pero en éste caso no tenes otra chance.
si haces algo como ésto
Código PHP:
Ver original
  1. //$mensaje = "hola";
  2.  
  3. function mostrarMensaje($mensaje){
  4.  
  5. if(isset($mensaje)){
  6. echo $mensaje;
  7. }else{
  8.  
  9. echo "no existe mensaje";
  10.  
  11. }
  12. }
  13. mostrarMensaje($mensaje);

esto no está mal programado, simplemente llamo una variable que está comentada, sin embargo por como funciona el interprete PHP las advertencias aparecen.
Si hay algo mal ahí, el hecho de que $mensaje fuera de la función no está definida antes de ser usada. Dentro de la función no queda duda, pero fuera es donde está el error.

Si bien no es grave es un mal manejo de la función isset() porque no se usa donde el contexto lo requiere, de ahí la advertencia.

En resumen el problema no es el isset() ni la función, es el contexto de la variable a utilizar.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 12/01/2013, 13:21
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Problema con el isset

Es verdad... sito lo anterior...


Código PHP:

function is($sur)
{
if (!isset(
$sur)) return false;
if (
$sur!==false) return true;
return 
false;

http://php.net/manual/es/function.isset.php
__________________
Zreep
  #14 (permalink)  
Antiguo 12/01/2013, 14:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con el isset

zreep, tu ejemplo, citado del manual de PHP, no tiene sentido, porque creas una función para hacer lo que ya hace isset(), pero con el plus de recibir un mensaje de variable no definida.

La solución al problema original es que, después de cabecera, debe incluir una condicional directamente:

Código PHP:
Ver original
  1. if( ! isset($variable)) {
  2.     $variable = 'No definida';
  3. }
  4.  
  5. // Si la cosa es tratar de ahorrar líneas, entonces
  6. if( ! isset($variable))
  7.     $variable = 'No definida';
  8.  
  9. // Y si aún quiere resumir todavía más:
  10. ( ! isset($variable) && $variable = 'No definida');

El error, y es lo que ha insistido pateketrueke, es que no puedes usar como parámetro una variable que no se ha definido, aunque PHP te diga que es una advertencia, es un error de lógica y, sí, también de sentido común.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 12/01/2013, 14:26
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Problema con el isset

Interesante, cada día se aprende mas por acá
  #16 (permalink)  
Antiguo 12/01/2013, 20:56
 
Fecha de Ingreso: marzo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con el isset

He hecho lo que ha dicho nuestro compañero Triby y funciona perfectamente. Pero yo ansioso de intentar solucionar este problema por mis medios he evitado el problema haciendo un pequeño cambio en el archivo funciones.php, el código ha quedado así:

Código:
<?php

global $titulo;

function hacer_encabezado($titulo){
    if(isset($titulo)){
        echo $titulo;
    } else {
        echo "Sin datos";
    }
}

?>
No se yo si esto estaría del todo bien, por eso me gustaría saber vuestra opinión. Por lo menos tal como esta no salta ninguna notificación.

Perdonad mi ignorancia. Muchas gracias de nuevo
  #17 (permalink)  
Antiguo 12/01/2013, 21:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con el isset

Seguro que sólo con esa línea "arreglaste" el error, o también cambiaste la configuración de mensajes de PHP?

Qué efecto puede tener global $variable; si no se ha definido esa variable? Además, el mensaje lo obtienes en index.php, en verdad crees que pueda solucionar algo dentro de funciones.php?

Anteponer una @ en la línea donde obtienes el mensaje, también lo oculta, te evita crear cosas ilógicas y sin sentido como ese global y es igual de efectivo para "maquillar" el problema... pero sin solucionarlo.

Ahora, la cuestión real es si quieres aprender a codificar correctamente o vas a aplicar parches cada que haya un error (o mensaje). Al final, la decisión es tuya.
__________________
- León, Guanajuato
- GV-Foto
  #18 (permalink)  
Antiguo 13/01/2013, 08:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con el isset

Yo quiero tener un código sin ningún error ni notificaciones. Lo que pasa es que estoy mirando el vídeo, lo estoy haciendo igual y a mi me salen notificaciones que a el no le salen... No se muy bien lo que he echo incluyendo la linea global $titulo; por eso he pedido lo que vuestras opiniones sobre si estaría bien o no. Ahora ya entiendo porque salta la notificación, no puedo pasar en una función una variable que no ha sido definida antes. En todo caso haré lo que ha dicho Triby y podemos dar el el problema por solucionado. Muchas gracias a todos

Etiquetas: funciones, html, variables
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 15:06.