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));

Схожие статьи

Валидный e-mail: что это, проверка почты на валидность через валидатор
Web

Валидный e-mail: что это, проверка почты на валидность через валидатор

Web

Как получить миниатюру видеоролика YouTube используя YouTube API?

Краткая инструкция, как заливать на Github коды собственных программ
Web

Краткая инструкция, как заливать на Github коды собственных программ

Перенос строки в HTML и CSS с помощью тегов: быстрая инструкция
Web

Перенос строки в HTML и CSS с помощью тегов: быстрая инструкция

×