Доброго времени суток, можно ли получить все строки из БД где, к примеру, id = 1 и id = 2. То есть что-то типа этого: Код (PHP): $res_msg = $mysqli->query("SELECT * FROM messages WHERE author= '{$_SESSION["user_login"]}' AND author='{$row_usr["login"]}'"); while ($row_msg = $res_msg->fetch_assoc()){ Причём надо чтоб выводились строки где автор - "1" а получатель - "2" и те где автор - "2" а получатель - "1" Этот код не работает. Смысл в том что хочу сделать систему сообщений. И мне надо чтоб на странице отображались только сообщения отправленные мной данному человеку и наоборот. Если запросить просто сообщения где я автор - то выведет все сообщения, и т.д.
С логикой проблема, autor не может быть сразу двух разных значений. Если я тебя правильно понял, используй mysql IN
У меня в бд есть столбцы автор и получатель. Надо чтоб выводились значения где, к примеру, автор "1" а получатель "2", а так же одновременно с этим автор "2" и получатель "1". Вот что я имел ввиду.
БД: Таблица messages: id | subject | author | text | 1 || Вася ||| Петя ||| Привет, Вася Таблица users: id | login | pass | email .... 1 | Вася | ЯВАСЯ | вася@вася.вася 2 | Петя | ЯПЕТЯ | петя@петя.петя Вот... И надо чтоб на странице переписки там где владелец сессии петя, а тот кому он пишет - вася, отображались все сообщения: которые написал Петя Васе и Вася Пете. Добавлено спустя 5 минут 22 секунды: Пока что мне удалось лишь вытянуть все сообщения где автор "Вася" и проверить, равен ли ник автора нику получателя(из $_GET)
Почему вместо id users у тебя в messages "Вася" и "Петя"? Выкладывай SQL с помощью которого можно твою базу создать и заполнить данными, так больше шансов, что тебе помогут.
Добавлено спустя 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 ;
примерно так WHERE (`subject` = 'вася' AND `author`='петя') OR (`subject` = 'петя' AND `author`='вася')
Вот что у меня пока что получилось: Код (PHP): <!DOCTYPE html> <?php include("handlers/config.php"); session_start(); ?> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta type="" charset="utf-8"></meta> <link href="css/styles.css" rel="stylesheet" type="text/css"> <title>SamyCraft.hol.es</title> <script src="js/jquery.js" type="text/javascript"></script> <link rel="SHORTCUT ICON" href="images/favicon.ico" type="image/x-icon"> <script type="text/javascript"> $(document).ready(function(){ $("#send_msg_btn").click(function(){ if ($("#msg_text").val() == "" || $("#msg_text").val() == " "){ $("#msg_text").css("border", "1px solid #ffa3a3"); $("#send_err").css("color", "#ff6666"); $("#send_err").text("Вы не ввели сообщение!"); } else{ $.ajax({ type:"POST", url:"handlers/check_msg.php", data:{"text":$("#msg_text").val(), "author": $("#author").val(), "subject": $("#subject").val()}, response:"text", success:function(data) { $("#msg_text").val(""); $("#msg_text").css("border", "1px solid gray"); $("#send_err").text(""); } }); } }); }); </script> </head> <body> <?php include("blocks/header.php");?> <?php connectDB(); $res_usr = $mysqli->query("SELECT * FROM users WHERE id='{$_GET["subject_id"]}'"); $row_usr = $res_usr->fetch_assoc(); closeDB(); ?> <div class="central_block"> <?php if ($_SESSION["user_login"] != "guest"){?> <div style="float: left; width: 100%" class="block1"> <p class="title3">Переписка (<?php echo $row_usr["login"];?>)</p> <input type="hidden" id="author" value="<?php echo $_SESSION["user_login"];?>"/> <input type="hidden" id="subject" value="<?php echo $_GET["subject_id"];?>"/> <textarea id="msg_text" style="resize: none; width: 60%; min-height: 65px; overflow: hidden;"></textarea></br> <input type="submit" id="send_msg_btn" class="button" value="Отправить"/> <span id="send_err"></span> <table style="margin: 0 0 0 30px"> <?php connectDB(); $res_msg = $mysqli->query("SELECT * FROM messages WHERE author= '{$_SESSION["user_login"]}' ORDER BY id DESC"); while ($row_msg = $res_msg->fetch_assoc()){ $res_usr1 = $mysqli->query("SELECT * FROM users WHERE login='{$row_msg["author"]}'"); $row_usr1 = $res_usr1->fetch_assoc(); if($row_msg["subject"] == $row_usr["login"]) {?> <tr style="padding: 10px 0 5px 0"> <td><input style="top: 0; max-width: 32px" type="image" src="user_images/<?php echo $row_usr1["image"];?>.jpg" class="text2"/></td> <td><span class="text1"><?php echo $row_msg["text"];?></span></td> </tr> <?php }} closeDB();?> </table> </div> <?php }?> </div> <?php include("blocks/right_block.php");?> <?php include("blocks/footer.php");?> </body> </html>
Спасибо за совет, прочту. Сделал так как вы посоветовали, но так всё равно выводит только те сообщения которые написал владелец сессии. Не выводит те которые написали ему.
-- 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', '<><><><><>', '04,09,2015 16:00', 0), (39, '123', 'SamyRed', ''''''''' """"', '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 секунд: Это?
Кстати, не подскажете ещё ондно? Как можно реализовать чтоб после java отправки сообщения - оно добавлялось на страницу без её обновления? При каком условии кидать запрос, что именно запрашивать, и самое главное - ка потом добавлять новую строку в таблице?
Я понял что это делается по средствам jquery, но когда именно делать проверку, при каком событии, и как, собственно, производить сам процесс обновления?
ну это можно книгу прочитать как работают веб сайты и как взаимодействие происходит, там всего 400-1000 страниц и всё описано. ajax запрос это тоже самое что и любой другой get/post запрос, но его результат можно получить в javascript и после чего решать дальше что делать. например скрипт вернул данные что всё хорошо, и ты на javascript отправленное сообщение вставляешь в то место где хочешь с помощью модификации DOM (document object model) документа. сделай для себя отдельно просто пример где будет javascript с ajax запросом взаимодействовать с php сриптом
Да я знаю как работает ajax запрос... Я не могу понять как реализовать обновление сообщений когда я отправил и когда мне отправили. При каком событии нужно задавать вопрос базе данных, есть ли в ней запись, или нет. И как вообще реализовать вывод сообщений средствами js а не php, так как через php я уже сделал, но так нужно каждый раз обновлять страницу чтоб узнать, не пришло ли мне сообщение. Добавлено спустя 4 минуты 13 секунд: А я хочу сделать, к примеру, как в ВК: сообщение появилось в БД - и тут же оно появилось на странице.
SamyRed пример с вк понятен, например самый ресурсо ёмкий вариант, это на js раз в пару секунд обращаться на сервер и проверять нет ли новых сообщений, лучше вместо ajax воспользоваться websockets, можно посмотреть как это работает тут http://pusher.com/ а потом использовать свой сервер с websockets
Ладно, с этим разберусь как нибудь. Если не сложно. помогите ещё в одном: Я сделал у себя на сайте вывод новостей, к каждой новости - комментарии, и под каждым комментарием - кнопка "like". Так вот, в чём собственно проблема: кнопка "like" работает только у последнего комментария. У остальных показует счётчик, а когда нажимаю на неё - ничего не происходит: Можете убедиться в этом здесь: http://samycraft.pe.hu/news.php?new_id=5. Только там чтоб лайкать надо авторизоваться сперва. Но это не суть. Вот код самой кнопки: Код (PHP): <?php } if ($_SESSION["user_access_level"] != "guest"){ $res1 = $mysqli->query("SELECT * FROM likes_com WHERE com_id='{$row_com["id"]}'"); ?> <input type="hidden" id="com_id" value="<?php echo $row_com["id"];?>"></input> <td class="table_com1"> <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> </td> <?php }?> Вот JS: Код (PHP): <script> $(document).ready(function(){ $("#com_like_btn").click(function(){ $.ajax({ type:"POST", url:"handlers/add_like.php", data:{"com_id": $("#com_id").val()}, response:"text", success:function(data) { $("#num_likes").text(data); } }); }); }); </script> И вот обработчик: Код (PHP): <?php include ("config.php"); session_start(); connectDB(); $res = $mysqli->query("SELECT * FROM likes_com WHERE (com_id='{$_POST["com_id"]}' AND author='{$_SESSION["user_login"]}')"); if ($res->num_rows){ $mysqli->query("DELETE FROM likes_com WHERE (com_id='{$_POST["com_id"]}' AND author='{$_SESSION["user_login"]}')"); }else { $mysqli->query("INSERT INTO `likes_com` (`com_id`, `author`) VALUES('".$_POST["com_id"]."', '".$_SESSION["user_login"]."')"); } $res1 = $mysqli->query("SELECT * FROM likes_com WHERE com_id='{$_POST["com_id"]}'"); echo $res1->num_rows; closeDB(); ?> Но с обработчиком всё вродь норм, так как отправляя запрос - я правильно получаю ответ и все действия так же выполняются. Не работает именно кнопка "like" для всех комментариев кроме первого. Я подозреваю что это изза одного id у этих кнопок, так как id задаётся вручную, а комменты выводятся циклом.