Показать разные кнопки или обновить - PullRequest
0 голосов
/ 02 марта 2020

Я пытался создать кнопку «Мне нравится / не нравится» для сообщений на форуме, я добился некоторого успеха, код ниже работает, но я не могу заставить страницу обновить sh.

Для пример - когда я нажимаю кнопку отправки (например), база данных обновляется, но кнопка непохожего не отображается. Если я перефразирую sh страницу, кнопка непохожести есть, теперь есть способ сделать это с помощью jquery, поэтому после нажатия кнопки «лайк» будет отображаться кнопка в отличие от

/* Check Database */
$likes = DB::run("SELECT * FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']])->fetch();

/* Check Result */
var_export($likes);

/* If No Result Like */
if (!$likes) {
echo
"<form action='' method='post'>
<input type='submit' name='like' value='Like' />
</form>";

if(isset($_POST['like']))
{
    DB::run("INSERT INTO likes (id, lid, uid, pid) VALUES (?, ?, ?, ?)", [1, 1, $CURUSER['id'], $row['id']]);
}

}

/* If Result UnLike */
if ($likes) {
echo
"<form action='' method='post'>
<input type='submit' name='unlike' value='Unlike' />
</form>";

if(isset($_POST['unlike']))
{
DB::run("DELETE FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']]);
}

}

/* Show Results */
echo '</br>';
echo $likes['id'];
echo $likes['1id'];
echo $likes['uid'];
echo $likes['pid'];

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

База данных изменяется после форма отображается, поэтому новый статус «как» не отображается на странице. Одним из решений является изменение базы данных до , проверка статуса «Мне нравится» и отображение формы.

Ниже я обновляю страницу после отправки, используя PHP s * 1007. *header. Не обязательно обновлять страницу sh, но это помогает предотвратить повторную отправку, если пользователь обновляется. Это известно как Шаблон Post / Redirect / Get .

Post / Redirect / Get (PRG) - это шаблон дизайна веб-разработки, который позволяет странице отображаться после отправки формы перезагружаться, делиться или добавлять в закладки без вредных последствий, таких как отправка формы в другой раз.

if(isset($_POST['like'])) {
    DB::run("INSERT INTO likes (id, lid, uid, pid) VALUES (?, ?, ?, ?)", [1, 1, $CURUSER['id'], $row['id']]);
    header('Location: '.$_SERVER['REQUEST_URI']);
    exit;
} elseif (isset($_POST['unlike'])) {
    DB::run("DELETE FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']]);
    header('Location: '.$_SERVER['REQUEST_URI']);
    exit;
}

/* Check Database */
$likes = DB::run("SELECT * FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']])->fetch();


if (!$likes) {

    /* If No Result Like */
    echo "<form action='' method='post'>
              <input type='submit' name='like' value='Like' />
          </form>";

} else {

    /* If Result UnLike */
    echo "<form action='' method='post'>
              <input type='submit' name='unlike' value='Unlike' />
          </form>";

}
0 голосов
/ 02 марта 2020

Никто не может вам помочь, потому что мы не видим ваши $likes результаты, вот псевдокод, как он работает, где $likes жестко запрограммированы в false для начала (это не нравится) и когда вы нажмите «Мне нравится», отображается кнопка «Нравится». После того, как вы получите это, вы должны отлаживать то, что $likes содержит в каждый момент и почему оно не вводило ваши операторы if:

<?php

/* Check Database */
$likes = false;


/* Check Result */
var_export($likes);

/* If No Result Like */
if (!$likes) {
echo
"<form action='' method='post'>
<input type='submit' name='like' value='Like' />
</form>";

if(isset($_POST['like']))
{
    $likes = true;
}

}

/* If Result UnLike */
if ($likes) {
echo
"<form action='' method='post'>
<input type='submit' name='unlike' value='Unlike' />
</form>";

if(isset($_POST['unlike']))
{
    $likes = false;
}

}

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