Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: передача переменных методом GET при помощи ссылок
 
 автор: illuzion   (10.02.2010 в 15:01)   письмо автору
 
 

Имеем следующую строку с передачей параметров:
http://localhost/messages.php?user=ivanov&sort=date

Здесь ищем все сообщения пользователя ivanov и сортируем их по дате.

На странице предлагается выбрать также алфавитную сортировку по теме сообщения.
Проблемы начинаются здесь:

echo ('<a href="?sort=theme">Сортировать по теме</a>');

Такая ссылка выведет нас на адрес
http://localhost/messages.php?sort=theme
В результате этого пропадает важная переменная user.

Первое что пришло мне на ум:
if (preg_match('/\?*=/', $_SERVER['REQUEST_URI'])) $href_char="&amp;";
else $href_char="?";
echo ('<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$href_char.'sort=theme">Сортировать по теме</a>');


Получилось громоздко и в корне не верно. Теперь &sort=*** добавляется к текущей адресной строке при каждой новой сортировке. В результате через несколько сортировок получаются в строке адреса подобные монстры:
http://localhost/messages.php?user=ivanov&sort=date&sort=theme&sort=date&sort=theme

Вижу выход только в уничтожении подстроки "sort=***" в строке адреса через preg_replace.

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

  Ответить  
 
 автор: DJ Paltus   (10.02.2010 в 15:09)   письмо автору
 
   для: illuzion   (10.02.2010 в 15:01)
 


<?
echo ("<a href='?sort=theme&user=".$_GET['user']."'>Сортировать по теме</a>"); 

  Ответить  
 
 автор: illuzion   (10.02.2010 в 15:15)   письмо автору
 
   для: DJ Paltus   (10.02.2010 в 15:09)
 

Все гениальное просто :)
Спасибо. Для описанного случая это и правда элегантное решение.
Но если нужно будет передать еще парочку переменных?
Притом, не все из них гарантированно будут присутствовать в адресной строке.
Придется проверять, есть такая переменная или нет, и добавлять, если есть? :)

  Ответить  
 
 автор: DJ Paltus   (10.02.2010 в 15:26)   письмо автору
 
   для: illuzion   (10.02.2010 в 15:15)
 

Ну есть два основных массива - гет и пост. После передачи из формы или перехода по ссылке с параметрами, переменные в них живут на следующей странице. И ими надо пользоваться, правда? Вот так это и делается. Думаете, ссылка "http://www.softtime.ru/forum/addpost.php?id_forum=1&id_theme=71779&id_post=422182" так страшно выглядит просто так? Это передана куча параметров, которые уже повтыкнуты в текст страницы и будут использованы и далее.

  Ответить  
 
 автор: illuzion   (10.02.2010 в 15:52)   письмо автору
 
   для: DJ Paltus   (10.02.2010 в 15:26)
 

Она так страшно выглядит, потому что каждая переменная в ней нужна, чтобы попасть на необходимую страницу. Логика этой ссылки отличается от той, которую нужно сконструировать мне. Потому что переменные сортировки, группировки и т.д. и т.п. могут присутствовать в строке адреса, а могут опускаться, притом независимо друг от друга.

Например со ссылки
http://localhost/elements.php?user=ivanov&sort=year&group=author&rating=10

надо перейти на ссылку
http://localhost/elements.php?user=ivanov&sort=rating&group=author&rating=10

Если руководствоваться Вашим прмером, это будет выглядеть так:

<?
echo ("<a href='?sort=rating&user=".$_GET['user']."&group=".$_GET['group']."&rating=".$_GET['rating']."'>Сортировать по рейтингу</a>"); 
?>

Но дело в том, что мы не можем быть уверены, что переменные group и rating присутствуют в запросе, потому что они необязательны. Например, адресная строка будет выглядеть следующим образом:
http://localhost/elements.php?user=ivanov&sort=year

Тогда указанный скрипт выведет следующую ссылку:
<a href="?sort=rating&user=ivanov&group=&rating=">Сортировать по рейтингу</a>

  Ответить  
 
 автор: GeorgeIV   (10.02.2010 в 16:15)   письмо автору
 
   для: illuzion   (10.02.2010 в 15:52)
 

Тогда указанный скрипт выведет следующую ссылку:
<a href="?sort=rating&user=ivanov&group=&rating=">Сортировать по рейтингу</a>  

В этом нет ничего страшного, обычнотпроверяется не только наличие переменной в запросе но и ее непустотность, так сказать...

  Ответить  
 
 автор: illuzion   (10.02.2010 в 16:25)   письмо автору
 
   для: GeorgeIV   (10.02.2010 в 16:15)
 

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

  Ответить  
 
 автор: DJ Paltus   (10.02.2010 в 16:19)   письмо автору
 
   для: illuzion   (10.02.2010 в 15:52)
 

Так и думайте, где хранить, откуда брать и в каких случаях подставлять данные в переменные.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования