не как сообразить не могу, как отправить смс методом post. Есть форма, write_mess.php PHP: <form action="/phpmessages/send_mess.php" method="post" enctype="multipart/form-data"> <input name="to", value="<?php echo $_SESSION['user_id']; ?>"><br> <textarea name="message" placeholder="Введите Ваше сообщение.."></textarea><br /> <input type="submit" value="Отправить" /> </form> И обработчик к этой форме, send_mess.php PHP: <?php session_start();//Подключаю сессию //Подключаю БД и разные функции include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php'); error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки $user_id = $_SESSION['user_id']; if(isset($_POST['send']) && isset($_POST['to']) && isset($_POST['message'])){ $to = (int)$_POST['to'];//кому будем отправлять $message= htmlspecialchars($_POST['message']); var_dump($to); if(isset($message) AND !empty($message)){ $sql = $pdo->prepare("INSERT INTO `messages1` (`u_from`, `u_to`, `message`, `flag`) VALUES (?, ?, ?, ?)"); $sql->execute([$user_id, $to, $message, 0]); $result = $sql->fetch(); $error=$sql->errorInfo(); /*Проверка результата запроса*/ if($error[0]==0){ echo 'Сообщение успешно отправлено'; }else{ echo 'Ошибка отправки сообщения'; } if($result){ $sql = $pdo->prepare(' SELECT `user_login` FROM `users` WHERE `user_id`= ?'); $sql->execute([$to]); $row = $sql->fetch(); if($row){ echo 'все хорошо'; }else{ echo 'no_user'; } }else{ echo 'no_sms'; } }else{ echo 'пустое сообщение'; } }else{ echo 'не заполнены поля'; } ?> И чтобы обратится к форме я указываю в скрипте юзеров, кнопку, по которой он переходит на скрипт формы, а из формы должен попасть на обработчик, делаю это так, на странице юзеров users.php PHP: echo '<form action="/phpmessages/write_mess.php" method="POST" enctype="multipart/form-data"> <input type="submit" value="Написать" /> </form>'; И получается что я не могу отправить сообщение, помогите пожалуйста, добрые люди укажите на ошибки мои. Добавлю еще вопрос ругается на строку $for_user_id = intval($_GET['id']); если убираю проверку на нажатие кнопки. Жду ваших инструкций как это сделать правильно. ПОЖАЛУЙСТА, подскажите с методом POST как отправить сообщение. И правильно ли я указываю кнопку на странице юзеров, для перехода к форме а с формы на обработчик?
Добавлю еще вопрос ругается на строку не на эту $for_user_id = intval($_GET['id']); а на эту ругается, я перепутал $to = (int)$_POST['to'];//кому будем отправлять
Народ вот у меня такая ситуация, хочу чтобы в поле в форме сразу подставлялся ник юзера типа кому отправляю, у меня получилось сделать только с, id юзера подставлять так как я их беру из сессии и get параметра. Получается так: От кого беру из $_SESSION Кому беру из $_GET И получается подставляется id юзеров. Пример в поле выводится так: От кого: 1 Кому: 5 А как же подставить в поле от кого и кому логина пользователей? Надо ли запрос какой-то делать? Если да как он примерно выглядит?
@mkramer А с чего ты взял что я пишу соц сеть? И если это так то я пишу для себя сейчас. А помочь что слабо, просто намекнуть как это делается. Вообще ник отправителя я достать могу а получателя не получается.
Повторяю вытащить логин я могу, но когда начинаю писать юзеру то выполняется условие и соответственно срабатывает сообщение ошибочка, короче условие, что такого id нет, так как я вывожу логин в поле, а надо id. Как же обойти что бы в поле был логин и он принимал, его что это id пользователей.
перепиши условие, в чём проблема? Ты что, не хозяин своей программе? --- Добавлено --- Есть ещё <input type=hidden>, если что
@mkramer Ура вывести все пришедшие сообщения пользователю, я вывел) Теперь надо разобраться с выводом логина для определенного пользователя, я так понял надо типа сделать запрос который равнялся логину пользователя, и в поле тогда будет логин подставляться? Сегодня если получится напишу. --- Добавлено --- @romach Огромное спасибо, попробую этот метод)
Форумчане, а если я к get обращаюсь, создавая кнопку типа форм, метод пост, правильно ли так делать? Если не понятно опишу, что и как...
Народ вы конечно можете меня считать оленем, но как отправить сообщение методом POST? Отправить сообщение я могу только методом GET, а метод POST мне не подается. Ну покажите пример пожалуйста, я честно уже неделю сижу и не могу понять как метод POST работает. Вот например, написать сообщение, кнопка должна быть ссылкой или button? Покажите маленький пример, пожалуйста, вот от куда брать id юзера кому мы хотим написать сообщения, вот от кого мы берем из СЕСИИ а вот кому мы пишем я фиг его знаю от куда взять. Объясните пожалуйста будьте добры, я уже не могу, неделю парюсь честное слово. Спасибо за ранее за ваши объяснения.
Бро, тебе надо больше отдыхать, и учиться прочитанное "переваривать". Вот например так: HTML: <form method="POST"> <input type="text" name="message"> <input type="button" name="sendMessage" value="отправить"> </form> --- Добавлено --- Чтобы знать кому писать, надо иметь уже список пользователей выведенный на страницу. Когда кликаешь "написать сообщение", то GET параметром передаешь id выбранного пользователя, и далее на сервере получив этот ид подставляешь в форму как hidden input. В итоге ты будешь иметь такую html форму: PHP: <form method="POST"> <input type="hidden" name="toId" value="<?= $toId ?>"> <input type="text" name="message"> <input type="button" name="sendMessage" value="отправить"> </form>
@mahmuzar Вы меня правильно поняли, а вот когда я создаю ссылку типа НАПИСАТЬ СМС то этот id берем из страницы пользователя, или же из страницы из скрипта куда я перенаправляю пользователя? Второй вопрос это должна быть ссылка или же кнопка чтобы написать смс пользователю? То есть по клику на ссылку или кнопку он перенаправляется на форму со скриптом. Покажите пример ссылки как должен выглядеть ну или кнопки? СПАСИБО за объяснения. @igordata Отличие POST от GET в том, что в методе POST в поисковой строке не видно id пользователя, и ты если пишешь одному пользователю, то ты изменить не можешь id в поисковой строке. А в методе GET в поисковой строке видно id пользователя, и ты можешь манипулировать ими подставлять id и писать смс данному пользователю.
Одни и те же вопросы... Ты хозяин своему коду, что хочешь, то и делаешь. Хочешь - ссылку, хочешь - кнопку. Код разный будет. Я бы сделал ссылку Как ты можешь что-то "взять" из скрипта, который ещё не запущен? Всё же просто, и я тебе уже описывал PHP: // Скрипт A <a href="send-message.php?to=<?= $user["id"]; ?>">Отправить сообщение</a> // скрипт send-message.php <?php if ($_SERVER["REQUEST_METHOD"] !== "POST") { ?> <form action="<?= $_SERVER["REQUEST_URI"]; ?>"> <input type="hidden" name="to" value="<?= (int) $_GET["to"]; ?>"> <textarea name='message'></text> <button>ОТправить<button> </form> <?php } else { /* Записываем сообщение для пользователя, id которого в $_POST["to"] */ } Ты вот это читал? http://phpfaq.ru/na_tanke Если читал, то всё ли понятно?
@mkramer Я почти понял, вот to=<?=$user["id"]?> именно TO= от куда ты берешь? из страницы пользователя? то-есть там создана строка типа: PHP: вот например у меня на странице пользователей написано так, а ссылка какая будет? $for_user_id = isset($_GET['id']) ? $_GET['id'] : false; //или же $for_user_id = intval($_GET['id']); Например ссылка такая у меня, правильна ли? PHP: echo '<a href="?go=send&for_user_id='.$for_user_id.'">Написать Короче я for_user_id перед переменной $for_user_id в ссылке беру из формы.
@_ne_scaju_ да, ты прав, в адресной строке. По сути и всё. Т.к. http 1 текстовый протокол - отличий немного. Гетом правда нельзя гарантированно отослать большие данные, потому что кто-то по пути может отрезать лишнее, ибо так сложилось исторически. А данные отправленные постом обычно приходят так как и задумано. Но по сути - да. И то и другое приходят текстом, который парсится. Поэтому и не понятно, в чем у тебя может быть затык. Шо то, шо это, почти одинаково, то да сё - ну должно работать. Чтобы дебагать проблемы при запросах в браузере есть возможность все запросы логировать. В панели разработчика есть вкладка Network, там можно включить лог ajax-запросов - тыкни в XHR
Из базы. Я этот момент опустил, сам подумай немного, а? Я же не знаю, куда ты эту ссылку хочешь ставить, и откуда будешь брать данные. --- Добавлено --- Правильная - это такая, которая работает. Если её твой скрипт правильно обрабатывает, значит она правильная. --- Добавлено --- Мозг включи, уже пол года на форуме Я не знаю, что в твоём приложении правильно, что нет. И никто кроме тебя не знает. Я могу тебе подход продемонстрировать.
@igordata вроде включил, что дальше с ним делать? @mkramer Получается у тебя в базе есть поле to. А я думал ты берешь из формы этот TO= Надо будет попробовать подставить поле из базы, в ссылку.
@mkramer Смотри вся фишка какая, в скрипте страница пользователя user_id.php я вывожу полную информацию о пользователе, и указываю ссылку на форму, в которой пользователь будет заполнять данные а точнее писать смс: PHP: <?php session_start();//Подключаю сессию //Подключаю БД и разные функции include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php'); error_reporting(E_ALL); $logged = true; if($logged){ //Проверяет, если пользователь в сессии if(isset($_SESSION['user_id'])){ $user_id = $_SESSION['user_id'];//Сессия пользователя //Создаем гет параметр к нему мы будем обращаться. $for_user_id = intval($_GET['id']); //Получаем полную информацию о пользователе к которому заходим на страницу $user = $pdo->prepare(' SELECT `user_id`, `user_login`, `user_photo` FROM `users` WHERE `user_id` = ? LIMIT 1'); $user->execute([$for_user_id]);//Из гет параметра подставляем for_user_id $result = $user->fetchall();//Выводим результат, что получилось //проверяем, если данный пользователь, если да выводим инфу о нем if($result){ foreach($result as $all_info){ echo 'Страница '.$all_info['user_login'].'<br>'; if($all_info['user_photo']){ echo '<img src="/uploads/users/full_img/'.$all_info['user_photo'].'" height="150px"><br>'; }else{ echo '<img src="/uploads/users/full_img/no_ava/no_ava.png'. $all_info['user_photo'] .'" height="50px"><br>'; } //указываю ссылку для написания смс берем из таблици users поле user_id //а for_user получается вымышленный у меня но не суть... echo '<a href="?go=send&for_user='.$all_info['user_id'].'">Написать сообщение</a>'; } }else{ echo 'Пользователь не зарегистрирован, или же он удалил страницу'; } }else{ echo 'Пха вон, авторизуйся'; } } ?> Далее если авторизованный пользователь нажал написать смс то кидаем этого пользователя на форму, где надо писать смс: PHP: <div class="content"> //в этой строке я указываю скрипт обработки данной формы <form action="?go=msg&act=send" method="post"> //А вот в эту строку вставляем как раз не известный вымышленный for_user из скрипта user_id.php <input type="hidden" name="for_user_id" placeholder="наберите id пользователя..." value="<?php echo $_GET['for_user']; ?>"/> <textarea name="message" placeholder="наберите текст..." cols="40" rows="2"></textarea><br /> <input type="submit" value="Отправить" /> </form> </div> Ну и дальше, если он не заполнил поля, то показываем ошибку, если заполнил поле для смс то оправляем данные, скрипт не полный, лишь кусочек messages.php PHP: <?php session_start(); include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php'); error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки $act = isset($_GET['act']) ? $_GET['act'] : false; $user_id = $_SESSION['user_id'];//Сессия пользователя switch($act){ //################### Отправка сообщения ###################// case 'send': $error = array();//Вывод ошибок пустой массив //Мы проверяем, если форма была отправлена эти поля берем из формы от куда и отправляем if(isset($_POST['for_user_id']) AND !empty($_POST['for_user_id'])) $for_user_id = intval($_POST['for_user_id']); //Была ли отправлена форма if(isset($_POST['message']) AND !empty($_POST['for_user_id'])){ $message = $_POST['message']; //Мы проверяем все ли поля заполнены if($user_id != $for_user_id AND $for_user_id AND isset($message) AND !empty($message)){ //Проверка на существование получателя $row = $pdo->prepare(' SELECT * FROM `users` WHERE `user_id` = ? AND `user_activation` = 1 LIMIT 1'); $row->execute([$for_user_id]); $result_row = $row->fetch(); //Проверяем получатель существует или нет if($result_row){ //Мы проверяем, если получатель не является фактическим пользователем if($user_id != $for_user_id){ $date = date('Y-m-d H:i:s');//переменая с работой времени написания смс //Отправляем сообщение получателю $send1 = $pdo->prepare(' INSERT INTO `messages` SET `text` = ?, `for_user_id` = ?, `from_user_id` = ?, `date` = ?, `pm_read` = ?, `folder` = ?, `history_user_id` = "'.$user_id.'"'); $send1->execute([$message, $for_user_id, $user_id, $date, 'no', 'inbox']); $result = $send1->fetch(); //получаем последний созданной только записи в таблице users $dbid = $pdo->lastInsertId(); }else{ //В противном случае мы говорим, что пользователь не может отправлять сообщения самому себе $error = 'Вы не можете отправить сообщение самому себе.'; } }else{ //В противном случае мы говорим, что получатель не существует $error = 'Получатель не существует.'; } }else{ //В противном случае мы говорим, что поле пустое $error = 'Поле является пустым. Пожалуйста, заполните поля.'; } } break; default: echo 'в разработке вывод всех отправленных ну или полученных сообщений, а может быть не прочитанных))))'; И что же я не так по вашему мнению делаю, не подскажите мне? Я вообще пишу еще раз, у меня в строке поисковой при таких условиях, которые описаны выше, при отправке видно id пользователя ссылка выходит в строке поисковой примерно такая: http://site/index.php?go=send&for_user=2 Можно как то обойти чтобы id этот не видно было? Но когда я отправляю данные то обращаюсь к скрипту обработчику, после чего в строке поисковой ссылка получается такая: http://site/index.php?go=msg&act=send при этом данные отправлены в базу, и id не отображается, как хотелось бы и при открытии формы, сделать.
Зачем? Если у тебя любой пользователь может посылать сообщения любому пользователю, то тебе по барабану, если кто-то id заменит. Если есть ограничения, проверь их в принимающем скрипте. Так нет устроен, часть данных видна в адресной строке --- Добавлено --- Вот в vk тоже видно: https://vk.com/im?sel=c2412, и ничего, не умирают. --- Добавлено --- PHP: // Начальные данные: в $_SESSION["user_id"] лежит текущий пользователь if (!пользователь_имеет_право_отправлять_сообщения($_SESSION["user_id"], $_GET["for_user_id"])) { die("Пошёл на йух"); } Вот такой подход все нормальные люди используют --- Добавлено --- Потом при получении post-запроса проверка ещё раз делается
@mkramer Да да спасибо, +1 к репутации) Я понял на самой начале эту проверку надо всегда делать? PHP: if (!isset($_SESSION["user_id"], $_GET["for_user_id"])) { die("Пошёл на йух"); }else{ echo 'выполняем код ниже ну который отвечает за отправку.'; Кстати я даже не вижу при отправки письма id пользователей вк, а ты видишь) круто, может я не туда смотрю?