За последние 24 часа нас посетили 17820 программистов и 1286 роботов. Сейчас ищут 1324 программиста ...

Глобальный массив $_SERVER

Тема в разделе "PHP и базы данных", создана пользователем SiUna, 7 май 2012.

  1. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Подскажиет пожалуйста как объединить два элемента массива $_SERVER
    $url = $_SERVER['PHP_SELF'];
    Тут все нормально пока в страницах не появляются данные после знака вопроса.
    Например:
    /index.php/content1?start=1
    Я знаю чтобы получить данные после знака вопроса нужно использовать $_SERVER['QUERY_STRING'].
    Пробовала $_SERVER['REQUEST_URI'], неподходит, каждый раз при переходе с ним он приписывает к строке все, после знака вопроса, вот так:
    /index.php/statj1?start=1
    /index.php/statj1?start=1?start=1
    /index.php/statj1?start=1?start=1?start=1
    Может есть какой то элемент который может всю строку получить, или как объединить эти два элемента чтобы получить строку: /index.php/statj1?start=1 полностью?
    Ещё нужно учитывать, что страница вызывается как /index.php/content1, так и /index.php/content1?start=1, поэтому и нужно учитывать два варианта.
     
  2. AnGor

    AnGor Активный пользователь

    С нами с:
    6 фев 2009
    Сообщения:
    7
    Симпатии:
    0
    вот так не пробовали?

    Код (Text):
    1.   echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
     
  3. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Как то не так вставляю, незнаю как правильно(
    Код (PHP):
    1. echo "<a href=$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']?page=$p>← Предыдущая</a>";
    2.  
    Ошибка: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
    У меня было вот так
    Код (PHP):
    1. $url = $_SERVER['PHP_SELF'];
    2. echo "<a href={$url}?page=$p>← Предыдущая</a>";
    3.  
    Это все хорошо, пока в странице не появляются элементы после ?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    parse_url и из нее path
     
  5. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Это куда, сюда?
    Код (PHP):
    1. $url = $_SERVER['PARSE_URL'];
    2.  
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это функция

    Добавлено спустя 25 секунд:
    вы заходите на php.net там поиск вверху справа
     
  7. AnGor

    AnGor Активный пользователь

    С нами с:
    6 фев 2009
    Сообщения:
    7
    Симпатии:
    0
    вместо
    $url = $_SERVER['PHP_SELF'];
    echo "<a href={$url}?page=$p>← Предыдущая</a>";

    лучше так

    $url = $_SERVER['SERVER_NAME'];
    echo "<a href=http://{$url}/statj1.php?page=$p>← Предыдущая</a>";

    если я правильно понял
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а если были переданы гет-параметры касающиеся чего-то важного на странице и они должны быть переданы на другие страницы? =)
    тот же поисковый запрос, например.
     
  9. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Это тоже самое что оставить $url = $_SERVER['PHP_SELF']; а вот так сделать
    echo "<a href=http://{$url}?start=1&page=$p>← Предыдущая</a>";
    не вариант, потому что не обязательно будет это - ?start=1, попасть на эту страницу можно двумя путями, и опять же совсем не обязательно что будет ?start=1, если вдруг внутри статью передвинут, тут может оказатся и ?start=2 и ?start=3, поэтому писать вручную не вариант(

    Добавлено спустя 8 минут 14 секунд:
    Хорошо, а как теперь обединить данные $parsed_url['path'] и $parsed_url['query'] в одну переменную?
    Чтобы уже её ставить в ссылку.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а в чем сложность?
     
  11. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Нашла как объединить, но там возникает такая же проблема, как если просто использовать $_SERVER['REQUEST_URI'].
    Он берет нужный url, но каждый раз добавляя к нему то что получается после ? у меня постраничный переход в разделе, в итоге получается что
    /index.php/2012-03-20-13-10-05?start=1 тут нормально, переход по ссылке уже получается
    /index.php/2012-03-20-13-10-05?start=1&page=1, в следующей ещё добавляет
    /index.php/2012-03-20-13-10-05?start=1&page=1&page=2 и переход уже неправильный,
    а вот как взять только эту часть /index.php/2012-03-20-13-10-05?start=1 и чтоб он её не менял после каждого перехода?
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    автоматом - никак. ручками. разбивать, собирать обратно то, что нужно.
     
  13. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Так я попробовала собрать:
    Код (PHP):
    1. $self_url = $_SERVER['REQUEST_URI']; // получаем ссылку
    2. $parsed_url = parse_url($self_url); // разбиваем
    3. $ur=($parsed_url['query']!='') ? $parsed_url['path']."?".$parsed_url['query'] : $parsed_url['path']; // собираем
    4.  
    Но каждый раз как я делаю переход по страницам, в parsed_url['query'], каждый раз попадает новое, сначала
    /index.php/2012-03-20-13-10-05?start=1, затем уже
    /index.php/2012-03-20-13-10-05?start=1&page=1 и потом когда это в переменную попало, а она у меня тут
    Код (PHP):
    1. echo "<a href={$url}&page=$p>← Предыдущая</a>";
    2.  
    Она добавит &page=2 и ссылка уже в переменной будет /index.php/2012-03-20-13-10-05?start=1&page=1&page=2
    и конечно же не будет работать. Потому что ссылка каждый раз в переменной обновляется, а мне бы её как то 1 раз поймать и чтоб она не менялась.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо разбивать query =)
    собирать заново.
     
  15. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Теперь поняла, спасибо) Попробую, как получится)
     
  16. SiUna

    SiUna Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    41
    Симпатии:
    0
    Все, спасибо большое все получилось) Только проблема небольшая с условием, когда ставить ссылку простую ['PHP_SELF'], а когда эту собранную. Непонятно по чему сделать условие, потому что там все меняется динамически) Но это мелочи, и так хорошо работает. Спасибо большое
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это уж только ты можешь решить где какие параметры тебе уместно передавать и зачем