Web

Как я могу добавить динамически созданный URL-адрес в переменную PHP?

У меня такое ощущение, что я веду себя некорректно, но отнеситесь ко мне снисходительно, так как я новичок в 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

Копируются ли массивы в PHP как значения или как ссылки на новые переменные при передаче в функции

Web

Что это — stdin, stdout и stderr?

Web

Как повысить органический CTR блогов? 25 советов и примеров из блога

Что такое WebGL и как его включить. Подробная инструкция для чайников
Web

Что такое WebGL и как его включить. Подробная инструкция для чайников

×