Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/04/2016, 00:47
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 2 meses
Puntos: 65
Error al ejecutar dos funciones parecidas dentro de dos while parecidos

Hola.

Estoy haciendo un sistema de amistades donde primero hago la consulta de las amistades confirmadas comprobando el id_usuario por la url, el id_envia y el id_recibe en la tabla amistades:

Código PHP:
$query "SELECT * FROM amistades WHERE id_envia = '{$id_usuario}' && confirmado = '1' || id_recibe = '{$id_usuario}' && confirmado = '1'"
Una vez que tengo todas las amistades confirmadas hago otras dos consultas, una para ver si mi amistad a mostrar es por el id_envia y otra por el id_recibe.

Código PHP:
if($id_envia == $id_usuario){
                     
$query_nick_recibe "SELECT *, DATE_FORMAT(fecha_de_nacimiento,'%m-%d') as fecha_de_nacimiento FROM usuarios  WHERE id_usuario = '{$id_recibe}'"
o

Código PHP:
if($id_recibe == $id_usuario){
                     
$query_nick_envia "SELECT *, DATE_FORMAT(fecha_de_nacimiento,'%m-%d') as fecha_de_nacimiento FROM usuarios  WHERE id_usuario = '{$id_envia}'"
Hasta aquí todo bien ya que me muestra todos los nicks de los usuarios amigos que tengo.
Código PHP:
 $query "SELECT * FROM amistades WHERE id_envia = '{$id_usuario}' && confirmado = '1' || id_recibe = '{$id_usuario}' && confirmado = '1'";     
     
$amistades_query mysqli_query($conexion$query);
     if(
mysqli_num_rows($amistades_query) == 0){         
         echo 
"<p>No tiene amigos confirmados</p>";                     
     }
     
//Si tiene amigos, mostrar lista
     
else{         
         echo 
'<article class="perfil-usuario">';
         echo 
'<ul>';
         
//Consulto las amistades confirmadas     
         
while ($fila mysqli_fetch_array($amistades_query)) {
             
$id_amistad $fila['id_amistad'];
             
$id_envia $fila['id_envia'];            
             
$id_recibe $fila['id_recibe'];             
                
//Consulto para buscar al usuario en id_recibe
                 //Si el id_envia es el mismo que el id_usuario entonces muestro el id_recibe ya que es el usuario amigo
                 
if($id_envia == $id_usuario){
                     
$query_nick_recibe "SELECT *, DATE_FORMAT(fecha_de_nacimiento,'%m-%d') as fecha_de_nacimiento FROM usuarios  WHERE id_usuario = '{$id_recibe}'";                
                    
$usuario_query mysqli_query($conexion$query_nick_recibe);                    
                     while (
$fila mysqli_fetch_array($usuario_query)) {                             
                         
$id_usuario_amigo $fila['id_usuario'];                                                
                         
$usuario_nick $fila['usuario'];
                         
$email_amigo $fila['email'];
                         
$fecha_de_cumpleano $fila['fecha_de_nacimiento'];                             
                         echo 
'<li class="amistad"><a href="usuarios.php?id='.$id_usuario_amigo.'" accesskey="m" title="'.$usuario_nick.'">'.$usuario_nick.'</a></li>';

                         
//---------Aquí está el error ------//
                                               //-------- Comprobando fecha de cumpleaños --------------//                

                       
function diferencia_de_dias($dia1$dia2){
                            if (!
is_integer($dia1)) $dia1 strtotime($dia1);
                            if (!
is_integer($dia2)) $dia2 strtotime($dia2);  
                            return 
floor(abs($dia1 $dia2) / 60 60 24);
                        }                                            
                      
                        
$fecha_de_cumpleanos date("Y")."-".$fecha_de_cumpleano;
                        
date_default_timezone_set("Europe/Madrid");
                        
$fecha_actual date("Y-m-d");                         
                        
$dias diferencia_de_dias($fecha_actual,$fecha_de_cumpleanos);


                        if(
$dias 15){
                            echo 
"<span><strong> - Faltan menos de ".$dias." día para este cumpleaños y entonces envío un aviso de correo.</strong></span>";
                        }
                        else{
                            echo 
"No es fecha de avisar aun ya que todavía quedan " $dias;
                        }

                        
//-------- Fin Comprobando fecha de cumpleaños --------------//                      

                     
}                                          
                 }
//Fin Si el id_envia es el mismo que el id_usuario entonces muestro el id_recibe ya que es el usuario amigo
                 //Fin Consulto para buscar al usuario en id_recibe

                 //Consulto para buscar al usuario en id_envia
                 //Si el id_recibe es el mismo que el id_usuario entonces muestro el id_envia ya que es el usuario amigo
                 
if($id_recibe == $id_usuario){
                     
$query_nick_envia "SELECT *, DATE_FORMAT(fecha_de_nacimiento,'%m-%d') as fecha_de_nacimiento FROM usuarios  WHERE id_usuario = '{$id_envia}'";                
                    
$usuario_query_e mysqli_query($conexion$query_nick_envia);                    
                     while (
$fila mysqli_fetch_array($usuario_query_e)) {                     
                         
$id_usuario_amigo $fila['id_usuario'];                                                
                         
$usuario_nick $fila['usuario'];
                         
$email_amigo $fila['email'];
                         
$fecha_de_cumpleano $fila['fecha_de_nacimiento'];                         
                         echo 
'<li class="amistad"><a href="usuarios.php?id='.$id_usuario_amigo.'" accesskey="m" title="'.$usuario_nick.'">'.$usuario_nick.'</a></li>';

                         
//-------- Comprobando fecha de cumpleaños --------------//                

                        
function diferencia_de_dias_($dia1$dia2){
                            if (!
is_integer($dia1)) $dia1 strtotime($dia1);
                            if (!
is_integer($dia2)) $dia2 strtotime($dia2);  
                            return 
floor(abs($dia1 $dia2) / 60 60 24);
                        }                                            
                      
                        
$fecha_de_cumpleanos date("Y")."-".$fecha_de_cumpleano;
                        
date_default_timezone_set("Europe/Madrid");
                        
$fecha_actual date("Y-m-d");                         
                        
$dias diferencia_de_dias_($fecha_actual,$fecha_de_cumpleanos);


                        if(
$dias 15){
                            echo 
"<span><strong> - Faltan menos de ".$dias." día para este cumpleaños y entonces envío un aviso de correo.</strong></span>";
                        }
                        else{
                            echo 
"No es fecha de avisar aun ya que todavía quedan ".$dias;
                        }


                        
//-------- Fin Comprobando fecha de cumpleaños --------------//    
                               
                     
}                                          
                 }
//Fin Si el id_recibe es el mismo que el id_usuario entonces muestro el id_envia ya que es el usuario amigo             
             //Fin Consulto para buscar al usuario en id_envia
         
}//Fin Consulto las amistades confirmadas     
         
echo '</ul>';                         
         echo 
'</article>';            
     }
//Fin si tiene amigos mostrar lista 
Sin embargo cuando intento meter una función para comprobar las fechas de cumpleaños en la opción "consulto para buscar al usuario en id_recibe" solo me muestra uno o dos cuando por ejemplo tiene cuatro o cinco amistades, es como si al poner la palabra function dentro de ese while solo lo hiciese el recorrido una vez, sin embargo en la opción consulto para buscar al usuario en id_envia pongo la misma función y nunca falla y la verdad no encuentro el error por mas pruebas que hago.

¿Qué tengo que cambiar quitar o añadir?

Saludos.