Foros del Web » Programando para Internet » PHP »

Problema lógico bucle for e includes

Estas en el tema de Problema lógico bucle for e includes en el foro de PHP en Foros del Web. Buenos días a todos, veamos, tengo un sistema para enviar correos a los clientes, envía bien, etc. Según el número de serie de la factura ...
  #1 (permalink)  
Antiguo 24/10/2012, 05:04
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Problema lógico bucle for e includes

Buenos días a todos,

veamos, tengo un sistema para enviar correos a los clientes, envía bien, etc. Según el número de serie de la factura (envío las facturas) lo tengo que enviar en un idioma u otro, he aquí la selección del idioma, creo que esto es bastante claro.

Código PHP:
/*seleccionamos un idioma*/
if ($serie == 'a' OR $serie == 'r'
{
$idioma='es'; require_once './idiomas/castellano.php';}
elseif (
$serie == 'c' OR $serie == 's' OR $serie == 'b' OR $serie == 'u'
{
$idioma='en'; require_once './idiomas/ingles_aleman.php';}    
else {
$idioma='en'; require_once './idiomas/ingles_aleman.php';} 
//si es de otra serie el idioma por defecto es inglés 
Entonces según el correo mete los ficheros que incluyen variables como $asunto = 'Tal cosa'. Más adelante al configurar el e-mail pues cargo esas variables.

Pero todo eso está dentro de un for para enviar todos los correos.

El primero lo envía bien, los siguientes los envía con el idioma y parámetros del primero. No cambia de idioma. Entiendo que es un problema de los require pero no se por qué.

Empiezo a pensar usando la lógica y tengo la siguiente duda que tal vez es donde radique el problema. Yo pensé que al hacerlo así, según el idioma, metería el fichero que necesita UNA VEZ y a la siguiente iteración del bucle ya estará incluído y por lo tanto no es necesario volver a incluirlo.

Pero tal vez la condición no influye al contenido, no se explicar esto. Es decir, que el if sólo hace que incluya o no el fichero la primera vez, la segunda ya está incluído y da igual que se seleccione el otro, el texto incluído forma parte del código y no le influye para nada el if realizado sino que se va a hacer si o si. No se si me explico, yo mismo me hago un lío.

Pongo un ejemplo práctico para explicarme:
Código PHP:
/*Fichero include nombre_espanol.php*/
$nombre "carlos"
Código PHP:
/*Fichero include nombre ingles.php*/
$nombre "charlie"
Código PHP:
//Solo es un ejemplo puede aver errores de sintaxis
//este sería el script
$idioma "ingles";
bucle que recorre un array
{     
    if (
$idioma == "ingles") {require_once 'nombre_ingles.php'}
    else if(
$idioma=="espanol") {require_once 'nombre_espanol.php'}
   echo 
$nombre;

Esa es la idea, si la pirmera vez el idioma es ingles y la segunda español. Que ocurre con nombre? el texto del require inglés sigue incluído, pero se cumple sólo según el if o al estar incluído se ejecuta si o si?

Espero que se me entienda. Se otras soluciones pero "necesito" saber como funciona porque sí, me estoy mareando de tanto pensar.
  #2 (permalink)  
Antiguo 24/10/2012, 05:17
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Problema lógico bucle for e includes

Acabo de crear este otro ejemplo completo donde se puede ver lo que digo. Pero no se internamente como funciona. ¿Alguna manera de ver el codigo PHP mientras se ejecuta? Nunca lo he hecho.

Código PHP:
<?php
$idiomas
[0]="es";
$idiomas[1]="en";
$idiomas[2]="es";
$idiomas[3]="es";
$idiomas[4]="es";

foreach(
$idiomas as $idioma){    
    if (
$idioma=="es") {
        require_once 
'nombre_es.php';
    }
    elseif (
$idioma=="en") {
        require_once 
'nombre_en.php';
    }
    else {require_once 
'nombre_en.php';
    }
    echo 
$nombre;echo "<br />";    
}
?>
El resultado es:
Código:
carlos
charlie
charlie
charlie
charlie
¿Pero por qué?
Entiendo que una vez incluídos los require_once dejan de estar en la condición y siempre se ejecutan. O es que hago algo mal?

Actualización: cambiando require_once por require si funciona. Pero vuelvo a lo mismo, ¿por qué?
Eso quiere decir que al volver a pasar el require ya no existe y hay que volver a incluirlo?

Última edición por alyciashape; 24/10/2012 a las 05:25

Etiquetas: bucle, includes, 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 16:33.