Не могу додуматься, как организовать вывод в шаблоне. Есть таблица с сообщениями, и таблица с лайками.
+-------------+ +------------+
|message.......| |likes............|
+-------------+ +------------+
|id....................| | lid...............|
|name.............| | mid............|
|message......| | name.........|
|date...............| +------------+
---------------
В модели поиск всех сообщений
function messages_all($connect){
$query = "SELECT * FROM `message` ORDER BY `message`.`id` DESC";
$result = mysqli_query($connect, $query);
if (!$result)
die(mysqli_error($connect));
$count = mysqli_num_rows($result);
$messages = array();
for ($i=0; $i<$count; $i++){
$row = mysqli_fetch_assoc($result);
$messages[] = $row;
}
return $messages;
}
В шаблоне вывод
<div class="main">
<?php foreach($messages as $p): ?>
<div class="row message">
<div class="col-md-6 ">
<p><?=$p['name']?> say: </p>
<p><?=$p['message']?> At <?= date ('H:i ', strtotime($p['date']))?></p>
</div>
<div class="col-md-6">
<a class="btn btn-info pull-right" href="index.php?action=like&id=<?=$p['id']?>">like </a>
<a class="btn btn-info <?php ($name != $p['name'] ? print "disabled" : "") ?> pull-right" href="index.php?action=delete&id=<?=$p['id']?>">delete</a>
</div>
</div>
<?php endforeach ?>
</div>
Ну в контроллере просто вызываю функцию
$message = messages_all($connect);
include("view/main.php");
далее лайки
при нажатии кнопки like выполняю функцию like_add($connect, $id, $name); в которую передаю id лайкнутого сообщения и имя того, кто лайкнул
функция like_add
function like_add ($connect, $id, $name){
$name = trim($name);
$id = (int)$id;
if ($id == 0)
return false;
$sql = "INSERT INTO `likes` (mid, name) VALUES ('%d','%s')";
$query = sprintf ($sql, $id, mysqli_real_escape_string($connect, $name));
$result = mysqli_query($connect, $query);
if (!$result)
die(mysqli_error($connect));
return true;
}
Т.е. при каждом нажатии на кнопку, создается запись с id сообщением и именем того, кто тыкнул кнопку.
Далее что бы узнать количество лайков у сообщения я просто считаю количество записей в бд с id сообщения
function like_count ($connect, $mid){
$query = sprintf ("SELECT * FROM `likes` WHERE mid=%d", (int)$mid);
$result = mysqli_query($connect, $query);
if(!$result)
die(mysqli_error($connect));
$likes = mysqli_num_rows($result);
return $likes;
}
теперь собственно вопрос: как вывести количество лайков для сообщения? На данном этапе я просто в шаблоне выполняю функцию like_count, выглядит как то так
<div class="main">
<?php foreach($messages as $p): ?>
<div class="row message">
<div class="col-md-6 ">
<p><?=$p['name']?> say: </p>
<p><?=$p['message']?> At <?= date ('H:i ', strtotime($p['date']))?></p>
</div>
<div class="col-md-6">
<!-- ВОТ ЗДЕСЬ --> <a class="btn btn-info pull-right" href="index.php?action=like&id=<?=$p['id']?>">like <?=like_count ($connect, $p['id']) ?></a>
<a class="btn btn-info <?php ($name != $p['name'] ? print "disabled" : "") ?> pull-right" href="index.php?action=delete&id=<?=$p['id']?>">delete</a>
</div>
</div>
<?php endforeach ?>
</div>
но считаю, что это не правильно. Как быть?