Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Добавление в массив результат URL.
Nizz
Отправлено: 21 Марта, 2016 - 21:27:05
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Подскажите пожалуйста, как реализовать данную функцию ?
К примеру имеем несколько кнопок, которые введут на некий адрес:
***/Page/Module/id/1;
***/Page/Module/id/2;
***/Page/Module/id/3;
Где меняются только последние символы (1,2,3)
Как сделать такой массив, в котором будут эти самые (1,2,3) и который будет выдавать это значение на конкретной странице, то есть для
***/Page/Module/id/1 будет результат (1);
***/Page/Module/id/2 будет результат (2);
***/Page/Module/id/3 будет результат (3);
Или это невозможно ?
 
 Top
Строитель Модератор
Отправлено: 22 Марта, 2016 - 19:08:57
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




Nizz пишет:
Подскажите пожалуйста, как реализовать

Принцип такой
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $pages = [
  5.         'one' => 1,
  6.         'two' => 2,
  7.         'three' => 3
  8. ];
  9.  
  10. if (isset($_SERVER['REQUEST_URI'])) {
  11.         $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
  12.         $exp = explode('/', $path);
  13.  
  14.         if (($key = array_search(end($exp), $pages)) !== false) {
  15.                 if (file_exists($key .'.php')) {
  16.                         include $key .'.php';
  17.                         echo 'Подключен файл '. $key .'.php';
  18.                 }
  19.         }
  20. } ?>
  21.  
  22. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/1">1</a>
  23. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/2">2</a>
  24. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/3">3</a>
 
 Top
Nizz
Отправлено: 22 Марта, 2016 - 20:51:04
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Спасибо, что помогли, но я правда к своему сожалению к 25 годам так и не научился формировать грамотно вопрос. Я имел ввиду более гибкую систему, которая бы разбивала адрес по '/' "***/Page/Module/id/1" и 4ое значение заносила в массив. То есть в массив попадает значение которое находится на месте (1). Таким образом, находясь на этом адресе и просто вызвав эту переменную, я бы увидел нужное значение. Или такое не осуществить ?
 
 Top
Строитель Модератор
Отправлено: 23 Марта, 2016 - 00:32:46
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




Nizz пишет:
систему, которая бы разбивала адрес по '/' "***/Page/Module/id/1" и 4ое значение заносила в массив.
Ну почти так и есть - строка запроса разбивается по слешу на массив, и последний элемент этого массива используется (в моём примере) для подключения другого файла.
Я не понимаю, что именно вам нужно, сгенерировать массив, состоящий из последних элементов строки запроса? Вот, может конечно снова пальцем в небо, но попытаюсь - код возвращает массив имён последних элементов из uri-запроса. Для примера я использовал сессии.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if (isset($_SERVER['REQUEST_URI'])) {
  4.     $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
  5.     $exp = explode('/', $path);
  6.     isset($_SESSION['uri']) ?: $_SESSION['uri'] = [];
  7.     in_array(end($exp), $_SESSION['uri']) ?: $_SESSION['uri'][] = end($exp);
  8.        
  9.     var_dump($_SESSION['uri']);
  10. }
  11.  
  12. ?>
  13.  
  14. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/1">1</a>
  15. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/2">2</a>
  16. <br /><a href="<?=$_SERVER['PHP_SELF']?>/page/module/id/3">3</a>

(Отредактировано автором: 23 Марта, 2016 - 00:35:24)

 
 Top
Nizz
Отправлено: 23 Марта, 2016 - 16:56:18
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Я правильно понимаю как работает ваш код ?
в начале проверяется URL адрес на поле id и если таковой имеется, то происходит
PHP:
скопировать код в буфер обмена
  1.  $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
  2.     $exp = explode('/', $path);
весь URL адрес разбивается на переменные по разделителю "/".
PHP:
скопировать код в буфер обмена
  1.  isset($_SESSION['uri']) ?: $_SESSION['uri'] = [];
  2.     in_array(end($exp), $_SESSION['uri']) ?: $_SESSION['uri'][] = end($exp);
  3.        
  4.     var_dump($_SESSION['uri']);

Эта часть кода до меня к сожалению плохо доходит как работает.
Дело в том, что использовал чужую наработку, но она у меня не работает.
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_URI'] == '/') {
  2. $Page = 'index';
  3. $Module = 'index';
  4. } else {
  5. $URL_Path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
  6. $URL_Paths = explode('/', trim($URL_Path, ' /'));
  7. $Page = array_shift($URL_Paths);
  8. $Module = array_shift($URL_Paths);
  9.  
  10.  
  11. if (!empty($Module)) {
  12. $Param = array();
  13. for ($i = 0; $i < count($URL_Parts); $i++) {
  14. $Param[$URL_Parts[$i]] = $URL_Parts[++$i];
  15. }
  16. }
  17. }

И код не работает именно на переменной $Param, находясь на правильном адресе, переменная парам принимает лишь значение array. И даже если прибавить к ней 0 и перевести в числовую переменную, то все-равно ее значение будет 0, а не нужный индитификатор.
 
 Top
Viper
Отправлено: 23 Марта, 2016 - 18:30:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Nizz пишет:
Эта часть кода до меня к сожалению плохо доходит как работает.
потому-что за такое писательство руки отрубают!
PHP:
скопировать код в буфер обмена
  1. isset($_SESSION['uri']) ?: $_SESSION['uri'] = []; // до модного говнописательства было
  2.  
  3. if (!isset($_SESSION['uri'])) {
  4.     $_SESSION['uri'] = array();
  5. }


Nizz пишет:
И код не работает
зачем столько телодвижений с массивами и циклами? У вас после explode переменная $URL_Paths уже содержит массив. По индексу обращайтесь и всё.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Строитель Модератор
Отправлено: 23 Марта, 2016 - 20:11:17
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




Viper пишет:
потому-что за такое писательство руки отрубают!
Эй, давай не будем грубить, во первых! Во вторых - если ты привык писать три строки, и не понимаешь, как прочитать одну строку с тем же "модным" кодом, то кому и что надо рубить? Вопрос был риторический.
 
 Top
Nizz
Отправлено: 23 Марта, 2016 - 21:01:21
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Строитель, Viper, ребят огромное вам спасибо обоим, к сожалению я не могу поднять вам рейтинг, но вы и представить не можете как многое вы для меня сделали. Большое еще раз вам спасибо.
 
 Top
Viper
Отправлено: 24 Марта, 2016 - 09:39:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Строитель можно и весь код в одну строку писать, но кому это потом удобно? Вы на форуме в разделе для новичков, так что удосужтесь писать так, чтобы они не задавали потом вопросы "а что это такое". Ок?

PS! Это я ещё вам(тебе?) не грубил!


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Строитель Модератор
Отправлено: 24 Марта, 2016 - 10:12:57
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




Viper пишет:
Ок?
Ок. Но возникает следующий вопрос - а для кого тогда мануал написан, для профи? И если тут что-то написано не понятно, то нельзя ли прочитать мануал и там найти ответ?
Viper пишет:
PS! Это я ещё вам(тебе?) не грубил!
Я и не хотел грубить, сори за "Ты", просто на счёт отрубывания рук Вы не прав - конечно, тернарные операторы не так удобочитаемы, но они сокращают код втрое.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB