Соедините две разные таблицы и отредактируйте php

Я не могу решить эту проблему. В базе данных 2 разных таблицы, 1 ТАБЛИЦА называется ПОЛЬЗОВАТЕЛИ, вторая - БИЛЕТЫ. Когда пользователь зарегистрирован, эта информация сохраняется в таблице USERS, только зарегистрированные пользователи могут открывать заявку в службу поддержки. Когда пользователь открывает билет, эта информация сохраняется в таблице TICKETS. Теперь проблема в том, что когда какой-то случайный пользователь хочет увидеть статус билетов, они отображают все билеты, хранящиеся в таблице TICKET, и это то, чего мы не хотим, мы хотим отображать только статус билета от того пользователя, который вошел в систему. Пример кода ниже:

На странице ticket-status.php код для данных предварительного просмотра:

<?php
include('connection.php');
$result = $db->prepare("SELECT * FROM tickets JOIN users WHERE users.email=tickets.email");
$result->execute();
for($i=0; $row = $result->fetch(); $i++){
?>
<tr>
<th scope = "row"><?php echo $row['ticket_id'] ?></th>
  <td><?php echo $row['item_selected'] ?></td>
 <td><?php echo $row['help_selected'] ?></td>
  <td><?php echo $row['message'] ?></td>
<td><?php echo $row['status'] ?></td>
</tr>
<?php
}
?>

Вот как выглядят базы данных пользователей:

ID - FIRST NAME - LAST NAME - EMAIL - PASSWORD - PHONE - CREATED - MODIFIED
1     Greg         McFe       [email protected]   123       123     date      date
2     Roy          McDs       [email protected]   133       222     date      date
3     Tina         MCda       [email protected]   333       111     date      date

База данных по билетам:

TICKET_ID - ITEM_SELECTED - HELP_SELECTED - EMAIL - PHONE - MESSAGE - STATUS
   1             theme2         problem     [email protected]   123    msg1      open
   2             theme12        errors      [email protected]   222    msg12     open
   3             theme8         solution    [email protected]   333    msg9      closed

Что мне нужно. На странице ticket-status.php, когда случайный пользователь вошел в систему и перешел, чтобы увидеть статус своего билета, отобразите его открытый билет. Пример:

TICKET ID - ITEM SELECTED - HELP SELECTED - MESSAGE - STATUS
   2        theme12          errors       msg12       open

Вы пробовали еще и телефон проверить? Возможно, что несколько пользователей могут использовать один и тот же адрес электронной почты.

wizzwizz4 20.08.2018 09:54

Вы упускаете пункт where SELECT * FROM tickets JOIN users WHERE users.email=tickets.email where user.email='<users mail address>'. Кстати, вы должны хранить идентификатор пользователя в тикете, а не в электронном письме

Jens 20.08.2018 09:55

@ wizzwizz4 Также номер телефона может использоваться многими людьми

Jens 20.08.2018 09:56

@Jens ?? 2 пункта WHERE, я думаю, вы имеете в виду AND

RiggsFolly 20.08.2018 09:59

У меня отображается вся таблица или я ничего не получаю. Не могли бы вы объяснить мне больше об этом идентификаторе пользователя хранилища в таблице билетов. @Jens

mcstudent 20.08.2018 09:59

@mcstudent запись в таблице однозначно идентифицируется по is id, поэтому вы можете использовать ее для ссылки на эту запись в других таблицах.

Jens 20.08.2018 10:02

Можете ли вы написать пример и попробовать этот код? @Jens

mcstudent 20.08.2018 10:03

@mcstudent это не код, это дизайн БД

Jens 20.08.2018 10:04

«Когда пользователь открывает билет, эта информация сохраняется в таблице TICKETS» - вы решили сохранить адрес электронной почты пользователя в таблице билетов, и это нормально, если столбец адреса электронной почты объявлен как уникальный. Таким образом, вы будете выбирать билеты на основе адреса электронной почты. Другой альтернативой является сохранение идентификатора пользовательской таблицы пользователя, как предложил Йенс.

hans-könig 20.08.2018 10:10

Как сохранить user_id в таблице билетов, чтобы попробовать эту опцию? @RiggsFolly

mcstudent 20.08.2018 10:16

Вы только что сказали @RiggsFolly, что у вас есть логин. Итак, когда пользователь вошел в систему, вам просто нужно получить идентификатор таблицы user users и сохранить его в переменной сеанса. После этого вы сможете вставить в таблицу билетов или использовать ее для других целей. Мне нравится улучшать мой последний пункт - если пользователь может купить более одного билета, тогда только столбец адресов электронной почты в таблице пользователей должен быть уникальным. Билетов не должно.

hans-könig 20.08.2018 10:24

Итак, в таблице билетов просто должны быть user_id, item_selected, help_selected, message и status? @ hans-afrik

mcstudent 20.08.2018 10:28

@RiggsFolly да ты прав

Jens 20.08.2018 10:35

Как вставить идентификатор пользователя в статус тикетов из авторизованного сеанса? @RiggsFolly

mcstudent 20.08.2018 11:11

Вы сохраняете что-нибудь в сеансе, чтобы однозначно идентифицировать текущего пользователя, вошедшего в систему?

RiggsFolly 20.08.2018 11:12

Создаю рабочий код. Спасибо, я работаю 20 часов без остановки, мой мозг немного замедлился. @RiggsFolly

mcstudent 20.08.2018 11:13

«Хорошо, так что в таблице билетов просто должен быть user_id ....» - это вариант. Для этого нужно просто изменить столбец электронной почты на user_id. 20 часов работы без остановки - это нехорошо. Вам всегда нужно делать перерывы. Иногда решение приходит, когда у вас перерыв.

hans-könig 20.08.2018 13:29

Посмотрите, я создал базу билетов из скрача, и база выглядит как этот ID--ITEM_SELECTED--HELP_SELECTED--MESSAGE--STATUS, и когда пользователь (я) входит в систему и открывает билет, я генерирую для хранения идентификатора пользователя из сеанса входа. Но я не могу отображать только тикет от авторизованного пользователя, я отображаю всех зарегистрированных пользователей, открывших тикеты. Как отобразить только пользователя по id. Если вы хотите, я могу вставить код в ответ, чтобы посмотреть, как он будет выглядеть.

mcstudent 20.08.2018 13:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
18
76
2

Ответы 2

Вам нужно ограничить результаты только зарегистрированным пользователем, добавив это в свой пункт WHERE.

Я не вижу из вашего кода, что вы знаете, что такое EMAIL вошедшего в систему пользователя, но я предполагаю, что вы должны это как-то знать

SELECT * 
FROM tickets 
    JOIN users ON users.EMAIL = tickets.EMAIL
WHERE user.EMAIL = <the logged in users EMAIL>

It would have been a better idea to have put the ID of the users into the Tickets table, rather than the EMAIL for many reasons. Not least of which is that people change their EMAIL, and if they do you woudl only have had to amend the users table and all would have continued working. As it is now, you would need to modify all their Tickets as well.

Вы пробовали этот код? А у вас это сработало? Как указать адрес электронной почты вошедшего в систему пользователя, если у вас 100 пользователей со случайными адресами электронной почты?

mcstudent 20.08.2018 10:05

Где вы храните информацию о вошедшем в систему пользователе?

RiggsFolly 20.08.2018 10:07

Можете ли вы написать рабочий код, потому что я пробовал все возможные решения и не работал. Если мне нужно отредактировать мою таблицу sql, я отредактирую, просто скажите мне, где проблема и какое решение устранит эту проблему. Спасибо

mcstudent 20.08.2018 10:07

Информация о зарегистрированных пользователях находится в таблице пользователей, информация о тикете - в таблице тикетов

mcstudent 20.08.2018 10:08

Да, но когда пользователь входит в систему, как вы запомните, какой пользователь вошел в систему, пока они вошли в систему

RiggsFolly 20.08.2018 10:09

я не понимаю что ты имеешь в виду

mcstudent 20.08.2018 10:14

Если вы не можете получить код, чтобы запомнить, кто вошел в систему, используя что-то вроде SESSION, тогда нет способа ограничить запрос только зарегистрированным пользователем

RiggsFolly 20.08.2018 10:16

Я не думаю, что мы понимаем друг друга, не могли бы вы отправить мне личное сообщение, чтобы отправить вам весь код. Думаю, ты увидишь, в чем проблема.

mcstudent 20.08.2018 10:19

Я не знаю, как отправлять личные сообщения.

RiggsFolly 20.08.2018 10:20

Пожалуйста, не обижайтесь, но из этого и других ваших вопросов мне кажется, что вы начали этот проект, не имея необходимых базовых знаний и инструментов. Могу я предложить вам получить книгу по разработке PHP для начинающих или найти в сети несколько базовых руководств по разработке PHP. SO на самом деле не должен быть учебным сайтом для начинающих

RiggsFolly 20.08.2018 10:24

Вы забыли ограничить его билетами этого конкретного пользователя:

$result = $db->prepare("SELECT * FROM tickets JOIN users WHERE users.email=tickets.email AND users.phone=tickets.phone AND users.id=?");
$result->bind_param('i', $id);
$result->execute();

Вам нужно установить переменную $id.

wizzwizz4 20.08.2018 10:23

Думаю, это одна из проблем ОП. OP не сохранил информацию о зарегистрированных пользователях нигде, когда пользователь входит в систему, например, сеанс, поэтому не имеет возможности узнать, кто вошел в систему, и, следовательно, нет способа добавить значение в привязку

RiggsFolly 20.08.2018 10:39

Другие вопросы по теме