Mike CJ Ответов: 2

Сценарий не работает


Привет. Для начала позвольте мне сказать, что только начинаю программировать и прошу прощения за свой плохой английский. В любом случае.
Этот код используется для того, чтобы понравиться системе. Я не знаю, почему этот код не работает.

Код:
<?php
    $mysqli = new mysqli('localhost', 'root','');
    $mysqli->select_db('like');

    if(isset($_POST['liked']))
    {
        $postid = $_POST['postid'];
        $result = mysqli_query("SELECT * FROM posts WHERE postid=$postid");
        $row = mysqli_fetch_array($result);
        $n = $row['likes'];

        mysqli_query("UPDATE posts SET likes=$n+1 WHERE id=$postid ");
        mysqli_query("INSERT INTO likes(userid, postid) VALUES(1,$postid)");
        exit();
    }
?>

<!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']; ?> <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.php',
                    type: 'post',
                    async: false,
                    data:{
                        'liked': 1,
                        'postid': postid
                    }
                    success:function(){

                    }
                });
            });
        });
</script>
</body>
</html>


Таблица sql:

любит.в SQL

CREATE TABLE `likes` (
  `id` int(11) NOT NULL,
  `userid` int(11) NOT NULL,
  `postid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1


посты.в SQL

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `text` text NOT NULL,
  `likes` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1


пользователей.в SQL
CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(55) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Что я уже пробовал:

Я попробовал изменить код:
<?php

    if(!isset($_POST['liked']))
    {
        $postid = $_POST['postid'];
        $result = mysqli_query($mysqli,"SELECT * FROM likes WHERE postid='$postid'");
        $row = mysqli_fetch_array($result) or die("ERROR: ".mysqli_error($mysqli));
        $n = $row['likes'];

        $result = mysqli_query($mysqli,"UPDATE posts SET likes=$n+1 WHERE id=$postid ");
        $result = mysqli_query($mysqli,"INSERT INTO likes (userid, postid) VALUES(1,$postid)");
        exit();
    }
    ?>

ZurdoDev

Вы должны объяснить, что не работает. Что он должен делать? Чего он не делает? Какая же тут ошибка? Нажмите кнопку улучшить вопрос и добавить информацию.

Patrice T

Определение "не работает"

2 Ответов

Рейтинг:
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

Не забудьте отметить это как ответ после всей тяжелой работы, которую мы проделали. :)