За последние 24 часа нас посетили 17752 программиста и 1714 роботов. Сейчас ищут 1662 программиста ...

Как реализовать смс переписку между авторизованными пользователями сайта PHP MySQL

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 11 май 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Так для начало, уже лучше сделать гет?
    а как же быть с полем messages куда пользователь пишет сообщение?
    Поле я в коде объявляю POST его что тоже на GET изменить.
    Натолкните на нужную идею, спасибо.
    А что в коде мне можно подправить?
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ты раздели. По Get - выводить форму, по post - отправлять форму. В своём коде разбирайся сам. А то из твоих предыдущих сообщений следует, что ты форму для заполнения сообщения хочешь выводить по post - это нафиг никому не надо. Кода я тебе достаточно привёл.
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Сейчас буду делать, спасибо.
    --- Добавлено ---
    @mkramer
    Подставил свои значения, теперь мне все время пишет пошел на...
    PHP:
    1. $user_id = $_SESSION['user_id'];
    2. $for_user_id = !empty($_GET['for_user_id']) ? $_GET['for_user_id'] : 0;
    3. if(isset($message) AND !empty($message)){
    4.  
    5. $smt = $pdo->prepare("SELECT COUNT(1) AS c FROM `users` WHERE user_id=? AND user_id=?");
    6. $smt->execute([$user_id, $for_user_id]);
    7. $res = $smt->fetch();
    8. if ($res["c"] == 0) {
    9.    die("Пошёл на ... ");
    10.  
    11. }
    12. }else{
    13. echo 'пишем смс';
    14. }
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Серьезно?
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @romach
    А почему бы и нет? и что ты мне предлагаешь подставить туда? если не id пользователей.
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Я предлагаю немного подумать: вот к примеру, ты хочешь найти запись, где user_id=1 и одновременно user_id=2. Как ты себе это представляешь?
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Есть разница?

    Мой запрос, если что, предполагает, что сообщения можно отправлять только друзьям... Твой запрос предполагает, что сообщение можно отправлять только тем пользователям, у которых одновременно два разных ID, т.е. вообще никому :)))
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @romach
    @mkramer
    Мне бы пока что нужно, отправить от одного пользователя, другому,
    с друзьями сайта, это уже другой подход ваш...
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну так поменяй запрос соответственно... Т.е. тебе просто надо проверить, что оба пользователя существуют в базе. И выложи весь файл, чую, там лютая бредятина....
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    файл выложить который отвечает за отправку?
    Если да, я его уже несколько раз скинул.
    Вот на странице друзей делаю так:
    PHP:
    1. $check = $pdo->prepare('SELECT `for_user_id` FROM `friends_demands` WHERE `for_user_id` = ? AND `from_user_id` = ?');
    2. $check->execute([$get_user_id, $user_id]);
    3. $result = $check->fetch();
    4. if ($result){
    5. die("Пошёл на ... ");
    6. }else{
    7. $smt = $pdo->prepare("SELECT * FROM `users` WHERE user_id= ?");
    8. $smt->execute([$for_user_id]);
    9. $res = $smt->fetch();
    10.  
    11. if($res){
    12. echo 'что то не так';
    13. }else{
    14.     echo 'все хорошо показываю ссылку.';
    15.     echo '<a href="?go=f_messages&act&for_user_id='.$row['friend_id'].'">Написать сообщение</a>';
    16.         }
    17. }
    Ну это получается если в друзьях есть юзер тогда только видна будет ссылка.
    А как же сделать проверочку, если он тебе не друг, но ты ему хочешь написать сообщение?
     
    #60 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Надо проверить ещё раз, поскольку то, что ссылка не видна, не значит, что нельзя написать сообщение
    Если у тебя не предполагается возможность ограничения сообщений, просто убедится, что адресат есть в базе :)))
    --- Добавлено ---
    Программист - это тот, кто думает, а не тот, кто кодит
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @romach
    @mkramer
    Вот когда начинаю тестировать скрипт, у меня получается вот такая фигня, если я принудительно указываю id пользователя, то от этого юзера отправляется этому пользователю сообщение, делаю так:
    PHP:
    1. $act = $_GET['act'];
    2. $user_id = $_SESSION['user_id'];
    3. $message = htmlspecialchars($_POST['message']);
    4. $for_user_id = intval($_POST['for_user_id']);//получатель
    5.  
    6. if(isset($message) AND !empty($message)){
    7. //Отправляем сообщение получателю
    8. $send1 = $pdo->prepare('
    9.    INSERT INTO `messages`
    10.    (`text`, `for_user_id`, `from_user_id`)
    11. VALUES
    12.  (?,3,?)');
    13. $send1->execute([$message, $user_id]);
    14. $error=$send1->errorInfo();      
    15. if($error[0]==0){
    16.     echo 'Сообщение успешно отправлено юзеру<br>';
    17. }else{
    18.     echo 'Ошибка отправки сообщения';
    19. }
    20.  
    21. }else{
    22.     echo 'Введите сообщение';
    23. }
    А вот если я хочу подставить пришедший id из гет параметра то запись для него не проходит, делаю так:
    PHP:
    1. $act = $_GET['act'];
    2. $user_id = $_SESSION['user_id'];
    3. $message = htmlspecialchars($_POST['message']);
    4. $for_user_id = intval($_POST['for_user_id']);//получатель
    5.  
    6. if(isset($message) AND !empty($message)){
    7. //Отправляем сообщение получателю
    8. $send1 = $pdo->prepare('
    9.    INSERT INTO `messages`
    10.    (`text`, `for_user_id`, `from_user_id`)
    11. VALUES
    12.  (?,?,?)');
    13. $send1->execute([$message, $for_user_id,  $user_id]);
    14. $error=$send1->errorInfo();      
    15. if($error[0]==0){
    16.     echo 'Сообщение успешно отправлено юзеру<br>';
    17. }else{
    18.     echo 'Ошибка отправки сообщения';
    19. }
    20.  
    21. }else{
    22.     echo 'Введите сообщение';
    23. }
    Ну и что я по вашему не так делаю, я же думаю как не как.
     
  13. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Отлаживай. Скрипт выглядит логично на беглый взгляд, надо посмотреть, что в него прилетает значит
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Объясни отлаживать var_damp что ли использовать или print_r?
    вот что выдает var_damp
    Сообщение успешно отправлено юзеру
    array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
     
    #64 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Да, по всем точкам скрипта - на входе, до запроса, после запроса и т.п. Я, пока xdebug не научился, ещё ставил не просто var_dump, а die, чтоб у меня дальше определённой точки скрипт не выполнялся. Правда, для этого надо иметь представление, что должно быть в переменных, и сравнивать с тем, что в реале.
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    пример с die() покажи
     
  17. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    PHP:
    1. // Куча кода, которая вроде работает
    2. die(var_export($variable, 1) . " точка A");
    3. // Куча кода, который ещё не отладили
    Потом постепенно комментируешь такие строки, чтоб позволить коду выполняться дальше.
    --- Добавлено ---
    Или настраиваешь в NetBeans или phpStorm xdebug, и радуешься, что можешь трассировать, как белый человек :)
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @_ne_scaju_, да пора уже тебе освоить xdebug, установи одну из IDE и вперед.
     
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    У меня openserver стоит. Это не оно?
    Я понял для него дополнительно надо ide установить.
     
    #69 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  20. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    Установил ide второе, но теперь когда хочу прогружать страницы сайта, нот фоунд вылетает, и в браузерную строку фигня записывается какая та. Как с этим бороться?
    Вроде что-то разобрался но не факт.
     
    #70 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @_ne_scaju_, покажи скрин
    --- Добавлено ---
    @_ne_scaju_, погугли что такое xdebug
     
  22. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    И что ты установил? IDE - это, в случае PHP, Netbeans, phpStorm, Zend Studio. Интегрированная среда разработки. А мне сдаётся, ты ещё один серверный пакет установил...
     
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Я установил OpenServer очень давно, теперь сейчас поставил phpStorm сделал соединения между ними, чтобы работать можно было, ну и все. Теперь надо отлаживать код, а как?
    А толку что я его установил, вот что при отправке выходит, скриншот скинул.
    Я не пойму что приходит из другого скрипта, в скрипт отправки сообщения.
     

    Вложения:

    • 222.png
      222.png
      Размер файла:
      5,8 КБ
      Просмотров:
      2
    #73 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  24. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну ОК. Не знаю, что надо было сделать, чтоб от установки phpStorm отваливались локальные сайты...
    https://habrahabr.ru/post/250323/
    --- Добавлено ---
    Я, правда, пользовал доку от phpStorm, но сейчас переводчиком работать лень :)
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Настроил как было в топике, но блин переменные в консоль не выдает.