Рейтинг:
2
Mike CJ
index.php
<?php
$mysqli = new mysqli('localhost', 'root','');
$mysqli->select_db('like');
?>
<!DOCTYPE html>
<html>
<head>
<title>LIKE and UNLIKE</title>
<style type="text/css">
.content
{
width:50%;
margin:100px auto;
border:1px solid #cbcbcb;
}
.post
{
width:80%;
margin:10px auto;
border:1px solid #cbcbcb;
padding:10px;
}
</style>
</head>
<body>
<div class="content">
<?php
$query = $mysqli->query("SELECT * FROM posts");
while($row = mysqli_fetch_array($query)) { ?>
<div class="post">
<?php echo $row['text'] . " " . $row['likes']; ?> <br>
<?php
$result = mysqli_query($mysqli,"SELECT * FROM likes WHERE userid='1' AND postid=".$row['id']."");
if(mysqli_num_rows($result) == 1) { ?>
<span><a href="" class="unlike" id="<?php echo $row['id']; ?>">unlike</a></span>
<?php } else { ?>
<span><a href="" class="like" id="<?php echo $row['id']; ?>">like</a></span>
<?php } ?>
</div>
<?php } ?>
</div>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.like').click(function(){
var postid = $(this).attr('id');
$.ajax({
url:'index_post.php',
type: 'post',
async: false,
data:{
'liked': 1,
'postid': postid
},
success:function(){
}
});
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
$('.unlike').click(function(){
var postid = $(this).attr('id');
$.ajax({
url:'index_unpost.php',
type: 'post',
async: false,
data:{
'unliked': 1,
'postid2': postid
},
success:function(){
}
});
});
});
</script>
</body>
</html>
index_post.php
<?php
$mysqli = new mysqli('localhost', 'root','');
$mysqli->select_db('like');
$postid = $_POST['postid'];
$result = mysqli_query($mysqli, "SELECT * FROM posts WHERE id=$postid");
while($row2 = $result->fetch_array())
{
$n = $row2['likes'];
mysqli_query($mysqli, "UPDATE posts SET likes=$n+1 WHERE id=$postid");
mysqli_query($mysqli, "INSERT INTO likes(userid, postid) VALUES(1,$postid)");
}
exit();
?>
index_unpost.php
<?php
$mysqli = new mysqli('localhost', 'root','');
$mysqli->select_db('like');
$postid = $_POST['postid2'];
$result = mysqli_query($mysqli, "SELECT * FROM `posts` WHERE id=$postid");
while($row3 = $result->fetch_array())
{
$n = $row3['likes'];
mysqli_query($mysqli, "UPDATE `posts` SET likes=$n-1 WHERE postid=$postid AND userid=1");
mysqli_query($mysqli, "DELETE FROM `likes` WHERE id='$postid' userid=1 ");
}
exit();
?>
Рейтинг:
15
Bryian Tan
хорошо, если предположить, что соединение с базой данных MySQL работает.
Вот мои рекомендации:
1. Синтаксическая ошибка в AJAX-вызов, нужно поставить запятую (,) после публикации данных
2. переместите обновление / вставку в отдельный скрипт
3. Нет сообщения дан в таблице пост, должен быть ID
4. mysqli_query, вы сделали это правильно в index.php включив строку подключения в функцию. но не знаю, почему бы вам не сделать то же самое в посте / обновлении
5.есть много других улучшений, которые вам нужно сделать, например, предотвратить SQL-инъекцию или XSS, поместить строку подключения в отдельный файл и т. д...
Вот обновленный код:
<?php
$mysqli = new mysqli('localhost', 'root','');
$mysqli->select_db('like');
?>
<!DOCTYPE html>
<html>
<head>
<title>LIKE and UNLIKE</title>
<style type="text/css">
.content
{
width:50%;
margin:100px auto;
border:1px solid #cbcbcb;
}
.post
{
width:80%;
margin:10px auto;
border:1px solid #cbcbcb;
padding:10px;
}
</style>
</head>
<body>
<div class="content">
<?php
$query = $mysqli->query("SELECT * FROM posts");
while($row = mysqli_fetch_array($query)) { ?>
<div class="post">
<?php echo $row['text'] . " " . $row['likes']; ?> <br>
<?php
$result = mysqli_query($mysqli,"SELECT * FROM likes WHERE userid='1' AND postid=".$row['id']."");
if(mysqli_num_rows($result) == 1) { ?>
<span><a href="" class="unlike" id="<?php echo $row['id']; ?>">unlike</a></span>
<?php } else{ ?>
<span><a href="" class="like" id="<?php echo $row['id']; ?>">like</a></span>
<?php } ?>
</div>
<?php } ?>
</div>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.like').click(function(){
var postid = $(this).attr('id');
$.ajax({
url:'index_post.php',
type: 'post',
async: false,
data:{
'liked': 1,
'postid': postid
},
success:function(){
}
});
});
});
</script>
</body>
</html>
index_post.php
<?php
$mysqli = new mysqli('localhost', 'root','');
$mysqli->select_db('like');
$postid = $_POST['postid'];
$result = mysqli_query($mysqli, "SELECT * FROM posts WHERE id=$postid");
while($row2 = $result->fetch_array())
{
$n = $row2['likes'];
mysqli_query($mysqli, "UPDATE posts SET likes=$n+1 WHERE id=$postid");
mysqli_query($mysqli, "INSERT INTO likes(userid, postid) VALUES(1,$postid)");
}
exit();
?>
Mike CJ
Ладно, работаю, теперь мне нужно что-то вроде "если пользователь нажал на кнопку" в отличие от "изменить кнопку на" Нравится", в данном случае это ссылка "href". Как я могу это сделать?
Bryian Tan
Я думаю, что ваш код делает это сейчас, если количество лайков для поста не равно единице, покажите ему непохожую ссылку? Самый простой способ, без осложнений, чтобы выполнить, чтобы дублировать ваши текущие JavaScript для $('.в отличие от').нажмите кнопку(функция(){ ... }. На пост позвонить на другой URL-адрес URL-адрес:'index_post_unlike.php'. Затем на этой странице просто перепроектируйте содержимое index_post.php
Mike CJ
Я создал index_unpost.php Javascript:
$(документ).готово(функция(){
$('.в отличие от').нажмите кнопку(функция(){
var postid = $(this). attr ('id');
$.Аякс({
URL-адрес:'index_unpost.php',
тип: "пост",
асинхронные: ложные,
данные:{
"непохожий": 1,
'postid2': сообщения дан
},
успех: функция(){
}
});
});
});
И код в index_unpost.php
<? php
$mysqli = new mysqli ('localhost', 'root',");
$mysqli- & gt;select_db ('like');
$сообщения дан = $_POST, где['сообщения дан'];
$result = mysqli_query($mysqli, " SELECT * FROM posts WHERE id=$postid");
while ($row3 = $result->fetch_array())
{
$n = $row3 ['likes'];
mysqli_query($mysqli, " удалить из лайков, где id=$postid userid=1");
mysqli_query($mysqli, " UPDATE posts SET likes=$n-1 WHERE id=$postid");
}
выход();
?>
Если пользователь нажимает кнопку like, например, в таблице уменьшается на 1, но "в отличие" не меняется на like. Не знаю почему.
Bryian Tan
Аякс находится проводки
данные:{
"непохожий": 1,
'postid2': сообщения дан
},
но PHP-код-это значение, используя этот код $сообщения дан = $_POST, где['сообщения дан'];
это должно быть $postid = $_POST ['postid2'];
Mike CJ
Окей. Но кнопка не меняет подобного, но все равно непохожа. Почему?
Bryian Tan
mysqli_query($mysqli, " удалить из лайков, где id=$postid userid=1");
должно быть
mysqli_query ($mysqli, " удалить из лайков, где id=$postid и userid=1");
Mike CJ
Я изменил его, и никаких изменений. Идея заключается в том, что если в таблице 0 лайков, то кнопка меняется на лайк.
Bryian Tan
вы проверили, что таблица dd удалила строки?
Mike CJ
Строки не удаляются. Может быть, вы знаете, почему стол не падает ?
Bryian Tan
Я предположил, что количество postid2 в таблице posts уменьшается, верно? Еще одно изменение на этой линии
mysqli_query ($mysqli, " удалить из лайков, где postid=$postid и userid=1");
Должен быть postid вместо id, потому что id-это столбец автоматического приращения, который я предположил.
Mike CJ
Это уменьшило. Я сменил код. но теперь ответа нет. то есть он увеличил число "нравится" на 1, а при нажатии на кнопку оно не уменьшается и не меняет название на "Нравится".
Bryian Tan
Возможно, вам придется снова опубликовать свой код.
Mike CJ
повторное решение 2
Bryian Tan
Эта строка mysqli_query ($mysqli, "удалить из" лайков` Где id= '$postid' userid=1 ");
Должно быть
mysqli_query ($mysqli, "удалить из" лайков` Где postid= '$postid' и userid=1 ");
Mike CJ
Код работает. Но теперь, если пользователь нажал непохожую кнопку, число как в таблице не уменьшается, почему ?
Bryian Tan
Хорошо, надеюсь, это будет последний вопрос:)
Эта строка в index_unpost.php
mysqli_query($mysqli, "UPDATE `posts` SET likes=$n-1 WHERE postid=$postid AND userid=1");
Должно быть
mysqli_query($mysqli, "UPDATE posts SET likes=$n-1 WHERE id=$postid");
Mike CJ
Да. Это был последний вопрос. Код работает. Большое спасибо.
Bryian Tan
Рад, что все получилось :)
Bryian Tan
Не забудьте отметить это как ответ после всей тяжелой работы, которую мы проделали. :)