Несколько переменных в PHP URL - PullRequest
1 голос
/ 01 июня 2011

Я новичок в PHP, и эта проблема озадачила меня.

У меня есть ситуация, когда у меня есть URL-адрес, подобный этому

http://www.test.com/test.php?month=5&year=5&pn=4&ItemsPerPage=15&sort=5

Месяц и годукажите дату, pn = номер страницы, ItemsPerPage = элементы на страницу и сортировку = ORDER BY.

Моя проблема заключается в том, что на странице имеется несколько точек для изменения различных переменных.

Aпользователь может изменить месяц и дату через календарь ... и это уничтожит остальные переменные, так что пользователь теряет свое место на странице и сколько элементов было на странице и как страница была отсортирована.

Как мне сделать так, чтобы пользователь мог изменить одну из переменных ... но другие переменные остались прежними?

Любая помощь будет принята с благодарностью.Заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 01 июня 2011

вам нужно добавить скрытые поля в ваши формы, которые учитывают все остальные поля, которые вы хотите сохранить.

Например:

<input type=hidden name="sort" value=5 />

другой (лучший) способ - инициализация php_session

0 голосов
/ 12 июня 2011

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

Функция

<?php
function urlVarsRecreate ($exclude='') {
    $urlArray = array();
    foreach($_GET as $key => $val) {
        if(!is_array($exclude)) {
            if ($key != $exclude) {
                array_push($urlArray, $key.'='.urlencode($val));
            }
        }
        else {
            if (!in_array($key, $exclude)) {
                array_push($urlArray, $key.'='.urlencode($val));
            }
        }
    }
    return implode('&', $urlArray);
}
?>

Теперь, когда вы вызываете его, вы указываете, какие переменные вам не нужны, либо в массиве, либо только в строке, как показано ниже.

Называя это

<?php
//For excluding a single variable
echo '<a href="test.php?'.urlVarsRecreate('sort').'&sort=newVal">sort by newVal</a>';

//For excluding multiple variables
echo '<a href="test.php?'.urlVarsRecreate(array('year','month','pn')).'&sort=newVal">Some link</a>';'
?>

Надеюсь, это поможет, я считаю это весьма полезным и часто использую его при создании страниц с результатами поиска.

0 голосов
/ 01 июня 2011

Чтобы запомнить ваши переменные, вы должны использовать SESSION, см. Эту ссылку http://www.php.net/manual/en/book.session.php

Короче, я предлагаю эту функцию

function remember($var,$default=null) {
  if(!session_id()) session_start(); // needed if session.auto_start is off
  if(isset($_GET[$var])) $_SESSION["remember"][$var] = $_GET[$var];
  if(!isset($_SESSION["remember"][$var])) $_SESSION["remember"][$var] = $default;
  return $_SESSION["remember"][$var];
}

Тогда вы можете написать в своем коде что-то вроде этого

$sort = remember("sort");

и он запомнится, даже если щелкнуть календарь, очистит переменную от URL

0 голосов
/ 01 июня 2011

Полагаю, вы имеете в виду изменение материала в Javascript.

Сделать скрипт, который меняет его, используя window.location?

0 голосов
/ 01 июня 2011

Хотя ваш вопрос не ясен, ответ может показаться, что для каждого места они могут изменить 1 элемент, либо вам нужно выполнить «перезагрузку», когда он обновляется несколько раз, либо для каждого места, где они могут изменить его, вам нужно отправьте отсутствующие переменные с новым значением .. например, поместите их как скрытые значения в форму или закодируйте как часть назначения URL.

0 голосов
/ 01 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...