I am trying to load information from a card based on its id.
Tables where I show the information:
create table reporteCambios(
id_repcambio int not null AUTO_INCREMENT,
id int not null,
id_client int not null,
mes_reporte varchar(100) not null,
PRIMARY KEY(id_repcambio),
INDEX(id), FOREIGN KEY(id) REFERENCES users(id)
);
create table Cambiosxmeses(
id_cambio int not null AUTO_INCREMENT,
id_repcambio int not null,
id int not null,
id_client int not null,
nombre_cambio varchar(100) not null,
descripcion_cambio varchar(500) not null,
fecha_cambio date,
idcambio varchar(50) not null,
PRIMARY KEY(id_cambio),
INDEX(id_repcambio),FOREIGN KEY(id_repcambio) REFERENCES reporteCambios(id_repcambio)
);
<div class="content">
<!-- # Row -->
<div class="row">
<!-- # render card MESES -->
<?php
$userid=$_SESSION['user_id'];//Obtengo el id del usuario para saber cuales cards voy a cargar en base a reporteCambios y Cambiosxmeses
$sql = "SELECT c.id_client, c.name_client, us.email, rep.id_repcambio, rep.mes_reporte
FROM clients as c
INNER JOIN users as us
ON c.id_client = us.id_client
INNER JOIN reporteCambios as rep
ON rep.id = us.id
WHERE us.id=$userid";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)){
$idMes=$row['id_repcambio']; //obtengo el id del card para cargar la informacion correspondiente dentro de Cambiosxmeses
?>
<!-- /# Col-6 -->
<div class="col-lg-6">
<div class="card">
<div class="card-header cambiosHeader">
<!-- Titulo del card -->
<h4><?php echo $row['mes_reporte'];?></h4>
</div>
<div class="card-body">
<div class="custom-tab">
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-item nav-link" id="<?php echo $row['idcambio'];?>-tab"
data-toggle="tab" href="#<?php echo $row['idcambio'];?>" role="tab"
aria-controls="<?php echo $row['idcambio'];?>" aria-selected="true">Tab #1
</a>
</div>
</nav>
<!-- Aqui voy a cargar el contenido de cada una de las tabs generadas en <nav>... copiado en Media-Queries -->
</div>
</div>
</div>
</div><!-- /# Col-6 -->
<?php
}
mysqli_free_result($result);
} else{
echo "No se encontró ninguna card.";
}
} else{
echo "$sql. " . mysqli_error($link);
}
?>
<!-- /# render card MESES -->
</div> <!-- /# Row -->
</div><!-- .content -->
The previous code generates without problem the cards for the 4 months added in the reportChanges table
The problem lies when I want to load the internal tabs to each of the cards, to begin with I specify that it only load me, of the 4 cards, those that have tabs added through the query:
SELECT reporteCambios.id_repcambio, Cambiosxmeses.nombre_cambio, Cambiosxmeses.idcambio
FROM reporteCambios JOIN Cambiosxmeses ON reporteCambios.id_repcambio=Cambiosxmeses.id_repcambio
WHERE reporteCambios.id_repcambio=$idMes;
And then I load the tab based on the id of each of the cards with the simple query:
SELECT id_repcambio, nombre_cambio, idcambio
FROM Cambiosxmeses
WHERE id_repcambio=$mesActivo;
What happens is that it loads all the information well, but it only loads one Card, it only loads the month of January and it should load the months of January and February, which are the cards that have tabs.
As if the while loaded id 1 fine, but didn't advance to id 2.
I show the code after the changes:
<div class="content">
<!-- # Row -->
<div class="row">
<!-- # render card MESES -->
<?php
$userid=$_SESSION['user_id']; //Obtengo el id del usuario para saber cuales cards voy a cargar en base a reporteCambios y Cambiosxmeses
$sql = "SELECT c.id_client, c.name_client, us.email, rep.id_repcambio, rep.mes_reporte
FROM clients as c
INNER JOIN users as us
ON c.id_client = us.id_client
INNER JOIN reporteCambios as rep
ON rep.id = us.id
WHERE us.id=$userid";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)){
$idMes=$row['id_repcambio']; //obtengo el id del card para cargar la informacion correspondiente dentro de Cambiosxmeses
?>
<!-- /# Col-6 -->
<div class="col-lg-6">
<div class="card">
<div class="card-header cambiosHeader">
<!-- Titulo del card -->
<h4><?php echo $row['mes_reporte'];?></h4>
</div>
<div class="card-body">
<div class="custom-tab">
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<?php
$sql = "SELECT reporteCambios.id_repcambio, Cambiosxmeses.nombre_cambio, Cambiosxmeses.idcambio
FROM reporteCambios JOIN Cambiosxmeses ON reporteCambios.id_repcambio=Cambiosxmeses.id_repcambio
WHERE reporteCambios.id_repcambio=$idMes";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)){
$mesActivo=$row['id_repcambio']; //Voy a mostrar unicamente las cards que tengan tabs y obtengo los ID
?>
<?php
$sql = "SELECT id_repcambio, nombre_cambio, idcambio FROM Cambiosxmeses WHERE id_repcambio=$mesActivo"; //Obtengo la informacion de cada una de las cards para crear las cards
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)){
?>
<a class="nav-item nav-link" id="<?php echo $row['idcambio'];?>-tab"
data-toggle="tab" href="#<?php echo $row['idcambio'];?>" role="tab"
aria-controls="<?php echo $row['idcambio'];?>" aria-selected="true"><?php echo $row['nombre_cambio'];?>
</a>
<?php
}
mysqli_free_result($result);
} else{
echo "No se encontró ninguna card.";
}
} else{
echo "$sql. " . mysqli_error($link);
}
?>
<?php
}
mysqli_free_result($result);
} else{
echo "No se encontró ninguna card.";
}
} else{
echo "$sql. " . mysqli_error($link);
}
?>
</div>
</nav>
<!-- Aqui voy a cargar el contenido de cada una de las tabs generadas en <nav>... copiado en Media-Queries -->
</div>
</div>
</div>
</div><!-- /# Col-6 -->
<?php
}
mysqli_free_result($result);
} else{
echo "No se encontró ninguna card.";
}
} else{
echo "$sql. " . mysqli_error($link);
}
?>
<!-- /# render card MESES -->
</div> <!-- /# Row -->
</div><!-- .content -->
The result:
I would be very grateful if someone could help me understand why this happens.
Thank you very much.
You are stepping on the variable
$result
and it is for this reason that you cannot continue iterating correctly the months to generate thecards
.You just have to change the variable name in the queries to generate the
tabs
.Example:
PS : Don't forget to correct the name of the variables in the
mysqli_free_result($result);