Dans cette déclaration préparée donnée, il obtient le titre de l'article. Lorsqu'il obtient le titre de l'article, il est également censé envoyer cette variable dans une autre instruction préparée qui trouve ensuite le nombre de vues sur l'article donné.

<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>
    &nbsp;<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>

Le résultat attendu de ce code est d'envoyer le nom de poste dans l'instruction préparée qui appelle ensuite la quantité de vues dans un article donné.

0
Neiko101 4 nov. 2019 à 06:09

1 réponse

Réponse courte: vous écrasez $stmt dans la boucle.

Réponse longue, avec des conseils: cela peut être évité (ou au moins être plus facilement détecté) en écrivant tout votre php en premier, puis en émettant du html (en utilisant php uniquement pour l'itération et la substitution de variables).

Encore mieux est de mettre l'accès à la base de données et la logique métier dans des classes distinctes (c'est-à-dire les modèles) et de demander à votre avis de demander au modèle (ou au contrôleur, selon votre interprétation de MVC) les données dont il a besoin.

Je n'ai aucun moyen de le tester, mais vous devriez pouvoir utiliser une seule requête:

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

(Remarque, MySQL peut vous permettre de vous en tirer avec uniquement le nom de tblposts.PostUrl dans le groupe par)

De cette façon, votre page peut être simplifiée en quelque chose comme ceci:

<?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>
&nbsp;<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>
0
Tim Morton 4 nov. 2019 à 05:40