@mkramer Сейчас почитаю, я просто не пойму я не чего перед header не отправляю форма же где сообщение заполняет юзер не считается же? + не могу написать запрос на UPDATE согласен, для того чтобы написать надо потренироваться. Вот например напиши мне задачу для моих таблиц, что то связано с выводом диалогов, сейчас скрипт буду просто писать вывод всех пришедших и отправленных диалогов + последнее сообщение вытаскивать.
Слушай, включай мозги, посмотри свой скрипт. А то я сейчас буду демонстрировать знания разных слов русского языка
@mkramer я переместил в начало скрипта, хотел проверить что же не так, и он меня отредиректил отлично, но не на ту страницу которая указана в location, получается отредактировал на ту страницу где кнопка отправить сообщение ведь это же не выход из ситуации, в начало пихануть header в начала скрипта) header("Location: ?go=all_msg&good=send"); exit; Лучше маты не пиши, да к стати уже почти сплю так, что извини бошку не включу сейчас занята она мыслей даже придумать запрос нету
Какие задания? То, что ты просишь (составление и проверка заданий) люди за деньги делают, у меня на это времени нету. Ты же там пилишь чегой-то, ну вот и пили
@mkramer все понял молчу) буду сейчас пробовать сделать вывод диалогов) Не пойму просто JOIN нужен ли использовать будет в запросе, попробую отпишусь)
@mkramer разобрался как вытащить все диалоги пришедшие и отправленные сообщения PHP: $all_dialogs = $pdo->prepare(' SELECT `ds`.*, ms.* FROM `dialogs` ds JOIN `dialog_user` du ON (ds.`id` = du.`dialog_id`) JOIN `messages` ms ON (ds.`last_message_id` = ms.`id`) WHERE du.`user_id` = "'.$user_id.'"'); $all_dialogs->execute(); $all_dialog_result = $all_dialogs->fetchall();
@mkramer разобрался как вытащить все диалоги, и к этому диалогу вытащить последнее сообщение кто его отправил, делал все в одном запросе. $user_id беру из сессии. PHP: $all_dialogs = $pdo->prepare(' SELECT `ds`.*, ms.* FROM `dialogs` ds JOIN `dialog_user` du ON (ds.`id` = du.`dialog_id`) JOIN `messages` ms ON (ds.`last_message_id` = ms.`id`) WHERE du.`user_id` = "'.$user_id.'"'); $all_dialogs->execute(); $all_dialog_result = $all_dialogs->fetchall(); Как вам такой запрос, а может он где то не правильно сделан)
@mkramer Запрос правильный в принципе? А что использовать если не prepare? $all_dialogs = $pdo->query('query что ли использовать??? ');
Тебе в документации банят что-ли? Посмотри, попробуй. --- Добавлено --- prepare без плейсхолдеров бесполезен, только лишний запрос к БД --- Добавлено --- Видишь - join сам попробовал, почти без подсказки, и получилось
я тут начудил еще больше запрос, вытягиваю еще логин отправителя: PHP: $all_dialogs = $pdo->prepare(' SELECT `ds`.*, ms.*, us.* FROM `dialogs` ds JOIN `dialog_user` du ON (ds.`id` = du.`dialog_id`) JOIN `messages` ms ON (ds.`last_message_id` = ms.`id`) JOIN `users` us ON (ms.`sender_id` = us.`user_id`) WHERE du.`user_id` = "'.$user_id.'"'); $all_dialogs->execute(); $all_dialog_result = $all_dialogs->fetchall(); Вот по скорости объясни что лучше: Сделать 2 запроса: в первом я буду вытягивать весь диалог а во втором вытягивать последнее сообщения и логин пользователя. Либо же использовать запрос который показываю сейчас. Что по скорости будет быстрее, и оптимальней с твоей точки зрения.
По первичным адресам быстро всё ищется, так что тут всё равно. Эти join-ы очень простые, так что никаких проблем с производительностью не будет.
@mkramer понятно спасибо, а вот про prepare я понял, если я не использую плейсхолдеры то толку от prepare ноль, лучше просто query в этом случае использовать?
@mkramer покажи на примере как бы я мог уменьшить код? и что за лишние строчки я использую? в мануале почитал если я не передаю не какие переменные лучше использовать query() она вернет специальный объект типа PDO startament)
Ну раз прочитал, так и делай. Обязательно, чтоб ещё кто-то другой подсказал. Зачем prepare, потом execute, когда можно сразу query ?
@mkramer вы говорили за такой примерно вывод через query: PHP: $user_id = $_SESSION['user_id']; $all_dialogs = $pdo->query(' SELECT `ds`.* FROM `dialogs` ds JOIN `dialog_user` du ON (du.`dialog_id` = ds.`id`) WHERE du.`user_id` = "'.$user_id.'"'); foreach ($all_dialogs as $value) { $last_sender_id = $value['last_sender_id']; $last_message_id = $value['last_message_id']; $pm_read = $value['pm_read']; echo '<hr>'; echo '<span style=color:silver;>sender: </span>'.$last_sender_id.'<br>'; echo '<span style=color:silver;>msg: </span> '.$last_message_id.'<br>'; echo '<span style=color:silver;>read: </span> '.$pm_read.'<br>'; echo '<hr>'; } что код будет не много меньше, как по мне так, в принципе не чего не поменялось за исключением execute выполнить и prepare подготовить исчезло. А разница в чем то? Запрос остался прежним, а что на счет sql-инекций query подвергается им.
prepare без плейсхолдера тоже Защищает не prepare как таковой, а именно плейсхолдеры. Но ты же не будешь в сессию писать инъекцию?
@mkramer я не буду писать, а кто то другой попробует, понял за prepare, и что в этом случае делается? вот ты бы делал бы query?
Я знаю, что у меня лежит в сессии - только то, что я сам туда положил И ещё раз, твой prepare ни от чего не защищает. Хочешь делать prepare - делай плейсхолдеры. Если бы там был плейсхолдер, я бы посчитал, ну ладно, чел хочет перестраховаться, не повредит. Это бы имело смысл. А так - просто смысла не имеет. Всё равно, что мыть руки после туалета в грязной луже, и считать, что этим себя обезопасил от микробов. prepare сам по себе ни от чего не защищает, защищает именно использование плейсхолдеров.
@mkramer да я понял понял))) что этом запросе я не как не смогу использовать плейсхолдеры, так как нужны переменные чтобы подставить потом вместо этих плейсхолдеров в массив... А так как их нету можно воспользоваться query!!! --- Добавлено --- @igordata @gruth название у шоу есть?