@mkramer Так для начало, уже лучше сделать гет? а как же быть с полем messages куда пользователь пишет сообщение? Поле я в коде объявляю POST его что тоже на GET изменить. Натолкните на нужную идею, спасибо. А что в коде мне можно подправить?
Ты раздели. По Get - выводить форму, по post - отправлять форму. В своём коде разбирайся сам. А то из твоих предыдущих сообщений следует, что ты форму для заполнения сообщения хочешь выводить по post - это нафиг никому не надо. Кода я тебе достаточно привёл.
@mkramer Сейчас буду делать, спасибо. --- Добавлено --- @mkramer Подставил свои значения, теперь мне все время пишет пошел на... PHP: $user_id = $_SESSION['user_id']; $for_user_id = !empty($_GET['for_user_id']) ? $_GET['for_user_id'] : 0; if(isset($message) AND !empty($message)){ $smt = $pdo->prepare("SELECT COUNT(1) AS c FROM `users` WHERE user_id=? AND user_id=?"); $smt->execute([$user_id, $for_user_id]); $res = $smt->fetch(); if ($res["c"] == 0) { die("Пошёл на ... "); } }else{ echo 'пишем смс'; }
Я предлагаю немного подумать: вот к примеру, ты хочешь найти запись, где user_id=1 и одновременно user_id=2. Как ты себе это представляешь?
Есть разница? Мой запрос, если что, предполагает, что сообщения можно отправлять только друзьям... Твой запрос предполагает, что сообщение можно отправлять только тем пользователям, у которых одновременно два разных ID, т.е. вообще никому ))
@romach @mkramer Мне бы пока что нужно, отправить от одного пользователя, другому, с друзьями сайта, это уже другой подход ваш...
Ну так поменяй запрос соответственно... Т.е. тебе просто надо проверить, что оба пользователя существуют в базе. И выложи весь файл, чую, там лютая бредятина....
@mkramer файл выложить который отвечает за отправку? Если да, я его уже несколько раз скинул. Вот на странице друзей делаю так: PHP: $check = $pdo->prepare('SELECT `for_user_id` FROM `friends_demands` WHERE `for_user_id` = ? AND `from_user_id` = ?'); $check->execute([$get_user_id, $user_id]); $result = $check->fetch(); if ($result){ die("Пошёл на ... "); }else{ $smt = $pdo->prepare("SELECT * FROM `users` WHERE user_id= ?"); $smt->execute([$for_user_id]); $res = $smt->fetch(); if($res){ echo 'что то не так'; }else{ echo 'все хорошо показываю ссылку.'; echo '<a href="?go=f_messages&act&for_user_id='.$row['friend_id'].'">Написать сообщение</a>'; } } Ну это получается если в друзьях есть юзер тогда только видна будет ссылка. А как же сделать проверочку, если он тебе не друг, но ты ему хочешь написать сообщение?
Надо проверить ещё раз, поскольку то, что ссылка не видна, не значит, что нельзя написать сообщение Если у тебя не предполагается возможность ограничения сообщений, просто убедится, что адресат есть в базе )) --- Добавлено --- Программист - это тот, кто думает, а не тот, кто кодит
@romach @mkramer Вот когда начинаю тестировать скрипт, у меня получается вот такая фигня, если я принудительно указываю id пользователя, то от этого юзера отправляется этому пользователю сообщение, делаю так: PHP: $act = $_GET['act']; $user_id = $_SESSION['user_id']; $message = htmlspecialchars($_POST['message']); $for_user_id = intval($_POST['for_user_id']);//получатель if(isset($message) AND !empty($message)){ //Отправляем сообщение получателю $send1 = $pdo->prepare(' INSERT INTO `messages` (`text`, `for_user_id`, `from_user_id`) VALUES (?,3,?)'); $send1->execute([$message, $user_id]); $error=$send1->errorInfo(); if($error[0]==0){ echo 'Сообщение успешно отправлено юзеру<br>'; }else{ echo 'Ошибка отправки сообщения'; } }else{ echo 'Введите сообщение'; } А вот если я хочу подставить пришедший id из гет параметра то запись для него не проходит, делаю так: PHP: $act = $_GET['act']; $user_id = $_SESSION['user_id']; $message = htmlspecialchars($_POST['message']); $for_user_id = intval($_POST['for_user_id']);//получатель if(isset($message) AND !empty($message)){ //Отправляем сообщение получателю $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 'Введите сообщение'; } Ну и что я по вашему не так делаю, я же думаю как не как.
@mkramer Объясни отлаживать var_damp что ли использовать или print_r? вот что выдает var_damp Сообщение успешно отправлено юзеру array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
Да, по всем точкам скрипта - на входе, до запроса, после запроса и т.п. Я, пока xdebug не научился, ещё ставил не просто var_dump, а die, чтоб у меня дальше определённой точки скрипт не выполнялся. Правда, для этого надо иметь представление, что должно быть в переменных, и сравнивать с тем, что в реале.
PHP: // Куча кода, которая вроде работает die(var_export($variable, 1) . " точка A"); // Куча кода, который ещё не отладили Потом постепенно комментируешь такие строки, чтоб позволить коду выполняться дальше. --- Добавлено --- Или настраиваешь в NetBeans или phpStorm xdebug, и радуешься, что можешь трассировать, как белый человек
@mahmuzar Установил ide второе, но теперь когда хочу прогружать страницы сайта, нот фоунд вылетает, и в браузерную строку фигня записывается какая та. Как с этим бороться? Вроде что-то разобрался но не факт.
И что ты установил? IDE - это, в случае PHP, Netbeans, phpStorm, Zend Studio. Интегрированная среда разработки. А мне сдаётся, ты ещё один серверный пакет установил...
@mkramer Я установил OpenServer очень давно, теперь сейчас поставил phpStorm сделал соединения между ними, чтобы работать можно было, ну и все. Теперь надо отлаживать код, а как? А толку что я его установил, вот что при отправке выходит, скриншот скинул. Я не пойму что приходит из другого скрипта, в скрипт отправки сообщения.
Ну ОК. Не знаю, что надо было сделать, чтоб от установки phpStorm отваливались локальные сайты... https://habrahabr.ru/post/250323/ --- Добавлено --- Я, правда, пользовал доку от phpStorm, но сейчас переводчиком работать лень