Как любить несколько раз с простой страницей в PHP? - PullRequest
0 голосов
/ 06 июня 2019

Я сделал простую похожую страницу для проекта, над которым я работаю.У меня есть страница с ораторами, и у каждого оратора есть кнопка «Мне нравится», после нажатия она направляется на мою php-страницу like_code с идентификатором динамика, и она успешно обновляет базу данных с 1 лайком.Это работает.

Теперь моя проблема в том, что мне нравится только один раз, у меня есть переменная '1', которую я добавляю в свой существующий счетчик с помощью SQL UPDATE при каждом нажатии кнопки.Однако по какой-то причине мне может понравиться каждый оратор только один раз, и если я вручную добавлю большее количество лайков в свою базу данных (например, 7), он будет перезаписан и уменьшен до 1, когда я снова нажму кнопку лайка.

Я не обнаружил подобных проблем в сети, и каждая подобная система в сети сильно отличается от моей.Я также не использую идентификаторы пользователей, а имя динамика + лайк находится в одной таблице.Это единственные два значения, которые я использую из своей базы данных для подобного кода.

<?php 

require_once('website/script/database.php');

if(isset($_GET['idsprekers'])){
    //Get idsprekers
    $id = $_GET['idsprekers'];

    $a = "1";
    $liked = $row['likecounter'];
    $liked = $liked + $a;

    //Prepare query
    $sql = "UPDATE sprekers SET likecounter=$liked WHERE idsprekers=?";

    //$stmt = statement
    $stmt = $mysqli->prepare($sql);

    //Parameter
    $stmt->bind_param("i", $id);

    //Execute query
    $stmt->execute();


}

header("location:overzicht_spreker.php");

?>

Ссылка на спикера на странице моего спикера

print('<div class="col-2"><a href="like_code.php?idsprekers=' . $tempId 
.'" class="btn-like"><i class="far fa-heart"></i></a></div>');

Мой ожидаемый результат заключается в том, что когда я нажимаю кнопку «Мне нравится», она обновляет базу данных каждый раз, когда я нажимаю ее один раз.он будет показывать 1 как в базе данных, и когда я снова нажму на него позже, будет показано 2 лайка.Теперь он показывает только 1 и не хочет сдвинуться с места, если я не введу его вручную.

1 Ответ

0 голосов
/ 06 июня 2019

Используйте SET field = field + 1 в самом запросе.

$sql = "UPDATE sprekers SET likecounter=likecounter+1 WHERE idsprekers=?";

Теперь модифицированный код будет выглядеть так:

<?php 

require_once('website/script/database.php');

if(isset($_GET['idsprekers']) && $_GET['idsprekers'] > 0 ){ //check id is not coming as 0
    //Get idsprekers
    $id = $_GET['idsprekers'];

    //Prepare query
    $sql = "UPDATE sprekers SET likecounter=likecounter+1 WHERE idsprekers=?";

    //$stmt = statement
    $stmt = $mysqli->prepare($sql);

    //Parameter
    $stmt->bind_param("i", $id);

    //Execute query
    $stmt->execute();


}else{
    die('speaker id required'); //if id didn't came, throw an error
}

// apply exit or die along with header(), otherwise code execution won't stop and will create a big security loophole.
header("location:overzicht_spreker.php");exit; 

?>

Примечание: - пожалуйста, обратите особое внимание на комментарии раздела кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...