Foros del Web » Programando para Internet » PHP »

Problema includes

Estas en el tema de Problema includes en el foro de PHP en Foros del Web. Hola a todos, a ver si alguien puede echarme un cable. Estoy haciendo una web y utilizo php para el cambio de idioma. Funciona bien, ...
  #1 (permalink)  
Antiguo 22/05/2012, 10:12
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Problema includes

Hola a todos, a ver si alguien puede echarme un cable.
Estoy haciendo una web y utilizo php para el cambio de idioma. Funciona bien, pero a la hora de validarlo con w3c me salta un error, y me he dado cuenta que es porque hago dos veces un mismo include en el else.
La cuestión es que el else lo utilizo para que el idioma por defecto sea español, si quito el else no me tira el error pero la pagina sale sin idioma hasta que se hace clic en uno de ellos.

Este es el codigo:


<?php
session_start();
$_SESSION['idioma_s'];
if(isset($_GET['lg'])){
$_SESSION['idioma_s']=$_GET['lg'];
}
$lg=$_SESSION['idioma_s'];
if($lg=="es" ||$lg=="en" ||$lg=="vl"){
include($lg.".inc.php");
}
else{
$lg="es";
include($lg.".inc.php");
}

?>

Necesito ayuda, muchas gracias.
  #2 (permalink)  
Antiguo 22/05/2012, 10:22
 
Fecha de Ingreso: diciembre-2011
Mensajes: 159
Antigüedad: 12 años, 11 meses
Puntos: 18
Respuesta: Problema includes

Hola

No se por que incluyes

$lg="es";

en el else, la variable $lg la estas llamando afuera del if, o sea ya la tienes.

en el primer if estas diciendo que si es "es" o "en" o "vl" das un include, si no es ningungo de estos entonces usas el otro include.

creo que deberias quedar

$lg=$_SESSION['idioma_s'];

if($lg=="en" ||$lg=="vl"){
include($lg.".inc.php");
}
else{
include($lg.".inc.php");
}

Saludos
  #3 (permalink)  
Antiguo 22/05/2012, 10:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

Gracias nestornoe, el else que tengo yo sirve para que el idioma por defecto sea "es". Ya he probado lo que tu me has dicho, pero me da todavia mas errores.

¿Otra idea?

Gracias.
  #4 (permalink)  
Antiguo 22/05/2012, 10:41
 
Fecha de Ingreso: diciembre-2011
Mensajes: 159
Antigüedad: 12 años, 11 meses
Puntos: 18
Respuesta: Problema includes

Hola

entonces

<?php
session_start();
$_SESSION['idioma_s'];
if(isset($_GET['lg'])){
$_SESSION['idioma_s']=$_GET['lg'];
}
$lg=$_SESSION['idioma_s'];
if($lg=="en" ||$lg=="vl"){
$lg=$_SESSION['idioma_s'];
include($lg.".inc.php");
}
else{
$lg="es";
include($lg.".inc.php");
}
?>

pero que error te da? lo probe y solo me da el error de que no existe el archivo, pero no de sintaxis.

Saludos
  #5 (permalink)  
Antiguo 22/05/2012, 10:49
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

El problema está en los includes, funciona pero me da error en el w3c, he mirado el html resultante y me devuelve las cabeceras repitidas (DOCTYPE, etc...). Le quito uno de los includes y no me da error, pero al entrar en la pagina sale sin idioma.

A ver si sacamos algo en claro, gracias
  #6 (permalink)  
Antiguo 22/05/2012, 10:52
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Problema includes

Bueno esto como que esta muy complicado... a mi me parece que la forma mas facil es esta:

Código PHP:
Ver original
  1.  
  2. if(isset($_GET['lg'])){
  3. $_SESSION['idioma_s'] = $_GET['lg'];
  4. }else{
  5. $_SESSION['idioma_s'] = "es";
  6. }
  7.  
  8. $lg = $_SESSION['idioma_s'];
  9.  
  10. switch $lg{
  11. case "es":
  12. case "en":
  13. case "vl":
  14. default:
  15. include($lg.".inc.php");
  16. break
  17. }
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 22/05/2012, 11:01
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

Lo siento, pero sigue devolviendome html repetido y por lo tanto 2 errores en w3c

Alguna idea mas, por favor

Gracias
  #8 (permalink)  
Antiguo 22/05/2012, 11:21
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Problema includes

El codigo que te envie posee un error seria asi:

Código PHP:
Ver original
  1.  
  2. if(isset($_GET['lg'])){
  3. $_SESSION['idioma_s'] = $_GET['lg'];
  4. }else{
  5. $_SESSION['idioma_s'] = "es";
  6. }
  7.  
  8. $lg = $_SESSION['idioma_s'];
  9.  
  10. switch $lg{
  11. case "es":
  12. case "en":
  13. case "vl":
  14. include("$lg.inc.php");
  15. break;
  16. default:
  17. include("es.inc.php");
  18. break;
  19. }

Por otro lado la w3 debe decirte que error es y en que linea esta, fíjate bien a ver que es lo que esta arrojando el resultado.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #9 (permalink)  
Antiguo 22/05/2012, 11:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

Gracias jotaincubus, pero me sigue dando el mismo problema, el problema está en el fragmento php y hace que me devuelva html repetido, si lo quito no me da error, pero no funciona los idiomas.

Los errores son estos:

Line 13, Column 3: "DOCTYPE" declaration not allowed in instance

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o…


Error Line 14, Column 43: document type does not allow element "html" here

<html xmlns="http://www.w3.org/1999/xhtml">



The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).

Pero ya digo que son errores producidos por el php.

Se te ocurre algo, gracias.
  #10 (permalink)  
Antiguo 22/05/2012, 18:33
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Problema includes

la verdad no se como estas estructurando tu pagina, pero parece que la estructura no esta nada bien... ummm deberías separar las cabeceras del resto del código HTML mas o menos así:

HEADS.HTML
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <!-- aqui mas metas -->
  5. <title>Untitled Document</title>
  6. </head>

PRINCIPAL.PHP
Código HTML:
Ver original
  1. <?php include("HEADS.PHP") ?>
  2.  
  3. <?php include("lenguajes.php") ?>
  4. </body>
  5. </html>

Y no colocar las etiquetas de rigor dentro de los lenguajes... deberías buscar una mejor forma de estructurar, la verdad no se como estés manejando tu proyecto así que es muy difícil ayudarte.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #11 (permalink)  
Antiguo 23/05/2012, 01:56
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

Hola otra vez jotaincubus, dime que estoy haciendo mal, este es un archivo ejemplo y tambien me da el mismo error:

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>

<?php
session_start();
$_SESSION['idioma_s'];
if(isset($_GET['lg'])){
$_SESSION['idioma_s']=$_GET['lg'];
}
$lg=$_SESSION['idioma_s'];
if($lg=="es" ||$lg=="en" ||$lg=="vl"){
include($lg.".inc.php");
}
else{
$lg="es";
include($lg.".inc.php");
}
?>
</body>
</html>
  #12 (permalink)  
Antiguo 23/05/2012, 02:53
 
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema includes

Hola jotaincubus (perdona por ser tan pesado), ya no me da el error. Resulta que las paginas .php de los idiomas, ponia toda la cabecera (doctype, etc...) con el array y su traducción.
Luego en la pagina principal llamaba hacia el include de esas paginas, y entonces me devolvia el doctype de la pagina principal junto con el doctype de la pagina del idioma.
Ha dejado solamente el codigo php en las paginas de los idiomas y ya no hay errores.
Mi pregunta es ¿es correcto dejar el codigo php solamente?

Mil gracias.
  #13 (permalink)  
Antiguo 23/05/2012, 09:56
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Problema includes

Una pagina solo debe de tener un <head></head> un <doctype> y esos protocolos, de lo contrario te generara error...

Al usted tener una pagina con sus protocolos y despues hace un include de otra pagina que tiene tambien sus protocolos, PHP colocara tal cual esta el codigo de la segunda pagina, dando como resultado un doble protocolado en la pagina principal...

De hecho que si usted tiene una pagina que tiene el protocolado con charset="utf-8" y hace un include con un echo... Este echo sera tratado con el charset del protocolo de la pagina que hizo el include.

Es un poco abstracto pero eso es lo que te esta sucediendo.

Y dandote respuesta a tu pregunta SI ES CORRECTO ya que la pagina que hace el include ya tiene el protocoladol.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???

Última edición por jotaincubus; 23/05/2012 a las 10:20

Etiquetas: includes
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 21:14.