За последние 24 часа нас посетили 17532 программиста и 1713 роботов. Сейчас ищут 1872 программиста ...

Запрос к БД с несколькими значениями.

Тема в разделе "PHP и базы данных", создана пользователем SamyRed, 4 сен 2015.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Доброго времени суток, можно ли получить все строки из БД где, к примеру, id = 1 и id = 2. То есть что-то типа этого:
    Код (PHP):
    1. $res_msg = $mysqli->query("SELECT * FROM messages WHERE author= '{$_SESSION["user_login"]}' AND author='{$row_usr["login"]}'");
    2. while ($row_msg = $res_msg->fetch_assoc()){
    Причём надо чтоб выводились строки где автор - "1" а получатель - "2" и те где автор - "2" а получатель - "1"

    Этот код не работает. Смысл в том что хочу сделать систему сообщений. И мне надо чтоб на странице отображались только сообщения отправленные мной данному человеку и наоборот. Если запросить просто сообщения где я автор - то выведет все сообщения, и т.д.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    С логикой проблема, autor не может быть сразу двух разных значений. Если я тебя правильно понял, используй mysql IN
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    У меня в бд есть столбцы автор и получатель. Надо чтоб выводились значения где, к примеру, автор "1" а получатель "2", а так же одновременно с этим автор "2" и получатель "1". Вот что я имел ввиду.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Так выкладывай схему базы в sql и данными для примера как минимум
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    БД:
    Таблица messages:
    id | subject | author | text |
    1 || Вася ||| Петя ||| Привет, Вася

    Таблица users:
    id | login | pass | email ....
    1 | Вася | ЯВАСЯ | вася@вася.вася
    2 | Петя | ЯПЕТЯ | петя@петя.петя
    Вот... И надо чтоб на странице переписки там где владелец сессии петя, а тот кому он пишет - вася, отображались все сообщения: которые написал Петя Васе и Вася Пете.

    Добавлено спустя 5 минут 22 секунды:
    Пока что мне удалось лишь вытянуть все сообщения где автор "Вася" и проверить, равен ли ник автора нику получателя(из $_GET)
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Почему вместо id users у тебя в messages "Вася" и "Петя"?
    Выкладывай SQL с помощью которого можно твою базу создать и заполнить данными, так больше шансов, что тебе помогут.
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Давайте я лучше скрины моих таблиц кину?! (Я не умею создавать таблицы испод php)
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    в phpmyadmin можно сделать экспорт таблицы в sql
     
  9. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    [​IMG]
    [​IMG]
    [​IMG]

    Добавлено спустя 2 минуты 21 секунду:
    CREATE TABLE IF NOT EXISTS `messages` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `subject` varchar(255) NOT NULL,
    `author` varchar(255) NOT NULL,
    `text` text NOT NULL,
    `create_date` varchar(20) NOT NULL,
    `checked` int(1) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=40 ;

    CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `login` varchar(255) CHARACTER SET utf8 NOT NULL,
    `pass` varchar(255) CHARACTER SET utf8 NOT NULL,
    `email` varchar(255) CHARACTER SET utf8 NOT NULL,
    `ballanse` int(8) NOT NULL DEFAULT '0',
    `access_level` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'user',
    `reg_date` varchar(255) CHARACTER SET utf8 NOT NULL,
    `mail_checked` int(1) NOT NULL,
    `country` varchar(255) CHARACTER SET utf8 NOT NULL,
    `where_live` varchar(255) CHARACTER SET utf8 NOT NULL,
    `image` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'default',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    примерно так
    WHERE (`subject` = 'вася' AND `author`='петя') OR (`subject` = 'петя' AND `author`='вася')
     
  11. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Вот что у меня пока что получилось:
    Код (PHP):
    1. <!DOCTYPE html>
    2. <?php
    3.     include("handlers/config.php");
    4.     session_start();
    5. ?>
    6. <html>
    7. <head>
    8.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    9.     <meta type="" charset="utf-8"></meta>
    10.     <link href="css/styles.css" rel="stylesheet" type="text/css">
    11.     <title>SamyCraft.hol.es</title>
    12.     <script src="js/jquery.js" type="text/javascript"></script>
    13.     <link rel="SHORTCUT ICON" href="images/favicon.ico" type="image/x-icon">
    14. <script type="text/javascript">
    15.     $(document).ready(function(){
    16.     $("#send_msg_btn").click(function(){
    17.         if ($("#msg_text").val() == "" || $("#msg_text").val() == " "){
    18.             $("#msg_text").css("border", "1px solid #ffa3a3");
    19.             $("#send_err").css("color", "#ff6666");
    20.             $("#send_err").text("Вы не ввели сообщение!");
    21.         }
    22.         else{
    23.             $.ajax({
    24.                 type:"POST",
    25.                 url:"handlers/check_msg.php",
    26.                 data:{"text":$("#msg_text").val(), "author": $("#author").val(), "subject": $("#subject").val()},
    27.                 response:"text",
    28.                 success:function(data) {
    29.                     $("#msg_text").val("");
    30.                     $("#msg_text").css("border", "1px solid gray");
    31.                     $("#send_err").text("");
    32.                 }
    33.             });
    34.         }
    35.     });
    36.     });
    37. </script>
    38. </head>
    39. <body>
    40.     <?php include("blocks/header.php");?>
    41. <?php
    42. connectDB();
    43. $res_usr = $mysqli->query("SELECT * FROM users WHERE id='{$_GET["subject_id"]}'");
    44. $row_usr = $res_usr->fetch_assoc();
    45. closeDB();
    46. ?>
    47.     <div class="central_block">
    48. <?php if ($_SESSION["user_login"] != "guest"){?>
    49.         <div style="float: left; width: 100%" class="block1">
    50.             <p class="title3">Переписка (<?php echo $row_usr["login"];?>)</p>
    51.             <input type="hidden" id="author" value="<?php echo $_SESSION["user_login"];?>"/>
    52.             <input type="hidden" id="subject" value="<?php echo $_GET["subject_id"];?>"/>
    53.             <textarea id="msg_text" style="resize: none; width: 60%; min-height: 65px; overflow: hidden;"></textarea></br>
    54.             <input type="submit" id="send_msg_btn" class="button" value="Отправить"/>
    55.             <span id="send_err"></span>
    56. <table style="margin: 0 0 0 30px">
    57. <?php
    58. connectDB();
    59. $res_msg = $mysqli->query("SELECT * FROM messages WHERE author= '{$_SESSION["user_login"]}' ORDER BY id DESC");
    60. while ($row_msg = $res_msg->fetch_assoc()){ 
    61. $res_usr1 = $mysqli->query("SELECT * FROM users WHERE login='{$row_msg["author"]}'");
    62. $row_usr1 = $res_usr1->fetch_assoc();
    63. if($row_msg["subject"] == $row_usr["login"]) {?>
    64.             <tr style="padding: 10px 0 5px 0">
    65.             <td><input style="top: 0; max-width: 32px" type="image" src="user_images/<?php echo $row_usr1["image"];?>.jpg" class="text2"/></td>    
    66.             <td><span class="text1"><?php echo $row_msg["text"];?></span></td>
    67.             </tr>
    68. <?php }} closeDB();?>
    69. </table>
    70.         </div>
    71. <?php }?>
    72.     </div>
    73.     <?php include("blocks/right_block.php");?>
    74.     
    75.     <?php include("blocks/footer.php");?>
    76. </body>
    77. </html>
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    прочитай про внешний ключ, и вообще книгу по mysql для наичнающих
     
  13. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Спасибо за совет, прочту. Сделал так как вы посоветовали, но так всё равно выводит только те сообщения которые написал владелец сессии. Не выводит те которые написали ему.
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ну дал бы данные для примера с sql я бы загнал в базу и протестировал, экспорт с данными
     
  15. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    -- phpMyAdmin SQL Dump
    -- version 3.5.2.2
    -- http://www.phpmyadmin.net
    --
    -- Хост: localhost
    -- Час створення: Вер 04 2015 р., 17:46
    -- Версія сервера: 10.0.20-MariaDB
    -- Версія PHP: 5.2.17

    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- БД: `u341920148_sam`
    --

    -- --------------------------------------------------------

    --
    -- Структура таблиці `messages`
    --

    CREATE TABLE IF NOT EXISTS `messages` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `subject` varchar(255) NOT NULL,
    `author` varchar(255) NOT NULL,
    `text` text NOT NULL,
    `create_date` varchar(20) NOT NULL,
    `checked` int(1) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=40 ;

    --
    -- Дамп даних таблиці `messages`
    --

    INSERT INTO `messages` (`id`, `subject`, `author`, `text`, `create_date`, `checked`) VALUES
    (1, 'user', 'SamyRed', 'Привет', '', 0),
    (2, 'SamyRed', 'user', 'asfdsgfa', 'Fri,09,2015 13:42', 0),
    (3, '2', '', 'asfsfavaf', 'Fri,09,2015 13:44', 0),
    (4, '2', '', 'asdasdas', '04,09,2015 13:49', 0),
    (5, '2', '', 'sadasd', '04,09,2015 13:50', 0),
    (6, 'user', '', 'Сообщение', '04,09,2015 13:55', 0),
    (7, 'user', '', 'Сообщение', '04,09,2015 13:57', 0),
    (8, 'user', '', 'asfdsfdgnfgsfadvs', '04,09,2015 13:57', 0),
    (9, 'user', '', 'asfdsfdgnfgsfadvs', '04,09,2015 13:58', 0),
    (10, 'user', '', 'sdfsasgsagzdsfg', '04,09,2015 13:59', 0),
    (11, 'user', '', 'afsdvf adv sd sva s asd ', '04,09,2015 13:59', 0),
    (12, 'user', '', 'afsdvf adv sd sva s asd ', '04,09,2015 14:01', 0),
    (13, 'user', '', 'afsdvf adv sd sva s asd ', '04,09,2015 14:01', 0),
    (14, 'user', '', 'asdasd', '04,09,2015 14:01', 0),
    (15, 'user', 'SamyRed', 'авфыфф', '04,09,2015 14:07', 0),
    (16, 'user', 'SamyRed', 'авфыфф', '04,09,2015 14:07', 0),
    (17, 'user', 'SamyRed', 'авфыфф', '04,09,2015 14:07', 0),
    (18, 'user', 'SamyRed', 'авфыфф', '04,09,2015 14:07', 0),
    (19, 'user', 'SamyRed', 'Привет', '04,09,2015 14:07', 0),
    (20, 'user', 'SamyRed', 'asfssfaq efa sdf ', '04,09,2015 14:08', 0),
    (21, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (22, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (23, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (24, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (25, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (26, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (27, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (28, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (29, 'user', 'SamyRed', ' s sd s', '04,09,2015 14:09', 0),
    (30, 'user', 'SamyRed', 'asdsfdacca xc ', '04,09,2015 14:12', 0),
    (31, 'user', 'SamyRed', 'asfsacas as zd', '04,09,2015 14:12', 0),
    (32, 'user', 'SamyRed', 'Привет, чувак\n\n', '04,09,2015 15:07', 0),
    (33, 'user', 'SamyRed', 'Привет\nПривет\nПривет\nПривет\nПривет', '04,09,2015 15:07', 0),
    (34, 'user', 'SamyRed', 'фы а фыьвало фиылдвтва лофыотдсдпты влта лдп жфоыждофмо тфмлыоатлюофывюбтлфы тлдмтдфы тлбюм фыю тв мьфыювбмл ытячлтлдоыотвмлдды доивмод лорфытдл имт лдтфыиовмдои ылмтыдмывлтыовдотыод тв ттждфотывжажфдыдвлж адотфылдрмлоьфюыболаоьжмлвосо ффляачоосмю лбояобч юсп лю л мюь ячадлсл поюмюялчалосюьпю ыюяс юП омь ябчдсюоюь мяы.ьч см', '04,09,2015 15:08', 0),
    (35, 'user', 'SamyRed', 'sdasdasdasdad\n', '04,09,2015 15:54', 0),
    (36, '123', 'SamyRed', 'dasdasdafs', '04,09,2015 15:54', 0),
    (37, '123', 'SamyRed', 'asdasac sad ad', '04,09,2015 16:00', 0),
    (38, '123', 'SamyRed', '&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;', '04,09,2015 16:00', 0),
    (39, '123', 'SamyRed', ''''''''' &quot;&quot;&quot;&quot;', '04,09,2015 16:02', 0);

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



    -- phpMyAdmin SQL Dump
    -- version 3.5.2.2
    -- http://www.phpmyadmin.net
    --
    -- Хост: localhost
    -- Час створення: Вер 04 2015 р., 17:47
    -- Версія сервера: 10.0.20-MariaDB
    -- Версія PHP: 5.2.17

    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- БД: `u341920148_sam`
    --

    -- --------------------------------------------------------

    --
    -- Структура таблиці `users`
    --

    CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `login` varchar(255) CHARACTER SET utf8 NOT NULL,
    `pass` varchar(255) CHARACTER SET utf8 NOT NULL,
    `email` varchar(255) CHARACTER SET utf8 NOT NULL,
    `ballanse` int(8) NOT NULL DEFAULT '0',
    `access_level` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'user',
    `reg_date` varchar(255) CHARACTER SET utf8 NOT NULL,
    `mail_checked` int(1) NOT NULL,
    `country` varchar(255) CHARACTER SET utf8 NOT NULL,
    `where_live` varchar(255) CHARACTER SET utf8 NOT NULL,
    `image` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'default',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

    --
    -- Дамп даних таблиці `users`
    --

    INSERT INTO `users` (`id`, `login`, `pass`, `email`, `ballanse`, `access_level`, `reg_date`, `mail_checked`, `country`, `where_live`, `image`) VALUES
    (1, 'SamyRed', '7dfb03212de9fee2c0e232a97350822d', [email='samyredsm@gmail.com]'samyredsm@gmail.com[/email]', 99999, 'admin', '02.09.2015 14:51', 1, 'Украина', 'Полтава', '1'),
    (2, 'user', '7dfb03212de9fee2c0e232a97350822d', [email='user@user.user]'user@user.user[/email]', 0, 'user', '02.09.2015 16:51', 0, '', '', 'default'),
    (0, '0', '0', '0', 0, 'guest', '0', 0, '0', '0', 'default'),
    (4, '123', '827ccb0eea8a706c4c34a16891f84e7b', [email='123@booble.com]'123@booble.com[/email]', 9999, 'admin', '03.09.2015 12:16', 0, '', '', 'default'),
    (6, 'user1', '1bbd886460827015e5d605ed44252251', [email='user1@user.com]'user1@user.com[/email]', 0, 'user', '04.09.2015 16:05', 0, '', '', 'default');

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    Добавлено спустя 16 секунд:
    Это?
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    да, странно, должно работать, покажи запрос
     
  17. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Сейчас не дома, позже покажу.
     
  18. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Всё, спасибо вам огромное, это именно то что я хотел. Всё получилось)
     
  19. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Кстати, не подскажете ещё ондно? Как можно реализовать чтоб после java отправки сообщения - оно добавлялось на страницу без её обновления? При каком условии кидать запрос, что именно запрашивать, и самое главное - ка потом добавлять новую строку в таблице?
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    не называй javascript как java.
    смотри ajax, jquery.
    остальное опиши подробнее.
     
  21. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я понял что это делается по средствам jquery, но когда именно делать проверку, при каком событии, и как, собственно, производить сам процесс обновления?
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ну это можно книгу прочитать как работают веб сайты и как взаимодействие происходит, там всего 400-1000 страниц и всё описано.

    ajax запрос это тоже самое что и любой другой get/post запрос, но его результат можно получить в javascript и после чего решать дальше что делать.
    например скрипт вернул данные что всё хорошо, и ты на javascript отправленное сообщение вставляешь в то место где хочешь с помощью модификации DOM (document object model) документа.

    сделай для себя отдельно просто пример где будет javascript с ajax запросом взаимодействовать с php сриптом
     
  23. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Да я знаю как работает ajax запрос... Я не могу понять как реализовать обновление сообщений когда я отправил и когда мне отправили. При каком событии нужно задавать вопрос базе данных, есть ли в ней запись, или нет. И как вообще реализовать вывод сообщений средствами js а не php, так как через php я уже сделал, но так нужно каждый раз обновлять страницу чтоб узнать, не пришло ли мне сообщение.

    Добавлено спустя 4 минуты 13 секунд:
    А я хочу сделать, к примеру, как в ВК: сообщение появилось в БД - и тут же оно появилось на странице.
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    SamyRed пример с вк понятен,
    например самый ресурсо ёмкий вариант, это на js раз в пару секунд обращаться на сервер и проверять нет ли новых сообщений,
    лучше вместо ajax воспользоваться websockets, можно посмотреть как это работает тут http://pusher.com/ а потом использовать свой сервер с websockets
     
  25. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ладно, с этим разберусь как нибудь. Если не сложно. помогите ещё в одном:
    Я сделал у себя на сайте вывод новостей, к каждой новости - комментарии, и под каждым комментарием - кнопка "like". Так вот, в чём собственно проблема: кнопка "like" работает только у последнего комментария. У остальных показует счётчик, а когда нажимаю на неё - ничего не происходит: Можете убедиться в этом здесь: http://samycraft.pe.hu/news.php?new_id=5. Только там чтоб лайкать надо авторизоваться сперва. Но это не суть. Вот код самой кнопки:
    Код (PHP):
    1. <?php } if ($_SESSION["user_access_level"] != "guest"){
    2. $res1 = $mysqli->query("SELECT * FROM likes_com WHERE com_id='{$row_com["id"]}'");
    3. ?>
    4. <input type="hidden" id="com_id" value="<?php echo $row_com["id"];?>"></input>
    5. <td class="table_com1">
    6. <table class="like_btn"><tr><td><input id="com_like_btn" title="Нравится" name="com_like_btn" class="mini_buttons" type="image" src="images/like.png"></input></td><td style="padding-left: 5px"><span id="num_likes"><?php echo $res1->num_rows;?></span></td></tr></table>
    7. </td>
    8. <?php }?>
    Вот JS:
    Код (PHP):
    1.     <script>
    2.     $(document).ready(function(){
    3.     $("#com_like_btn").click(function(){
    4.         $.ajax({
    5.             type:"POST",
    6.             url:"handlers/add_like.php",
    7.             data:{"com_id": $("#com_id").val()},
    8.             response:"text",
    9.             success:function(data) {
    10.                 $("#num_likes").text(data);
    11.             }
    12.         });
    13.     });
    14.     });
    15.     </script>
    И вот обработчик:
    Код (PHP):
    1. <?php
    2. include ("config.php");
    3. connectDB();
    4. $res = $mysqli->query("SELECT * FROM likes_com WHERE (com_id='{$_POST["com_id"]}' AND author='{$_SESSION["user_login"]}')");
    5. if ($res->num_rows){
    6. $mysqli->query("DELETE FROM likes_com WHERE (com_id='{$_POST["com_id"]}' AND author='{$_SESSION["user_login"]}')");
    7. }else {
    8. $mysqli->query("INSERT INTO `likes_com` (`com_id`, `author`) VALUES('".$_POST["com_id"]."', '".$_SESSION["user_login"]."')");
    9. }
    10. $res1 = $mysqli->query("SELECT * FROM likes_com WHERE com_id='{$_POST["com_id"]}'");
    11. echo $res1->num_rows;
    12. closeDB();
    13. ?>
    Но с обработчиком всё вродь норм, так как отправляя запрос - я правильно получаю ответ и все действия так же выполняются. Не работает именно кнопка "like" для всех комментариев кроме первого.

    Я подозреваю что это изза одного id у этих кнопок, так как id задаётся вручную, а комменты выводятся циклом.