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.