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

lxrendar

Пользователь
Регистрация
21.03.15
Сообщения
2
Реакции
0
Баллы
1
Быстрый вопрос: могу ли я использовать php if и else для отображения альтернативного текста, например, если в столбце таблицы db есть имя файла, то отобразить имя файла, но если в столбце таблицы db нет имени файла и оно пусто, тогда ничего не отображать
используйте if else для проверки наличия значения в столбце таблицы БД
Является ли следующий код правильным способом сделать это или он должен быть другим?



Код:
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: Извините, я думал, что выиграл с этой проблемой.
 

GoodHacker

Пользователь
Регистрация
15.12.14
Сообщения
2
Реакции
0
Баллы
1
Это займет у меня много времени, я думаю, что я действительно запутался в том, что мне нужно с этим делать сейчас, и это нехорошо, когда код небезопасен и я не могу обработать часть подготовленного кода оператора, я пробовал, но сообщение билета не показывалось, и я не совсем понял, как это сделать, используя подготовленные операторы.
 

kiriman90

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

web-master

Пользователь
Регистрация
13.10.11
Сообщения
1
Реакции
0
Баллы
1
@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:
 

kashtanov

Пользователь
Регистрация
07.02.14
Сообщения
7
Реакции
0
Баллы
1
Адрес
москва
@Иэн Хейни использует 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)";
Код (разметка):
 

some888

Пользователь
Регистрация
11.05.15
Сообщения
2
Реакции
0
Баллы
1
Извините, это сейчас выходит у меня из головы

Я сделал следующее

Код:
$username = $_SESSION['user_name'];
$ticket_id = filter_input(INPUT_GET, 'ticket_id', FILTER_SANITIZE_STRING);
PHP: Я думаю, мне придется нанять кого-нибудь, чтобы сделать это за меня, чтобы обеспечить безопасность и правильную работу, поскольку я не могу этого сделать.
 
Сверху Снизу