Я не могу решить эту проблему. В базе данных 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
Вы упускаете пункт where SELECT * FROM tickets JOIN users WHERE users.email=tickets.email where user.email='<users mail address>'. Кстати, вы должны хранить идентификатор пользователя в тикете, а не в электронном письме
@ wizzwizz4 Также номер телефона может использоваться многими людьми
@Jens ?? 2 пункта WHERE, я думаю, вы имеете в виду AND
У меня отображается вся таблица или я ничего не получаю. Не могли бы вы объяснить мне больше об этом идентификаторе пользователя хранилища в таблице билетов. @Jens
@mcstudent запись в таблице однозначно идентифицируется по is id, поэтому вы можете использовать ее для ссылки на эту запись в других таблицах.
Можете ли вы написать пример и попробовать этот код? @Jens
@mcstudent это не код, это дизайн БД
«Когда пользователь открывает билет, эта информация сохраняется в таблице TICKETS» - вы решили сохранить адрес электронной почты пользователя в таблице билетов, и это нормально, если столбец адреса электронной почты объявлен как уникальный. Таким образом, вы будете выбирать билеты на основе адреса электронной почты. Другой альтернативой является сохранение идентификатора пользовательской таблицы пользователя, как предложил Йенс.
Как сохранить user_id в таблице билетов, чтобы попробовать эту опцию? @RiggsFolly
Вы только что сказали @RiggsFolly, что у вас есть логин. Итак, когда пользователь вошел в систему, вам просто нужно получить идентификатор таблицы user users и сохранить его в переменной сеанса. После этого вы сможете вставить в таблицу билетов или использовать ее для других целей. Мне нравится улучшать мой последний пункт - если пользователь может купить более одного билета, тогда только столбец адресов электронной почты в таблице пользователей должен быть уникальным. Билетов не должно.
Итак, в таблице билетов просто должны быть user_id, item_selected, help_selected, message и status? @ hans-afrik
@RiggsFolly да ты прав
Как вставить идентификатор пользователя в статус тикетов из авторизованного сеанса? @RiggsFolly
Вы сохраняете что-нибудь в сеансе, чтобы однозначно идентифицировать текущего пользователя, вошедшего в систему?
Создаю рабочий код. Спасибо, я работаю 20 часов без остановки, мой мозг немного замедлился. @RiggsFolly
«Хорошо, так что в таблице билетов просто должен быть user_id ....» - это вариант. Для этого нужно просто изменить столбец электронной почты на user_id. 20 часов работы без остановки - это нехорошо. Вам всегда нужно делать перерывы. Иногда решение приходит, когда у вас перерыв.
Посмотрите, я создал базу билетов из скрача, и база выглядит как этот ID--ITEM_SELECTED--HELP_SELECTED--MESSAGE--STATUS, и когда пользователь (я) входит в систему и открывает билет, я генерирую для хранения идентификатора пользователя из сеанса входа. Но я не могу отображать только тикет от авторизованного пользователя, я отображаю всех зарегистрированных пользователей, открывших тикеты. Как отобразить только пользователя по id. Если вы хотите, я могу вставить код в ответ, чтобы посмотреть, как он будет выглядеть.






Вам нужно ограничить результаты только зарегистрированным пользователем, добавив это в свой пункт 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
IDof the users into theTicketstable, rather than theuserstable and all would have continued working. As it is now, you would need to modify all theirTicketsas well.
Вы пробовали этот код? А у вас это сработало? Как указать адрес электронной почты вошедшего в систему пользователя, если у вас 100 пользователей со случайными адресами электронной почты?
Где вы храните информацию о вошедшем в систему пользователе?
Можете ли вы написать рабочий код, потому что я пробовал все возможные решения и не работал. Если мне нужно отредактировать мою таблицу sql, я отредактирую, просто скажите мне, где проблема и какое решение устранит эту проблему. Спасибо
Информация о зарегистрированных пользователях находится в таблице пользователей, информация о тикете - в таблице тикетов
Да, но когда пользователь входит в систему, как вы запомните, какой пользователь вошел в систему, пока они вошли в систему
я не понимаю что ты имеешь в виду
Если вы не можете получить код, чтобы запомнить, кто вошел в систему, используя что-то вроде SESSION, тогда нет способа ограничить запрос только зарегистрированным пользователем
Я не думаю, что мы понимаем друг друга, не могли бы вы отправить мне личное сообщение, чтобы отправить вам весь код. Думаю, ты увидишь, в чем проблема.
Я не знаю, как отправлять личные сообщения.
Пожалуйста, не обижайтесь, но из этого и других ваших вопросов мне кажется, что вы начали этот проект, не имея необходимых базовых знаний и инструментов. Могу я предложить вам получить книгу по разработке PHP для начинающих или найти в сети несколько базовых руководств по разработке PHP. SO на самом деле не должен быть учебным сайтом для начинающих
Вы забыли ограничить его билетами этого конкретного пользователя:
$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.
Думаю, это одна из проблем ОП. OP не сохранил информацию о зарегистрированных пользователях нигде, когда пользователь входит в систему, например, сеанс, поэтому не имеет возможности узнать, кто вошел в систему, и, следовательно, нет способа добавить значение в привязку
Вы пробовали еще и телефон проверить? Возможно, что несколько пользователей могут использовать один и тот же адрес электронной почты.