У меня такое ощущение, что я веду себя некорректно, но отнеситесь ко мне снисходительно, так как я новичок в PHP.
Итак, часть моего приложения разрешает пользователям генерировать URL-адрес, который можно использовать для доступа к некоторым их данным извне платформы. URL-адрес создается сценарием PHP на основе параметров URL-адреса в браузере пользователя (параметры позволяют передавать только целые числа, чтобы предотвратить злоупотребления).
Итак, чтобы создать URL-адрес, который будет использоваться совместно, сценарий делает следующее:
https://example.com/shared.php?function=form&account=
<?php echo $userid; ?>&form=<?php echo $myform; ?>
<?php if (isset($_GET['ref'])) { echo '&ref='.$ref; } ?>
<?php if (isset($_GET['upload'])) { echo '&upload='.$upload; } ?>&key=
<?php echo $key; ?>
<?php if (isset($_GET['saving'])) { echo '&saving='.$_GET['saving']; } ?>
<?php if (isset($_GET['expdate'])) { echo '&expdate='.$expdate; } ?>
<?php if (isset($_GET['enc'])) { echo '&enc='.$enc; } ?>
Я знаю, что мне не нужно постоянно открывать и закрывать тег PHP, но это было просто визуально проще, когда я собирал все элементы вместе.
В любом случае, приведенный выше код хорошо справляется с выводом URL-адреса, но если я хочу добавить конечный URL-адрес в переменную, как я могу это сделать?
Очевидно, можно поступить более тривиально:
$whatever =
'https://example.com/shared.php?function=form&account='.$variable.'&something='.$variable2.' И т.д.
Но поскольку у меня есть операторы if, которые проверяют параметры URL, я не знаю, как это сделать.
Ответ 1
Вы можете объединять строки с помощью оператора точка, вам не нужно сразу строить URL. Однако в этом случае было бы проще просто использовать встроенную функцию http_build_query(). Заполняя массив по мере проверки параметров и передавая его функции, когда завершите построение.
Не доверяйте проверкам на стороне клиента. Люди могут не заботиться об их применении, когда они вводят текст в адресную строку браузера.
Ответ 2
Можно поступить следующим образом:
$array = array(
'account' => $userid,
'form' => $myform,
'key' => $key,
);
if (isset($_GET['ref'])) {
$array['ref'] = $ref;
}
if (isset($_GET['upload'])) {
$array['upload'] = $upload;
}
if (isset($_GET['saving'])) {
$array['saving'] = $_GET['saving'];
}
if (isset($_GET['expdate'])) {
$array['expdate'] = $expdate;
}
if (isset($_GET['enc'])) {
$array['enc'] = $enc;
}
$finalURL = http_build_query($array);
Этот код прекрасно работает.
Ответ 3
Вы всегда можете подготовить параметры перед их занесением в строку. Можно использовать тернарный оператор:
$ref = $_GET['ref'] ? '&ref='.$_GET['ref'] : '';
$upload = $_GET['upload'] ? '&upload='.$_GET['upload'] : '';
$saving = $_GET['saving'] ? '&saving='.$_GET['saving'] : '';
$expdate= $_GET['expdate'] ? '&expdate='.$_GET['expdate'] : '';
$enc = $_GET['enc'] ? '&enc='.$_GET['enc'] : '';
$whatever = "https://example.com/shared.php?function=form&account={$userid}&form={$myform}{$ref}{$upload}&key={key}{$saving}{$expdate}{$enc}";
Или сделать это динамически, используя http_build_query():
$params = [
'function' => 'form',
'account' => $userid,
'form' => $myform,
'key' => $key,
'ref' => $_GET['ref'] ?? null,
'upload' => $_GET['upload'] ?? null,
...
];
$url = 'https://example.com/shared.php?';
// функция array_filter удалит пустые значения
$url .= http_build_query(array_filter($params));
Web