За последние 24 часа нас посетили 17555 программистов и 1716 роботов. Сейчас ищут 1757 программистов ...

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

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

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Так народ, я попал в неловкую ситуацию, при обращении к GET параметру, при отправке письма я отправляю письмо в неизвестное куда, а то-есть от 1 кому 0 но такого юзера с таким id не будет конечно, что делать?
     
  2. denis01

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

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

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Запрос сделать, на проверку id?
     
  4. denis01

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

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

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Я понимаю тебя короче делаю так, исправьте меня.
    PHP:
    1. $act = $_GET['act'];
    2. $user_id = $_SESSION['user_id'];
    3.  
    4. $message = htmlspecialchars($_POST['message']);
    5. $for_user_id=(int)$_POST['for_user_id'];
    6.  
    7. //Проверка на существование получателя
    8. $row = $pdo->prepare('SELECT `user_id` FROM `users` WHERE user_id = ? LIMIT 1');
    9. $row->execute([$for_user_id]);
    10. $res = $row->fetch();
    11. if($res){
    12.  
    13. //Отправляем сообщение получателю
    14. $send1 = $pdo->prepare('INSERT INTO `messages` (`text`, `for_user_id`, `from_user_id`) VALUES (?,?,?)');
    15. $send1->execute([$message, $for_user_id, $user_id]);
    16. $error=$send1->errorInfo();    
    17. if($error[0]==0){
    18.     echo 'Сообщение успешно отправлено юзеру<br>';
    19. }else{
    20.     echo 'Ошибка отправки сообщения';
    21. }
    22. }else{
    23. echo 'пользователя такого нет';
    24. }
    25. }
    Но почему то отправляю от одного но не записывает второму пользователю(
     
    #30 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
    denis01 нравится это.
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    вроде нормально, но там где пользователя выбираешь из базы, можно тянуть в select только user_id, поставить limit 1, ещё вместо fetch это всё к пользователю относиться, можно проверять если есть один результат
    --- Добавлено ---
    у тебя один insert, почему должен второму пользователю что-то записывать?
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Исправил посмотри выше ты за такой запрос говорил?
    Сейчас я для начала добиваюсь чтобы запись была такая:
    Для одного пользователя, а потом для 2их пользователей добавлю

    message(text, 1, 2)
    А у меня получается что запись получается такая:
    message(text, 1, 0)

    Что ж я не так делаю?
     
    #32 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
    denis01 нравится это.
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Разобрался все же, ошибка была с методами GET и POST ошибался( вот это я даю(
    В ссылках не то указывал просто)
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Каждая твоя ошибка - это закрепление материала, а значит укрепление стержня разраба :)
     
    denis01 нравится это.
  10. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    @mahmuzar бро, а зачем у тебя в таблице correspondense индекс дважды на столбце from_id ? Чтобы наверняка ?
     
  11. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
  12. mahmuzar

    mahmuzar Старожил

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

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @TeslaFeo
    @mahmuzar
    Ситуация такая вот есть форма, с указанным методом POST:
    PHP:
    1. <form action="?go=messages" method="POST">
    2.     Текст сообщения: <br /><textarea name="msg" autofocus=""></textarea><br />
    3.     <input type="submit" value="Отправить">
    4. </form><br>
    и обработчик этой формы называется messages.php

    А на странице пользователя я указываю что то типа:
    PHP:
    1. echo '<a href="?go=messages&act=send&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>';
    Но это мне не подходит так как данные видно при отправке в адресной строке.
    Как же заменить можно на кнопку, чтобы он правильно обращался к скрипту, именно чтобы можно одному юзеру писать, я так и не понял(
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну можно подрубить какой-нибудь AJAX, но вообще оно и должно быть видно в адресной строке. Что в этом плохого?
     
  15. denis01

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

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

    Это как?
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Я же и прошу, помочь, как мне ссылку можно правильно указать методом POST это должна быть кнопка? или же ссылка?
    Ситуация такова, заходишь ко всем пользователям, ты ему можешь, написать и добавить в друзья, то-есть нужно ссылку сделать или же кнопку?
    У меня ссылка получается, но когда перехожу по ссылке, получается, что сообщение отправлено, и не успел еще даже не чего написать.
    А вот как же поступить только с кнопкой. Ну помогите пожалуйста.
     
    #41 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  17. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    И как ты думаешь, почему? Совсем не потому, что у тебя get. Начни уже думать... У тебя видимо код обработки и код рисующий форму в одном файле, при этом ты не проверяешь нормально, пришли ли данные.
    PHP:
    1. if ($_SERVER["REQUEST_METHOD"] === "POST") {
    2.   // Отправить сообщение
    3.   // Отредиректить юзверя куда надо
    4. } else {
    5.   // Вывести ему красивую формочку
    6. }
    Чтоб был post-запрос, нужна не ссылка/кнопка или что-то ещё, а нужна форма или JavaScript, скрыто создающий форму
    --- Добавлено ---
    P.S. "ничего" - это одно слово, так, к сведению. Жутко раздражает, что в интернете постоянно пишут "не чего"...
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Именно так, у меня форма и обработчик, находятся в одном файле.
    Я понял, будем пробовать сделать.
    Правда я не работал с javascript но нужно пробовать.
    Посмотрел примеры, и не понял, что мне в он клин надо указать, функцию, а если ее нету, что указывать?
    PHP:
    1. echo '<input type="Button" value="написать сообщение" onclick="ЧТО тут(И тут надо писать?);">';
    Пробовал вот так:
    PHP:
    1. echo '<input type="Button" value="написать сообщение" onclick="?go=messages;">';
    2. echo '<a href="?go=messages&act&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>';
    Вместо 2 строки первую подставить но не получилось.
     
    #43 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Добрые люди помогите.
     
  20. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @_ne_scaju_ через тег form и input можешь отправить post
     
  21. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Когда я за других пишу код, мне деньги платят. Я же тебе написал в чём проблема, почему у тебя сообщения отправляются при клике по ссылке. То, что ты там пробовал - вообще смысла не имеет.
     
  22. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Все нет сил на пальцах показывать скину 2 файла, что и как делаю!
    Посмотрите пожалуйста, кому не в лень.
    И подскажите как мне можно использовать этот пост метод.
    Хочу из скрипта userInfo.php перекинуть на скрипт messages.php используя кнопку, при этом.
    --- Добавлено ---
    @mkramer
    А ситуация такова, в адресной строке можно просто указать любой id пользователя и написать ему сообщения, это же не правильно и это метод GET а при методе POST такого нельзя будет сделать.
     

    Вложения:

    • codPHP2file.zip
      Размер файла:
      2,1 КБ
      Просмотров:
      1
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Вот код остаточный но мне все время выводит no_user почему так?
    Скрипт, где я перекидываю пользователя, на форму для написания смс:
    PHP:
    1. <?php
    2. session_start();//Подключаю сессию
    3. //Подключаю БД и разные функции
    4. include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php');
    5. error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки
    6.  
    7. //Проверяем если в сессии есть id
    8. if(isset($_SESSION['user_id'])){
    9. $user_id = $_SESSION['user_id'];//Экранирую данные сессии в данном случае для сессии
    10.  
    11. //Создаем гет параметр к нему мы будем обращатся.
    12. $id = intval($_GET['u_info']);
    13.  
    14. //Получаем полную информацию о пользователе к которому заходим на страницу
    15. $user = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ?');
    16. $user->execute([$id]);//Из гет параметра подставляем id, для индетификации пользователя
    17. $result = $user->fetchAll();//Выводим результат, что получилось
    18.  
    19. if($result){
    20. foreach($result as $all_info){
    21. echo '<div id="infouser">Вы зашли на страницу<div id="log">'.$all_info['user_login'].'</div>
    22. <img src="'.$all_info['user_photo'] .'" height="150px"></div>';
    23.  
    24. //////////////////////////////////////////////////это написал
    25. //Создаем кнопку для отправки сообщения
    26. echo '
    27. <form action="?go=f_messages" method="POST" >
    28. <input type="submit"  value="Отправить" />
    29. </form>';
    30. //////////////////////////////////////////////////вместо этого
    31. //echo '<a href="?go=messages&act&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>';
    32. echo '<a href="?go=friends&act=send_demand&for_user_id='.$all_info['user_id'].'">Добавить в друзья</a>';
    33.             }
    34.         }
    35.     }else{
    36.         echo 'Пха вон';
    37.     }
    38. ?>
    Вот куда я перекидываю пользователя при нажатии на кнопку отправить
    PHP:
    1. <form action="?go=messages" method="POST" enctype="multipart/form-data">
    2.     Текст сообщения: <br /><textarea name="message"></textarea><br />
    3.     <input type="submit"  value="Отправить" />
    4. </form><br>
    И дальше уже с этой формы я стараюсь написать сообщения пользователю, и отправить его на скрипт обработчик:
    PHP:
    1. [php]<?php
    2. include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php');
    3.  
    4. $act = $_GET['act'];
    5. $user_id = $_SESSION['user_id'];
    6.  
    7. if($_SERVER["REQUEST_METHOD"] === "POST"){
    8.  
    9. $message = htmlspecialchars($_POST['message']);
    10. $for_user_id = intval($_POST['for_user_id']);//получатель
    11.  
    12. if(isset($message) AND !empty($message)){
    13. //Проверка на существование получателя
    14. $row = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ? LIMIT 1');
    15. $row->execute([$for_user_id]);
    16. $res = $row->fetchAll();
    17. if($res){
    18. foreach($res as $all_info){
    19. echo $all_info['user_login'].'<br>';
    20. }
    21. //Отправляем сообщение получателю
    22. $send1 = $pdo->prepare('
    23.    INSERT INTO `messages`
    24.    (`text`, `for_user_id`, `from_user_id`)
    25. VALUES
    26.  (?,?,?)');
    27. $send1->execute([$message, $for_user_id, $user_id]);
    28.  
    29. }else{
    30.     echo 'no_user ';
    31. }
    32. }else{
    33.     echo 'no_sms ';
    34. }
    35.  
    36. } else {
    37. //Вывести ему красивую формочку
    38. echo '
    39. <form action="?go=messages" method="POST">
    40. Текст сообщения: <br/><textarea name="message" autofocus=""></textarea><br/>
    41. <input type="submit" value="Отправить">
    42. </form><br>';
    43. }
    44. var_dump($res);
    45. ?>
    Но у меня все время пишет no_user
    Помогите пожалуйста у меня пишет все время no_user
    Как же правильно при отправке письма указывать путь к скрипту, или что я не так делаю, объясните пожалуйста.
     
    #48 _ne_scaju_, 12 май 2017
    Последнее редактирование: 12 май 2017
  24. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Получается я отправляю в пустой id, когда убираю проверку на существования пользователя
    PHP:
    1. //Проверка на существование получателя
    2. $row = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ? LIMIT 1');
    3. $row->execute([$for_user_id]);
    4. $res = $row->fetchAll();
    5. if($res){
    6. foreach($res as $all_info){
    7. echo $all_info['user_login'].'<br>';
    8. }
    А когда опять этот запрос на проверку пользователя пишу, то мне пишет no_user
    Ну помогите пожалуйста, я учусь но справится сейчас не могу...
    Посмотрите на скриншот, от кого записывается id = 4 а кому id=0 но такого пользователя нет сто пудово.
     

    Вложения:

    • 1.png
      1.png
      Размер файла:
      2,6 КБ
      Просмотров:
      4
  25. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Можно, только чуть сложнее (совсем чуть-чуть). Это решается тем, что при обработке запроса, ты просто проверяешь, авторизован (имеет ли право) ли текущий пользователь отправлять сообщение
    --- Добавлено ---
    Как пример (что у тебя за база, не знаю). Есть таблица friends с полями friend1, friend2.
    PHP:
    1. //...
    2. $currentUserId = $_SESSION["user_id"];
    3. $toUserId = $_GET["user_id"];
    4. $smt = $db->prepare("select count(1) as c from friends where friend1=? and friend2=?")
    5. $smt->bind_param("ii", $currentUserId, $toUserId);
    6. $res = $smt->execute();
    7. if ($res->fetch_assoc()["c"] == 0) {
    8.    die("Пошёл на ... ");
    9. }
    10. // Отправляем сообщение или выводим форму
    С постом вместо ссылки ты только себя запутаешь, что за пост пришёл - на показ формы, на отправку сообщения. И потом, будет проблема с выскакиванием дурацких окошек при попытке обновить страницу отправки - оно тебе надо?
     
    #50 mkramer, 12 май 2017
    Последнее редактирование: 12 май 2017