Так народ, я попал в неловкую ситуацию, при обращении к GET параметру, при отправке письма я отправляю письмо в неизвестное куда, а то-есть от 1 кому 0 но такого юзера с таким id не будет конечно, что делать?
перед отправкой проверить есть ли такой id, потому что нельзя как минимум доверять тем данным которые приходят от пользователя. всё перепроверяй
@_ne_scaju_ если у тебя стоит задача сделать запись и там например id нужно вписать который существует, и ты этот id получаешь от пользователя, то лучше сделать запрос и посмотреть если такой id есть, только после этого уже создавать запись где будет этот id использоваться как внешний ключ например
@denis01 Я понимаю тебя короче делаю так, исправьте меня. PHP: $act = $_GET['act']; $user_id = $_SESSION['user_id']; $message = htmlspecialchars($_POST['message']); $for_user_id=(int)$_POST['for_user_id']; //Проверка на существование получателя $row = $pdo->prepare('SELECT `user_id` FROM `users` WHERE user_id = ? LIMIT 1'); $row->execute([$for_user_id]); $res = $row->fetch(); if($res){ //Отправляем сообщение получателю $send1 = $pdo->prepare('INSERT INTO `messages` (`text`, `for_user_id`, `from_user_id`) VALUES (?,?,?)'); $send1->execute([$message, $for_user_id, $user_id]); $error=$send1->errorInfo(); if($error[0]==0){ echo 'Сообщение успешно отправлено юзеру<br>'; }else{ echo 'Ошибка отправки сообщения'; } }else{ echo 'пользователя такого нет'; } } Но почему то отправляю от одного но не записывает второму пользователю(
вроде нормально, но там где пользователя выбираешь из базы, можно тянуть в select только user_id, поставить limit 1, ещё вместо fetch это всё к пользователю относиться, можно проверять если есть один результат --- Добавлено --- у тебя один insert, почему должен второму пользователю что-то записывать?
@denis01 Исправил посмотри выше ты за такой запрос говорил? Сейчас я для начала добиваюсь чтобы запись была такая: Для одного пользователя, а потом для 2их пользователей добавлю message(text, 1, 2) А у меня получается что запись получается такая: message(text, 1, 0) Что ж я не так делаю?
Разобрался все же, ошибка была с методами GET и POST ошибался( вот это я даю( В ссылках не то указывал просто)
@mahmuzar бро, а зачем у тебя в таблице correspondense индекс дважды на столбце from_id ? Чтобы наверняка ?
@Abyss, дубликат, бро, друбликат. Я видимо по запарке его продублировал)). Заметил его только после того как выложил, лень взяла вврех и оставил как есть.
@TeslaFeo @mahmuzar Ситуация такая вот есть форма, с указанным методом POST: PHP: <form action="?go=messages" method="POST"> Текст сообщения: <br /><textarea name="msg" autofocus=""></textarea><br /> <input type="submit" value="Отправить"> </form><br> и обработчик этой формы называется messages.php А на странице пользователя я указываю что то типа: PHP: echo '<a href="?go=messages&act=send&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>'; Но это мне не подходит так как данные видно при отправке в адресной строке. Как же заменить можно на кнопку, чтобы он правильно обращался к скрипту, именно чтобы можно одному юзеру писать, я так и не понял(
Ну можно подрубить какой-нибудь AJAX, но вообще оно и должно быть видно в адресной строке. Что в этом плохого?
@denis01 Я же и прошу, помочь, как мне ссылку можно правильно указать методом POST это должна быть кнопка? или же ссылка? Ситуация такова, заходишь ко всем пользователям, ты ему можешь, написать и добавить в друзья, то-есть нужно ссылку сделать или же кнопку? У меня ссылка получается, но когда перехожу по ссылке, получается, что сообщение отправлено, и не успел еще даже не чего написать. А вот как же поступить только с кнопкой. Ну помогите пожалуйста.
И как ты думаешь, почему? Совсем не потому, что у тебя get. Начни уже думать... У тебя видимо код обработки и код рисующий форму в одном файле, при этом ты не проверяешь нормально, пришли ли данные. PHP: if ($_SERVER["REQUEST_METHOD"] === "POST") { // Отправить сообщение // Отредиректить юзверя куда надо } else { // Вывести ему красивую формочку } Чтоб был post-запрос, нужна не ссылка/кнопка или что-то ещё, а нужна форма или JavaScript, скрыто создающий форму --- Добавлено --- P.S. "ничего" - это одно слово, так, к сведению. Жутко раздражает, что в интернете постоянно пишут "не чего"...
@mkramer Именно так, у меня форма и обработчик, находятся в одном файле. Я понял, будем пробовать сделать. Правда я не работал с javascript но нужно пробовать. Посмотрел примеры, и не понял, что мне в он клин надо указать, функцию, а если ее нету, что указывать? PHP: echo '<input type="Button" value="написать сообщение" onclick="ЧТО тут(И тут надо писать?);">'; Пробовал вот так: PHP: echo '<input type="Button" value="написать сообщение" onclick="?go=messages;">'; echo '<a href="?go=messages&act&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>'; Вместо 2 строки первую подставить но не получилось.
Когда я за других пишу код, мне деньги платят. Я же тебе написал в чём проблема, почему у тебя сообщения отправляются при клике по ссылке. То, что ты там пробовал - вообще смысла не имеет.
@denis01 Все нет сил на пальцах показывать скину 2 файла, что и как делаю! Посмотрите пожалуйста, кому не в лень. И подскажите как мне можно использовать этот пост метод. Хочу из скрипта userInfo.php перекинуть на скрипт messages.php используя кнопку, при этом. --- Добавлено --- @mkramer А ситуация такова, в адресной строке можно просто указать любой id пользователя и написать ему сообщения, это же не правильно и это метод GET а при методе POST такого нельзя будет сделать.
Вот код остаточный но мне все время выводит no_user почему так? Скрипт, где я перекидываю пользователя, на форму для написания смс: PHP: <?php session_start();//Подключаю сессию //Подключаю БД и разные функции include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php'); error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки //Проверяем если в сессии есть id if(isset($_SESSION['user_id'])){ $user_id = $_SESSION['user_id'];//Экранирую данные сессии в данном случае для сессии //Создаем гет параметр к нему мы будем обращатся. $id = intval($_GET['u_info']); //Получаем полную информацию о пользователе к которому заходим на страницу $user = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ?'); $user->execute([$id]);//Из гет параметра подставляем id, для индетификации пользователя $result = $user->fetchAll();//Выводим результат, что получилось if($result){ foreach($result as $all_info){ echo '<div id="infouser">Вы зашли на страницу<div id="log">'.$all_info['user_login'].'</div> <img src="'.$all_info['user_photo'] .'" height="150px"></div>'; //////////////////////////////////////////////////это написал //Создаем кнопку для отправки сообщения echo ' <form action="?go=f_messages" method="POST" > <input type="submit" value="Отправить" /> </form>'; //////////////////////////////////////////////////вместо этого //echo '<a href="?go=messages&act&for_user_id='.$all_info['user_id'].'">Написать сообщение</a>'; echo '<a href="?go=friends&act=send_demand&for_user_id='.$all_info['user_id'].'">Добавить в друзья</a>'; } } }else{ echo 'Пха вон'; } ?> Вот куда я перекидываю пользователя при нажатии на кнопку отправить PHP: <form action="?go=messages" method="POST" enctype="multipart/form-data"> Текст сообщения: <br /><textarea name="message"></textarea><br /> <input type="submit" value="Отправить" /> </form><br> И дальше уже с этой формы я стараюсь написать сообщения пользователю, и отправить его на скрипт обработчик: PHP: [php]<?php session_start(); include($_SERVER['DOCUMENT_ROOT'].'/system/inc/inc.php'); $act = $_GET['act']; $user_id = $_SESSION['user_id']; if($_SERVER["REQUEST_METHOD"] === "POST"){ $message = htmlspecialchars($_POST['message']); $for_user_id = intval($_POST['for_user_id']);//получатель if(isset($message) AND !empty($message)){ //Проверка на существование получателя $row = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ? LIMIT 1'); $row->execute([$for_user_id]); $res = $row->fetchAll(); if($res){ foreach($res as $all_info){ echo $all_info['user_login'].'<br>'; } //Отправляем сообщение получателю $send1 = $pdo->prepare(' INSERT INTO `messages` (`text`, `for_user_id`, `from_user_id`) VALUES (?,?,?)'); $send1->execute([$message, $for_user_id, $user_id]); }else{ echo 'no_user '; } }else{ echo 'no_sms '; } } else { //Вывести ему красивую формочку echo ' <form action="?go=messages" method="POST"> Текст сообщения: <br/><textarea name="message" autofocus=""></textarea><br/> <input type="submit" value="Отправить"> </form><br>'; } var_dump($res); ?> Но у меня все время пишет no_user Помогите пожалуйста у меня пишет все время no_user Как же правильно при отправке письма указывать путь к скрипту, или что я не так делаю, объясните пожалуйста.
Получается я отправляю в пустой id, когда убираю проверку на существования пользователя PHP: //Проверка на существование получателя $row = $pdo->prepare('SELECT * FROM `users` WHERE `user_id` = ? LIMIT 1'); $row->execute([$for_user_id]); $res = $row->fetchAll(); if($res){ foreach($res as $all_info){ echo $all_info['user_login'].'<br>'; } А когда опять этот запрос на проверку пользователя пишу, то мне пишет no_user Ну помогите пожалуйста, я учусь но справится сейчас не могу... Посмотрите на скриншот, от кого записывается id = 4 а кому id=0 но такого пользователя нет сто пудово.
Можно, только чуть сложнее (совсем чуть-чуть). Это решается тем, что при обработке запроса, ты просто проверяешь, авторизован (имеет ли право) ли текущий пользователь отправлять сообщение --- Добавлено --- Как пример (что у тебя за база, не знаю). Есть таблица friends с полями friend1, friend2. PHP: //... $currentUserId = $_SESSION["user_id"]; $toUserId = $_GET["user_id"]; $smt = $db->prepare("select count(1) as c from friends where friend1=? and friend2=?") $smt->bind_param("ii", $currentUserId, $toUserId); $res = $smt->execute(); if ($res->fetch_assoc()["c"] == 0) { die("Пошёл на ... "); } // Отправляем сообщение или выводим форму С постом вместо ссылки ты только себя запутаешь, что за пост пришёл - на показ формы, на отправку сообщения. И потом, будет проблема с выскакиванием дурацких окошек при попытке обновить страницу отправки - оно тебе надо?