Это у них, по видимому, не id пользователя, а ID диалога. А сообщения там ajax-ом отправляются. По поводу проверки - зависит от сложности логики. Может у тебя будет логика, что чтобы отправить мне сообщения, пользователь должен решить 5 дифференциальных уравнений, значит ставишь такое условие. Логика зависит от технического задания
Вы чуть чуть сильно сократили код) обратите внимания что там стоит фраза "пользователь_имеет_право_отправлять_сообщения", она не просто так там стоит.. это должна быть функция проверки))
@Алекс8 а что isset это уже не функция? --- Добавлено --- @mkramer По поводу что сообщения ajax-ом отправляются я это знаю, смотрю код вк то есть скрипт, как устроен))) У меня ситуация сейчас стоит в следующем, отправить письмо я могу, кое как за неделю разобрался а теперь как ответить пользователю на его смс, то есть, если я правильно понял, скрипт отправки будет один и тот же, что и при отправке смс? Мы просто создаем под письмом ссылку, типа на форму отправки, а форма уже будет обрабатывать данные и передавать опять на тот скрипт который делает отправку? Верная у меня сейчас логика?
ну, во-первых, не функция. А во-вторых, @Алекс8 просто как и я не понимает, чем мог смущать id в адресной строке, если даже нету проверки прав пользователя, т.е. любой пользователь имеет право посылать сообщение любому пользователю.
@mkramer Мини вопрос: Делаю три запроса: вывожу на главной странице кол., не принятых заявок и не прочитанных сообщений (Друзей, Сообщений)+вывожу логин. Как лучше поступить все эти три запроса выводят данные из одной таблицы. Лучше оставить так как и есть, или оптимизировать создать один запрос который будет выводить и логин и заявки и сообщения. Ну вот просто интересует как бы вы поступили бы?
Три или один - большой разницы нету, так что сделал бы как проще. https://php.ru/manual/function.isset.html#refsect1-function.isset-notes Читаем мануал полностью. Эта конструкция - один из поводов покритиковать php, похожа на функцию, но функцией не является
Всем привет, у меня не получается удалить сообщения по условию, с одной стороны я удаляю а с другой нет, как то так опишу: 1. есть скрипт сообщений, допустим message.php 2. по дефолду у меня стоит вывод сообщений всех пришедших от других пользователей 3. а по нажатию на ссылку, отправленные показываю все отправленные сообщения Так в чем заключается проблема, в этом скрипте message.php и в отправленных и в полученных я создаю ссылку на удаления сообщения они оба обращаются в скрипт message.php PHP: <?php switch($act){ case "delet": $mid = intval($_POST['mid']); $folder = isset($_POST['folder']); //inbox полученные outbox отправленные if($folder == 'inbox') $folder = 'inbox'; else $folder = 'outbox'; //тут идут запросы на удаления break; case "outbox": //отправленные echo 'все отправленные сообщения'; echo '<a href="">удалить смс</a>'; break default://полученные echo 'все пришедшие сообщения'; echo '<a href="">удалить смс</a>'; } Как бы показал структуры файла message.php и описал наглядно как выглядит у меня вся структура файла. По условию из case: delet получается так: 1. если я нахожусь по дефолту в полученных сообщениях то при нажатии на ссылку я удаляю смс 2. но когда я перехожу в отправленные сообщения, и пробую удалить сообщения, то не чего не удаляется 3. ссылки на удаления идентичны что в отправленных что в полученных 4. если я поменяю в условии inbox на outbox то будет наоборот, в полученных я не смогу удалять а в отправленных удалять смогу. 5. inbox и outbox это поля в бд и хранятся так: id, user1, user2, inbox (id, кому, от кого, inbox) id, user2, user1, outbox (id, от кого, кому, outbox) Что же мне в таком случае делать, как правильно построить условие, чтобы работало корректно? Очень благодарен буду за объяснения, или предложения как быть в такой ситуации.
Вы извините но нет вопрос не решен( он еще в силе, я просто не пойму, в условии стоит у меня, если ты смс отправил то ты его удалить можешь только от себя, а кому отправил не можешь, а если письмо тебе пришло, по принципу его же тоже можно удалить но не удаляется(. Помогите пожалуйста ребята!
многие-ко-многим делать надо. Таблицу user_id | message_id Привязываешь сообщение и к отправителю, и к получателю. Если получатель удалил сообщение - удаляешь запись их этой таблицы, а у отправителя оно остаётся. И наоборот.
@mkramer Я так и делаю смотри на сриншоте, что не так в таблице? может ему это условие не нравится? PHP: if($folder == 'inbox') $folder = 'inbox'; else $folder = 'outbox';
PHP: Показываю код, может легче будет вам разобраться в чем проблема: <?php case "delet": $mid = intval($_POST['mid']); $folder = intval($_POST['folder']); if($folder == 'inbox') $folder = 'inbox'; else $folder = 'outbox'; //$user_id это сессия пользователя $mid пришедшие данные из формы //которые передаю по $_GET параметру, ну и $folder сами видите от куда беру //Проверяем на факт существования сообщения для юзера $row = $pdo->prepare(' SELECT `pm_read`, `from_user_id` FROM `messages` WHERE `id` = :id AND `for_user_id` = :for_user_id AND `folder` = :folder'); $row->execute(['id' => $mid, 'for_user_id' => $user_id, 'folder' => $folder]); $res_row = $row->fetch(); if($res_row){ //Удаляем само сообщение $del = $pdo->prepare(' DELETE FROM `messages` WHERE `id` = :id AND `folder` = :folder AND `for_user_id` = :for_user_id'); $del->execute(['id' => $mid, 'folder' => $folder, 'for_user_id' => $user_id]); } А вот форма где происходит нажатия пользователя для подтверждения удаления: PHP: <div class="content"> <form action="?go=msg&act=delet" method="POST"> <input type="" name="mid" placeholder="наберите id пользователя..." value="<?= $_GET['mid']; ?>"/> <input type="" name="folder" placeholder="наберите id пользователя..." value="<?= $_GET['folder']; ?>"/>//Что подставить сюда я не знаю просто придумал. <input type="submit" value="Подтвердите действие" /> </form> </div> Может в коде я ошибаюсь?
@igordata Как вытащить полный диалог между пользователя, и по нажатию на него открывался полный список переписки между двумя пользователями?
@igordata Приходит один вариант, выводит список диалогов сколько их. А вот как открыть этот диалог и посмотреть всю переписку между ними, не чего не приходит в голову(. PHP: default: //################### Вывод всех диалогов ###################// //Вывод диалогов $vivod_dailog = $pdo->prepare(" SELECT SQL_CALC_FOUND_ROWS `tb1`.`msg_num`, `im_user_id`, `tb2`.`user_id`, `user_login`, `user_photo` FROM `im` tb1, `users` tb2 WHERE `tb1`.`iuser_id` = ? AND `tb1`.`im_user_id` = `tb2`.`user_id` ORDER by `idate` DESC LIMIT 0, 50"); $vivod_dailog->execute([$user_id]); $dialog_result = $vivod_dailog->fetchall(); //подключаем форму диалогов include'./templates/default/im/dialog.php'; foreach($dialog_result as $row){ echo $row['user_login'].'<br>'; echo $row['im_user_id'].'<br>'; echo'<a href="?go=msg&for_user='.$row['im_user_id'].'&act=history" onClick="">написать</a>'; } Может идейку подкинешь?
@igordata у меня получается одна таблица с диалогами вторая с сообщениями, и при удалении диалога по условию сам диалог удаляется а все сообщения которые с ним связаны не удаляются) таблица диалогов идет многие ко многим.
@igordata Разобрался, если я создаю диалоги (многие ко многим) то лучше обязательно будет создать и сообщения (многие ко многим) И при удалении будет так, если я удалю диалог, то диалог у другого юзера диалог останется, так как переписка записывалась и первому и второму пользователю. Ну а если однонаправленная то лучше что в одно что во второй лучше создавать (многие к одному)
@igordata ну спасибо, а теперь как мне открыть весь список сообщений одного диалога, не подкинешь идейку?