En esta declaración preparada dada obtiene el título del artículo. Cuando obtiene el título del artículo también se supone que envía esa variable a otra instrucción preparada que luego encuentra la cantidad de vistas en el artículo dado.
<table class="table table-colored table-centered table-inverse m-0">
<thead>
<tr>
<th>Title</th>
<th>Category</th>
<th>Writer</th>
<th>Action</th>
<th>Views</th>
</tr>
</thead>
<tbody>
<?php
$stmt = $con -> prepare('select tblposts.id as postid,tblposts.PostTitle as title,tblposts.PostUrl as postname, tblcategory.CategoryName as category,tblwritter.Writter as writter from tblposts left join tblcategory on tblcategory.id=tblposts.CategoryId left join tblwritter on tblwritter.WritterId=tblposts.WritterId where tblposts.Is_Active=?');
$cnt=1;
$stmt -> bind_param('i', $cnt);
$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($postid,$title,$postname,$category,$writter);
?>
<tr>
<?php while ($stmt->fetch()){?>
<td><b><?php echo $postname;?></b></td>
<td><?php echo $category?></td>
<td><?php echo $writter?></td>
<td>
<a href="edit-post.php?pid=<?php echo $postid;?>"><i class="fa fa-pencil" style="color: #29b6f6;"></i></a>
<a href="manage-posts.php?pid=<?php echo$postid;?>&&action=del" onclick="return confirm('Do you reaaly want to delete ?')"> <i class="fa fa-trash-o" style="color: #f05050"></i></a>
</td>
<?php
$stmt = $con -> prepare('select COUNT(ip) FROM tblviews WHERE postname = ?');
$stmt -> bind_param('s', $postname);
$stmt -> execute();
$stmt -> store_result();
$stmt -> bind_result($ip);
?>
<?php while ($stmt->fetch()){?>
<td><?php echo $ip ?></td>
<?php } ?>
</tr>
<?php }?>
</tbody>
</table>
Los resultados esperados de este código es enviar el nombre postal a la instrucción preparada que, a continuación, llamar a la cantidad de vistas en un artículo determinado.
1 respuesta
Respuesta corta: estás sobrescribiendo $stmt
dentro del bucle.
Respuesta larga, con consejos: esto puede evitarse (o al menos detectarse más fácilmente) escribiendo primero todo su php, y luego emitiendo html (usando php solo para la iteración y la sustitución de variables).
Aún mejor es poner el acceso a db y la lógica de negocios en clases separadas (es decir, modelos) y hacer que su vista solicite al modelo (o controlador, según su interpretación de MVC) los datos que necesita.
No tengo forma de probarlo, pero debería poder usar una sola consulta:
select
tblposts.id as postid,
tblposts.PostTitle as title,
tblposts.PostUrl as postname,
tblcategory.CategoryName as category,
tblwritter.Writter as writter,
COUNT(tblwritter.ip) as views
from tblposts
left join tblcategory on tblcategory.id=tblposts.CategoryId
left join tblwritter on tblwritter.WritterId=tblposts.WritterId
left join tblviews on tblviews.postname = tblposts.PostUrl'
where tblposts.Is_Active=?
group by tblposts.PostUrl, tblposts.id, tblposts.PostTitle, tblCategory.CategoryName, tblwritter.Writter
(Tenga en cuenta que MySQL puede permitirle salirse con solo nombrar tblposts.PostUrl en el grupo por)
De esta manera, su página se puede simplificar a algo como esto:
<?php
// do your query here
?>
<table class="table table-colored table-centered table-inverse m-0">
<thead>
<tr>
<th>Title</th>
<th>Category</th>
<th>Writer</th>
<th>Action</th>
<th>Views</th>
</tr>
</thead>
<tbody>
<?php while ($stmt->fetch()): ?>
<tr>
<td><b><?= $postname ?></b></td>
<td><?= $category ?></td>
<td><?= $writter?></td>
<td>
<a href="edit-post.php?pid=<?= $postid?>"><i class="fa fa-pencil" style="color: #29b6f6;"></i></a>
<a href="manage-posts.php?pid=<?=$postid?>&&action=del" onclick="return confirm('Do you reaaly want to delete ?')"> <i class="fa fa-trash-o" style="color: #f05050"></i></a>
</td>
<td><?= $views ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
Nuevas preguntas
php
PHP es un lenguaje de secuencias de comandos interpretado, dinámico, orientado a objetos y ampliamente utilizado, diseñado principalmente para el desarrollo web del lado del servidor. Se utiliza para preguntas sobre el lenguaje PHP.