Foros del Web » Programando para Internet » PHP »

Problemas foreach

Estas en el tema de Problemas foreach en el foro de PHP en Foros del Web. Buenas tardes, tengo un problemilla que no consigo resolver y a ver si alguien está más inspirado que yo en estos momentos. Necesito que a ...
  #1 (permalink)  
Antiguo 10/09/2012, 06:48
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Problemas foreach

Buenas tardes,

tengo un problemilla que no consigo resolver y a ver si alguien está más inspirado que yo en estos momentos. Necesito que a partir de un mes/año que seleccionamos, me saque un listado de usuarios con los días en concreto que no han accedido a la aplicación en ese mes.

Con esta primera función, obtengo un listado de los consultores y lo guardo en un array.

Código:
 public function ObtenerConsultores(){
    
   	$query = "Select consultores.Ident_consultor FROM consultores WHERE ((consultores.f_fin != '' OR consultores.f_fin != '0000-00-00') AND consultores.esconsultor = '1');";
	$consulta = new Consulta($query);
	echo $query;
	while($fila = $consulta->obtener_fila()) {
		$consultores[] = array(
				'Ident_consultor'	=> 	$fila['Ident_consultor']);
	}
		
	return $consultores;
    echo $consultores;

 }
Con esta segunda función, quiero que por cada usuario (consultor), me saque los días que no han accedido a la herramienta.
Código:
    public function ConsultoresNoReportados($mes, $ano){
 

$user = new usuario();

$cons= $user->ObtenerConsultores();

    foreach($cons as $consultores) {
	
$consultor_no_report = $consultores['Ident_consultor'];

	$query="Select calendario_dias.dia AS dia from calendario_dias WHERE calendario_dias.mes = '$mes' AND dia NOT IN (SELECT DISTINCT trabajos.dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$ano' AND consultores.Ident_consultor = '$consultor_no_report');";
	echo $query;
	$consulta = new Consulta($query2);
	
	while($fila = $consulta->obtener_fila()) {
		$consultores_no_report[] = array(
				'consultor'	=> 	$fila['consultor'],               		 
				'dia' 			=>	$fila['dia']);
	}
	
    }
    
    return $consultores_no_report;
    
    if(!$consulta) 
	    throw new Exception("Al parecer han reportado todos.");

    }
El problema es que me ejecuta la consulta una sóla vez, para el primer consultor que obtiene de la lista.

Este es el código que llama a la función.

Código:
        case 'verinforme':
		$tpl_cabecera->set('subnivel',' > Consultores que aún no han reportado');

		if ((isset($_SESSION['mess'])) && (isset($_SESSION['ano']))){
        
			try{
			    
		$tpl->set('resultado_informe', usuario::ConsultoresNoReportados($_SESSION['mess'],$_SESSION['ano']));
		

			} catch (Exception $e) {
                            $tpl->set('error_msg',$e->getMessage());  
                }	}
		
		else{
			try{
		$tpl->set('resultado_informe', usuario::ConsultoresNoReportados($_POST['mess'],$_POST['ano']));
		

		$_SESSION['mess'] = $_POST['mess'];
		$_SESSION['fechafin'] = $_POST['ano'];
		
			} catch (Exception $e) {
                            $tpl->set('error_msg',$e->getMessage());  
                }			
		}
		$tpl->set('accion','reportarinforme');
		$tpl_cuerpo = 'consultores_no_reportado_ver.tpl.php';
        break;
Y aqui se muestran los datos

Código:
<?php 
<table>
if (isset($resultado_informe) && count($resultado_informe)>0) {
    $i=1;
    foreach($resultado_informe as $resultado) {
?>



<tr>
    <td><?=$resultado['consultor'];?></td>
    <td><?=$resultado['dia'];?></td>
</tr>

<?php
    }}
</table>
  #2 (permalink)  
Antiguo 11/09/2012, 02:09
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas foreach

¿Nadie más inspirado que yo?

public function ConsultoresNoReportados($mes, $ano){

Código:
$user = new usuario();

$cons= $user->ObtenerConsultores();

    foreach($cons as $consultores) {
	
$consultor_no_report = $consultores['Ident_consultor'];

	$query="Select calendario_dias.dia AS dia from calendario_dias WHERE calendario_dias.mes = '$mes' AND dia NOT IN (SELECT DISTINCT trabajos.dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$ano' AND consultores.Ident_consultor = '$consultor_no_report');";
	echo $query;
	$consulta = new Consulta($query2);
	
	while($fila = $consulta->obtener_fila()) {
		$consultores_no_report[] = array(
				'consultor'	=> 	$fila['consultor'],               		 
				'dia' 			=>	$fila['dia']);
	}
	
    }
    
    return $consultores_no_report;
    
    if(!$consulta) 
	    throw new Exception("Al parecer han reportado todos.");

    }
Hay otra cosa que no he llegado a entender muy bien. Si pongo
$consultor_no_report = $consultores['Ident_consultor'][$i]; //$i=0 y con un $i++
Me hace la consulta nuevamente una sóla vez, pero sin embargo me saca el valor de Ident_consultor = 5, que ni si quiera existe en la base de datos.

Por otro lado, la función ObtenerConsultores me devueve un array ¿estoy en lo cierto? No entiendo entonces por qué el foreach se me ejecuta una sola vez...!!!!

gracias por anticipado!
  #3 (permalink)  
Antiguo 11/09/2012, 05:39
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas foreach

solved

para variar error de despistado.... estaba ejecutando una consulta distinta a la que quería
Código:
	$consulta = new Consulta($query);
en vez de
Código:
$consulta = new Consulta($query2);

Etiquetas: foreach, usuarios
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 14:04.