Foros del Web » Programando para Internet » PHP »

consulta facil de contestar, creo...

Estas en el tema de consulta facil de contestar, creo... en el foro de PHP en Foros del Web. 1.- ¿que significa esta expresion, pregunta si la variable esta vacia?? --> Código PHP: if (! $opcion ) {  2.- tiene sentido lo siguiente?? Código PHP: <?  ...
  #1 (permalink)  
Antiguo 23/04/2003, 14:05
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
consulta facil de contestar, creo...

1.- ¿que significa esta expresion, pregunta si la variable esta vacia?? -->
Código PHP:
if (!$opcion) { 
2.- tiene sentido lo siguiente??

Código PHP:
<? if (!$opcion) { ?>
<html>
.............
<a href="?opcion=1"> opcion 1 </a>
..............
</html>
<? 
} else { 
include(
$opcion.".php");
}
?>
  #2 (permalink)  
Antiguo 23/04/2003, 14:54
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Supongo que valdrá, yo a veces uso lo contrario:
Código PHP:
<? if ($opcion) { 
include(
$opcion.".php");
} else { 
?>
<html>
.............
<a href="?opcion=1"> opcion 1 </a>
..............
</html>
<?
}
?>
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #3 (permalink)  
Antiguo 23/04/2003, 15:40
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
PHP:--------------------------------------------------------------------------------
<? if (!$opcion) { ?>
<html>
.............
<a href="?opcion=1"> opcion 1 </a>
..............
</html>
<?
} else {
include($opcion.".php");
}
?>

--------------------------------------------------------------------------------
a ver si lo entiendo:
1.- si opcion esta vacia, muestra el contenido de la pagina
2.- si hacemos clic sobre un link, la variable tomara un valor, en este caso 1
3.- al tomar la variable ese valor, no cumple la condicion (if) y ejecuta el else...

hasta ahi bien? no? lo entendi?

que hace el include? quizas no tenga claro el concepto de include... por favor expliquenme. gracias.
  #4 (permalink)  
Antiguo 23/04/2003, 16:17
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Ese concepto de usar !$opcion o $opcion para saber si existe una variable es erroneo y es una mala practica que debe abandonarse. Es una de las cargas que se debe al origen de PHP, pero bueno, basta de lamentaciones y vayamos a la explicacion.

Primero, por que esta mal. Incluso PHP te da un mensaje de error, bueno un NOTICE de los que solo se ven si tenemos configurado PHP para que muestre todo tipo de mensaje de error. Da un NOTICE: se intento acceder a una variable no definida. Pero supongamos que lo tenemos desactivado, que nos importa un comino los NOTICE. Probad estos codigos:
Código PHP:
<?php
$opcion
=0;
if (!
$opcion) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion=false;
if (!
$opcion) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion=NULL;
if (!
$opcion) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion='';
if (!
$opcion) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
?>
En ambos casos $opcion esta definida, pero muestra el mensaje de no definida. ¿Por que? Porque !$opcion devuelve true cuando $opcion se evalua a false. Y PHP evalua a false los valores 0, false, NULL y cadena vacia ('').

Por eso lo correcto para comprobar si existe una variable es usar la funcion isset():
Código PHP:
<?php
if (!isset($opcion)) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
$opcion=0;
if (!isset(
$opcion)) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion=false;
if (!isset(
$opcion)) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion=NULL;
if (!isset(
$opcion)) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
// o
$opcion='';
if (!isset(
$opcion)) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";
}
?>
En este caso sale el mensaje de no definida en el primer caso (cuando no esta definida) y cuando tiene el valor NULL.

Y quizas entonces os pregunteis por que tambien funciona (error de concepto) !$opcion para detectar que la variable no existe. Por la "facilidad" de uso de PHP. Cuando intentas acceder a una variable que no esta definida, PHP manda el NOTICE y "da" a la variable el valor NULL, con lo que !NULL es true y por eso funciona.

Espero haberme explicado bien y que a partir de ahora useis isset() para mirar si esta definida una variable.

Saludos.

PD: ya no tengo saliva para lo del include(), pero creo que la descripcion del manual era bastante clara.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 23/04/2003, 23:02
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
josemi, muy bueno el tuto, esta como para ponerlo en favoritas

Igual me "atrevo" a poner un ejemplo mas de prácticas erroneas (para PHP4 jejeje)...
Código PHP:
$opcion="0";   // cero como cadena
if (!$opcion) {
    echo 
"\$opcion no esta definida<br>";
} else {
    echo 
"\$opcion vale $opcion<br>";

Saludos!
  #6 (permalink)  
Antiguo 24/04/2003, 03:12
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Si fran86, esa se me olvido. El string "0" se evalua al entero 0 que se evalua a false.

La verdad es que el mensaje me salio un poco "co*azo", pero luego le dare una vuelta y lo pondre en las FAQs bajo el epigrafe "Buenas maneras".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 24/04/2003, 03:22
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
segun entiendo, la funcion del include no es "incluir" un codigo como parte de otro codigo, como podria ser incluir una cabecera..... sino lo que indica es que ejecute o cargue otro archivo para su visualizacion o lo que corresponda, resumiendo hace una llamada a 1 archivo. ¡estoy equivocado?
  #8 (permalink)  
Antiguo 24/04/2003, 04:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Si y no. Dependiendo como lo uses. Aunque en resumen si es incluir el codigo de otro fichero en el que lo incluye. Si lo incluyes poniendo el path:
Código PHP:
include("path/al/fichero/fichero.php"); 
lo que incluyes es el codigo de fichero.php . Es como si hubieras tecleado el contenido de fichero.php dentro del fichero actual. Es mas, en fichero.php puedes tener codigo que use variables que has definido en el fichero que lo incluye. Con lo cual se puede decir que incluye el codigo y lo ejecuta, para luego seguir cn el resto del codigo del fichero que lo incluye.

Resumiendo este codigo:
Código PHP:
<?php
// p1.php
include("p2.php");
echo 
"<br>Adios";
?>
Código PHP:
<?php
// p2.php
echo "Hola<br>";
?>
es para PHP igualito que
Código PHP:
<?php
// solo un fichero
echo "Hola<br>";
echo 
"<br>Adios";
?>
Sin embargo, si pones la URL:
Código PHP:
include("http://www.dominio.com/fichero.php"); 
lo que incluyes es el HTML generado por fichero.php . Lo que incluyes es lo que recibiria (mas o menos) el navegador si intentas acceder a esa URL. Incluyes el codigo HTML/javascript. En fichero.php no tendrias acceso a las variables del fichero que lo incluye.

Como antes, este codigo:
Código PHP:
<?php
// p1.php
include("http://www.dominio.com/p2.php");
echo 
"<br>Adios";
?>
Código PHP:
<?php
// p2.php
echo "Hola<br>";
?>
es para PHP igualito que
Código PHP:
<?php
// solo un fichero
?>
Hola<br>
<?php
echo "<br>Adios";
?>
Espero haberte aclarado algo.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 12:53.