Foros del Web » Programando para Internet » PHP »

Problemas para entrar en un bucle

Estas en el tema de Problemas para entrar en un bucle en el foro de PHP en Foros del Web. Hola amigos, tengo el siguiente código: Cita: Código PHP: <?php include( 'functions.php' );    //CONEXIÓN A LA BASE DE DATOS   Conectarse ();        //CONSULTA VISTA TERMINALES      $term  =  ...
  #1 (permalink)  
Antiguo 10/03/2009, 04:31
 
Fecha de Ingreso: diciembre-2008
Mensajes: 21
Antigüedad: 15 años, 4 meses
Puntos: 0
Problemas para entrar en un bucle

Hola amigos, tengo el siguiente código:

Cita:
Código PHP:
<?php
include('functions.php'); 
 

//CONEXIÓN A LA BASE DE DATOS
 
Conectarse();
    
 
//CONSULTA VISTA TERMINALES
 
  
$term mssql_query("SELECT * FROM vTraficoIrregularCyD WHERE [Terminal]='DCC0044056A4'");
 
  
//TABLA POLLS
 
  /* echo "<table border=\"3\">\n";
        echo "<tr><td><center><b>TERMINAL</b></td><td><center><b>ID</b></td><td><center><b>INICIO</b></td>
              <td><center><b>FIN</b></td><td><center><b>EMITIDOS</b></td>
              <td><center><b>TEORICOS</b></td><td><center><b>DESVIO</b></td>
              <td><center><b>INTERVALO</b></td><td><center><b>POLL</b></td><td><center><b>FECHA</b></td></tr>";    
     */
     //Empezamos si existen terminales en la vista
     
       
while($linea=mssql_fetch_array($term)){
     
       
       
//Terminales D
   
         
if($linea['Tipo']==5){
       
   
          
//Guardo variables que me harán falta
 
            
$idtd $linea['Id Terminal'];
            
$terminal $linea['Terminal'];
             
$intd $linea['Intervalo programado'];
            
$emitidos $linea['Mensajes Emitidos'];
             
$teoricos $linea['Mensajes Teoricos'];
             
$desvio $emitidos $teoricos;
             
       
       
//Guardamos las fechas(GMT)inicio y fin como números enteros y le sumamos una hora(GMT+1)para compararlas con
       //la fecha de terminales_tx_spool(GMT+1) 
         
         
$inicio = ((strtotime($linea['Fecha Inicio']))+3600);
         
$fin = ((strtotime($linea['Fecha Fin']))+3600);
       
         
       
       
//Pasamos las fechas inicio y fin al formato de sql para incluirlas en el query
         
         
$inicio1 date("d-m-Y H:i:s"$inicio);
         
$fin1 date("d-m-Y H:i:s"$fin);
                     
        
//Miramos si hay programaciones en la tabla terminales_tx_spool
        
         
$prog=mssql_query("SELECT terminalid, messageid, intervalo, fecha FROM terminales_tx_spool
                                 WHERE intervalo is not null"
);
             
                                       
                                   
             
//Si hay algo en $prog
             
             
if($prog==true){
             
              
//Buscamos la última programación correcta, seleccionamos filas de terminales_tx_spool
           //Buscamos la última prog. correcta en la tabla terminales_rx_status_log(mensaje 106)
        
            
$statuslog=mssql_query("SELECT top 1 terminales_tx_spool.intervalo, terminales.identificador
                                                ,terminales_rx_status_log.estado, terminales_rx_status_log.fecha
                                    FROM terminales_rx_status_log 
                    INNER JOIN terminales_tx_spool ON terminales_rx_status_log.messageid = terminales_tx_spool.messageid 
                    INNER JOIN terminales ON terminales_tx_spool.terminalid = terminales.ref
                      WHERE terminales.identificador ='$terminal' and terminales_rx_status_log.estado = 106 
                             and terminales_tx_spool.intervalo is not null
                             ORDER BY terminales_rx_status_log.fecha desc"
);    
              
           
           
//Si está en terminales_rx_status_log el mensaje que hace efectiva la programación(106)entra                                                                       
            
              
$intervalo 0;
              
             
//Recorremos las filas de terminales_rx_status_log
                                             
              
while($linea1=mssql_fetch_array($statuslog)){
            
                     
                    
$intervalo=$linea1['intervalo'];
                     
              
              }
//while(linea1) 
              
              
if($intervalo!=0){
                  
              
              echo
"El Terminal $terminal tiene un último intervalo efectivo programado a $intervalo"."</br>";   
              
              }
//if(intervalo!=0)
              
                
if($intervalo==0){
                   
                                   
                    
$status=mssql_query("SELECT top 1  terminales_rx_status.messageid, terminales_rx_status.terminalid
                                                    ,terminales_rx_status.messagestatus,terminales_rx_status.gatewaytimestamp
                                                    ,terminales_tx_spool.terminalid,terminales_tx_spool.intervalo
                                                 ,terminales_tx_spool.messageid,terminales_tx_spool.fecha
                                                 ,terminales.ref, terminales.identificador
 
                                    FROM terminales_tx_spool 
                            INNER JOIN terminales_rx_status on terminales_tx_spool.messageid=terminales_rx_status.messageid
                            INNER JOIN terminales on terminales_tx_spool.terminalid=terminales.ref
                                    WHERE terminales_rx_status.messagestatus=6 and terminales_tx_spool.intervalo is not null
                                        and terminales.identificador='$terminal' ORDER BY gatewaytimestamp desc"
);
           
                               
                     while(
$linea2=mssql_fetch_array($status)){
                    
                       
$intervalo1=$linea2['intervalo'];
                      
                        echo
"El Terminal $terminal tiene un último intervalo efectivo programado a $intervalo1"."</br>";
   
          
                      }
//while(linea2)
                                                                                                                                                                                   
               
}//if(intervalo=0)
  
    
               
}//if($message)                        
       
         // echo"hasta aqui llega";
                                                            
     
             
else{
             
                         
$terminales=mssql_query("SELECT * FROM terminales WHERE identificador='$terminal'");
             
                            while(
$linea3=mssql_fetch_array($terminales)){
                 
                             
$intervalo2=$linea3['intervalo'];
                 
                             echo
"El Terminal $terminal tiene un intervalo programado a $intervalo2"."</br>"
                 
             }
//While(linea3)
                        
                 
         
}//else 
         
        
}//IF(TERMD)
     
       
}//WHILE(TERM) 
       
        
Desconectarse();
           
?>
El problema lo tengo en el último bucle else, pues no me entra en el , también he probado escribiendo: if($prog==false) ó if($prog!=true) y otras cosas, y no me entra en el bucles de ningún modo, estoy seguro que el problema está en ese bucle , porque si no pongo ningún bucle entra y realiza las acciones perfectamente, haber si alguien me puede decir que estoy haciendo mal, gracias.
  #2 (permalink)  
Antiguo 10/03/2009, 07:04
 
Fecha de Ingreso: febrero-2009
Ubicación: Cusco - Peru
Mensajes: 142
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problemas para entrar en un bucle

no conozco muy bien cmo maneja con mssqlquery, pero debe asemejarse a mysql_query, asi q si deseas ver si hay registros seleccionados, lo que deberias de utilizar seria su semejante del mysql_fetch_row, con el cual puedes sabewr si tu consulta te devolvio algun valor y asi entrar a tu sentencia, ya q un if o un ifnot no funciona en este caso.
Seria algo asi, pero OJO Q ESTO ES PARA MYSQL, para mssql debe haber algo similar;

Código PHP:
if (mysql_fetch_row($term)>0)
{
  echo 
"hay valores por eso estoy aqui";
}
else
  echo 
"no encontro ningun resultado"
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:43.