используйте if else для проверки наличия значения в столбце таблицы БД

  • Автор темы lxrendar
  • 76
  • Обновлено
  • 12, May 2024
  • #1
Быстрый вопрос: могу ли я использовать php if и else для отображения альтернативного текста, например, если в столбце таблицы db есть имя файла, то отобразить имя файла, но если в столбце таблицы db нет имени файла и оно пусто, тогда ничего не отображать

Является ли следующий код правильным способом сделать это или он должен быть другим?
 SELECT support_tickets.ticket_id, support_tickets.ticket_subject, support_tickets.ticket_message, support_tickets.ticket_status, DATE_FORMAT(support_tickets.created_at,'%d/%m/%Y \at\ %H:%i:%s') AS created_at, DATE_FORMAT(support_tickets.ticket_timestamp,'%d/%m/%Y %H:%i:%s') AS ticket_timestamp, support_ticket_files.file_name, support_tickets.user_name

FROM

support_tickets LEFT JOIN support_ticket_files

ON support_tickets.ticket_id=support_ticket_files.ticket_id

WHERE

support_tickets.ticket_id = ".$_GET['ticket_id']." AND

support_tickets.user_name = '".$_SESSION["user_name"]."'
PHP: Только что обнаружил проблему с моим запросом.

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

Я думаю, это потому, что мой запрос связывает Ticket_id в support_tickets с Ticket_id в support_tickets_files, поэтому он выполняет свою работу и отображает имя файла, но ему нужно, чтобы отображалось имя файла только для этого конкретного сообщения, если это имеет смысл

Ниже приведен запрос, который у меня есть

 <?php if (!empty($row->file_name)) echo "<br><br>"; echo html_entity_decode($row->file_name) ?>
PHP: Извините, я думал, что выиграл с этой проблемой.

lxrendar


Рег
21 Mar, 2015

Тем
1

Постов
2

Баллов
12
  • 18, May 2024
  • #2
Это займет у меня много времени, я думаю, что я действительно запутался в том, что мне нужно с этим делать сейчас, и это нехорошо, когда код небезопасен и я не могу обработать часть подготовленного кода оператора, я пробовал, но сообщение билета не показывалось, и я не совсем понял, как это сделать, используя подготовленные операторы.
 

GoodHacker


Рег
15 Dec, 2014

Тем
0

Постов
2

Баллов
2
  • 18, May 2024
  • #3
У вас есть гораздо более серьезная проблема: уязвимость к атакам SQL-инъекций, возникающая из-за простого подключения предоставленных пользователем данных ( $_GET['ticket_id'] ) в запрос без использования подготовленных операторов или каких-либо попыток очистить значение. НИКОГДА доверяйте любым данным, предоставленным пользователем, независимо от того, насколько вы доверяете пользователю !!!!!
 

kiriman90


Рег
27 Aug, 2014

Тем
0

Постов
2

Баллов
2
  • 22, May 2024
  • #4
@SpacePhoenix, будет ли следующий код лучше?
 $username = $_SESSION['user_name'];

$ticket_id =$_GET['ticket_id'];



SELECT support_tickets.ticket_id, support_tickets.ticket_subject, support_tickets.ticket_message, support_tickets.ticket_status, DATE_FORMAT(support_tickets.created_at,'%d/%m/%Y \at\ %H:%i:%s') AS created_at, DATE_FORMAT(support_tickets.ticket_timestamp,'%d/%m/%Y %H:%i:%s') AS ticket_timestamp, support_ticket_files.file_name, support_tickets.user_name

FROM

support_tickets LEFT JOIN support_ticket_files

ON support_tickets.ticket_id=support_ticket_files.ticket_id

WHERE

support_tickets.ticket_id = ? AND

support_tickets.user_name = ?

$stmt->bind_param("is", $ticket_id, $username);

$stmt->execute();

$result = $stmt->get_result();

if($result->num_rows === 0) exit('No rows');

$row = $result->fetch_assoc();
PHP:
 

web-master


Рег
13 Oct, 2011

Тем
0

Постов
1

Баллов
1
  • 22, May 2024
  • #5
@Иэн Хейни использует https://www.php.net/manual/en/function.filter-input.php

для очистки ваших данных с $ticket_id вы можете полениться и, по крайней мере, поставить вокруг него интервал, но сделать это правильно. если вам нужен if в вашем коде, вы можете использовать оператор case.

Вот код, над которым я сейчас работаю
  $relevance[] = "(CASE WHEN REPLACE(Individuals.phone,' ','') = '{$testphone}' OR CONCAT(Individuals.phonesuffix, REPLACE(Individuals.phone,' ','')) = '{$testphone}' THEN 1 ELSE 0 END)";

$relevance[] = "(CASE WHEN REPLACE(Individuals.mobile,' ','') = '{$testphone}' OR CONCAT(Individuals.mobilesuffix, REPLACE(Individuals.mobile,' ','')) = '{$testphone}' THEN 1 ELSE 0 END)";

Код (разметка):
 

kashtanov


Рег
07 Feb, 2014

Тем
1

Постов
7

Баллов
17
  • 12, Jun 2024
  • #6
Извините, это сейчас выходит у меня из головы Я сделал следующее
 $username = $_SESSION['user_name'];
$ticket_id = filter_input(INPUT_GET, 'ticket_id', FILTER_SANITIZE_STRING);
PHP: Я думаю, мне придется нанять кого-нибудь, чтобы сделать это за меня, чтобы обеспечить безопасность и правильную работу, поскольку я не могу этого сделать.
 

some888


Рег
11 May, 2015

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно