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 :: Добавить к ссылке GET переменные

 PHP.SU

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


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

> Без описания
lustoff
Отправлено: 04 Декабря, 2012 - 23:06:32
Post Id


Новичок


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


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




Здравствуйте!
Помогите, пожалуйста.
Есть сайт на Joomla.
В тексте статьи есть ссылка (на каждой странице своя ссылка), к которой нужно пристыковать значения из переменных после &.
Эта ссылка в конце имеет вид comment.php?dlid=400 . Кусок "comment.php?dlid=" одинаковый, меняется только число (400 в примере). Число может быть и 45004.

Как найти ссылку, которая заканчивается на comment.php?dlid=400 и добавить к ней значение из переменной $а после &аlfa=, $b после &beta=, $c после &ceta=
$а = "ааааааа";
$b = "bbbbbb";
$c = "cccccc";
Чтоб получилось так comment.php?dlid=400&аlfa=ааааааа&beta=bbbbbb&ceta=cccccc

preg_replace для этого использовать?
как правильно составить регулярное выражение, чтобы находить нужную ссылку и добавлять к ней переменные?

Извините, если непонятно объясняю - мозги уже пухнут. Вроде бы все просто должно быть, но в регулярных выражениях не силен.

(Отредактировано автором: 04 Декабря, 2012 - 23:31:47)

 
 Top
lustoff
Отправлено: 05 Декабря, 2012 - 23:10:27
Post Id


Новичок


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


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




Задача стоит в том, чтобы передать через ссылку на следующую страницу несколько переменных.
А именно нужно передать значение из <title></title>, из meta name="description", а также src из изображения, которое в тексте имеет код <img src="images/stories/users/64/1600.jpg" border="0" alt="Альтернативный текст" title="Тайтл текст" />

Так как в Тайтле, Дескрипшине и src встречаются разные символы, то их нужно зашифровать через функцию urlencode(); как я понял.
Вот что у меня вышло:

PHP:
скопировать код в буфер обмена
  1. $rep = $this->article->title; //то, что между <title></title>
  2. $str = $this->article->text; //здесь весь текст статьи
  3. $newtitle = urlencode ($rep); //зашифрованный тайтл
  4. $docum = & JFactory::getDocument();
  5. $descrip = urlencode($docum->description); //зашифрованный дескрипшн
  6. $imgsrc = urlencode("images/stories/users/64/1600.jpg"); //зашифрованный src изображения
  7. $perem = "&title=".$newtitle."&description=".$descrip."&imgsrc=".$imgsrc; //то, что нужно добавить к ссылке
  8.  


Только как найти images/stories/users/64/1600.jpg , если у них у всех одинакова часть "images/stories/users/" и заканчивается этот кусок перед знаком " (тот, что идет после .jpg)

Вот как найти этот кусок images/stories/users/64/1600.jpg - помогите, пожалуйста, составить правильное регулярное выражение, чтоб поместить его в переменную.

И как потом содержимое $perem пристыковать к ссылке comment.php?dlid=400 ?
 
 Top
ams
Отправлено: 05 Декабря, 2012 - 23:22:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


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




#images\/stories\/users[^\.]+\.jpg|png|gif#

Но я думаю, что тебе будет лучше в сессии это передавать...
 
 Top
lustoff
Отправлено: 05 Декабря, 2012 - 23:31:36
Post Id


Новичок


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


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




ams пишет:
#images\/stories\/users[^\.]+\.jpg|png|gif#

Но я думаю, что тебе будет лучше в сессии это передавать...

Спасибо за выражение! Завтра буду пробовать...
А передавать через сессии это как? Нужно, наверное, было еще сразу сказать, что передавать переменные нужно на другой сайт. Сессии в этом случае подходят? (для меня еще более темный лес).
 
 Top
ams
Отправлено: 07 Декабря, 2012 - 11:08:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


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




Если на другой сайт, то сессии не подойдут. Тогда нужно исп. cURL, сокеты или еще ченить Улыбка
Посмотри http://php.net/manual/ru/book.curl.php
 
 Top
lustoff
Отправлено: 07 Декабря, 2012 - 12:04:56
Post Id


Новичок


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


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




ams пишет:
Если на другой сайт, то сессии не подойдут. Тогда нужно исп. cURL, сокеты или еще ченить Улыбка
Посмотри http://php.net/manual/ru/book.curl.php

Спасибо, посмотрел... Темный лес для меня Радость

Могу же я просто передать переменные через GET?

Что выяснил:
1) Нужно их шифровать через urlencode();
2) Потом дешифровать, пока не нашел чем (не искал, потому что пока не передал еще Радость ).
3) Для безопасности на другом сайте проверить с какого сайта был переход, как описано тут http://forum.php.su/topic.php?fo...1&topic=3713 . Если с моего сайта, то использовать переменные, если с какого-то другого то подставлять какие-либо дефолтные значения. Можно как-то подделать $_SERVER['HTTP_REFERER']?

Что я упустил?

Гугл, вроде бы, использует передачу через GET, почему бы мне не сделать так же?
https://www[dot]google[dot]ru/search?q=g[dot][dot][dot]ome&ie=UTF-8
 
 Top
esterio
Отправлено: 07 Декабря, 2012 - 14:27:29
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Ну тут все просто
Если 2 сайта Вашых то тогда определим следуещее:
1 сайт - сайт с которого идет запрос
2 сайтс - сайт на какой идет запрос
Действие на первом:
Отдно условие - должен бить curl
формируете параметры запроса и оправляете GET запрос

Какие гетб пост не важно - ето зависит какая логика на втором.

PHP:
скопировать код в буфер обмена
  1. $url = 'http://example.com?param=value'; // Вормируете GET параметры, например param=value
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  5. curl_setopt($curl, CURLOPT_URL, $url);
  6. $response = curl_exec($curl);
  7. curl_close($curl);


Действия на втором:
PHP:
скопировать код в буфер обмена
  1. if($_SERVER["REMOTE_ADDR"] != '0.0.0.0') // Тут вказиваем ваш IP
  2.         die('BAD IP'); // Или инные действия
 
 Top
lustoff
Отправлено: 08 Декабря, 2012 - 10:34:42
Post Id


Новичок


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


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




ams пишет:

Тогда нужно исп. cURL

esterio пишет:

Отдно условие - должен бить curl

Блин, что ж это за зверь такой Однако ? Придется изучать, ссылку мне дали...
А если просто найти нужную в тексте ссылку регуляркой и добавить к ней переменные через & вот так
comment.php?dlid=400&аlfa=ааааааа&beta=bbbbbb&ceta=cccccc
Пользователь кликает по этой ссылке - переменные уходят на второй сайт. Там принимаются эти переменные и пользователю показывается нужный результат. Так сработает?
 
 Top
esterio
Отправлено: 08 Декабря, 2012 - 12:01:17
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Если я вас правильно понял, то нет, если У вас форма которая ссилаиться на 2 сайт, то он туда перейдет и заодно уйдет с вашего сайта. Я надеюсь Вы не хотите красть пароли))))
 
 Top
lustoff
Отправлено: 08 Декабря, 2012 - 14:15:27
Post Id


Новичок


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


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




esterio пишет:
Если я вас правильно понял, то нет, если У вас форма которая ссилаиться на 2 сайт, то он туда перейдет и заодно уйдет с вашего сайта. Я надеюсь Вы не хотите красть пароли))))

Красть ничего не собираюсь Радость
Сайты оба мои. Форма не используется. Просто в тексте есть ссылка, которая будет переделываться при помощи preg_replace(); (будут добавляться переменные). А это все делаю, чтоб не делать в ручном режиме. Второй сайт на поддомене. Там идет страничка с прямой ссылкой для скачивания файла. Вот чтобы эту страничку хорошо оформить для конкретного пользователя, хочу передавать переменные методом GET.
 
 Top
lustoff
Отправлено: 09 Декабря, 2012 - 13:29:26
Post Id


Новичок


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


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




ams пишет:
#images\/stories\/users[^\.]+\.jpg|png|gif#


Пробовал использовать эту регулярку - не получается у меня.
Удалось найти другим способом нужное изображение
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/<img(?:\\s[^<>]*?)?\\bsrc\\s*=\\s*(?|"([^"]*)"|\'([^\']*)\'|([^<>\'"\\s]*))[^<>]*>/i', $str, $m);
  2. print_r($m[1]);

Все бы хорошо, только оно как элемент массива идет - в браузере показывает как Array ( [0] => images/stories/users/64/1408.jpg ), и никак не могу разобраться, как его сделать обычной строкой.

Также нашел ссылку (даже вспомнил, что их может быть больше чем одна на странице, и к каждой нужно пристыковать переменные (хорошо, что одни и те же переменные к каждой ссылке Радость ))
PHP:
скопировать код в буфер обмена
  1. preg_match_all("/comment\.php\?dlid\=[0-9]+/", $str, $matches);
  2. print_r($matches);


В браузере отображается Array ( [0] => Array ( [0] => comment.php?dlid=256 [1] => comment.php?dlid=257 [2] => comment.php?dlid=258 [3] => comment.php?dlid=259 ) )

А дальше что делать? Моя фантазия иссякла.
(Добавление)
Чувствую, что это то, что мне нужно (похожий пример). Вроде ищет все совпадения по регулярке и добавляет к каждому нужные элементы.
PHP:
скопировать код в буфер обмена
  1. $a = "вфвфвфаф<24>sddasa5//'/,dsdsds<3>,.aвфвфвфаф<21>sddasa5//'/,dsdsds<6>,.aasa5//'/,dsdsds<3>,.aвфвфвфаф<25>sddas";
  2. preg_match_all('#<(\d+)>#',$a,$matches);
  3. foreach ($matches[1] as $number)
  4.     $a = preg_replace("#<\d+>#","<IMG SRC=image/$number.jpg>", $a, 1);
  5.  
  6. echo $a;

Сохраню, чтоб на свежую голову еще раз позднее взглянуть....

(Отредактировано автором: 09 Декабря, 2012 - 13:31:18)

 
 Top
lustoff
Отправлено: 09 Декабря, 2012 - 17:04:56
Post Id


Новичок


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


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




lustoff пишет:
Пробовал использовать эту регулярку - не получается у меня.

Извините, ams, все работает! Это у меня руки не оттуда.
Так. То, что нужно пристыковать к ссылке, наконец попало в одну переменную! Ура! Этап 1 выполнен
PHP:
скопировать код в буфер обмена
  1. preg_match("/images\/stories\/users[^\.]+\.jpg|png|gif/", $str, $m);
  2. $perem = "&title=".$newtitle."&description=".$descrip."&imgsrc=".$m[0];
 
 Top
lustoff
Отправлено: 10 Декабря, 2012 - 21:28:38
Post Id


Новичок


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


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




Помогите, пожалуйста, найти ссылки в тексте comment.php?dlid=256 comment.php?dlid=257 comment.php?dlid=258 comment.php?dlid=259 (может быть и одна ссылка в тексте такая) и пристыковать к каждой содержимое переменной $perem - не получается у меня методом тыка.
 
 Top
lustoff
Отправлено: 11 Декабря, 2012 - 08:24:49
Post Id


Новичок


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


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




Не очень изящно, но почти работает Хм
PHP:
скопировать код в буфер обмена
  1. while (preg_match("/comment\.php\?dlid\=[0-9]+\"/", $str, $matches))
  2. {
  3. $matches[0] = preg_replace("/(.*).$/", "\\1", $matches[0]);
  4. $newurl = $matches[0]."".$perem;
  5. $str = preg_replace("/comment\.php\?dlid\=[0-9]+/", $newurl, $str);
  6. }

Все ссылки получаются вида comment.php?dlid=256&title=....&decription=..... comment.php?dlid=256&title=....&decription=..... comment.php?dlid=256&title=....&decription=.....
короче, одинаковые все
А ну понятно, нужно в строку
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace("/comment\.php\?dlid\=[0-9]+/", $newurl, $str);

Добавить ограничение
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace("/comment\.php\?dlid\=[0-9]+/", $newurl, $str, 1);

На локальной машине браузер тупит 30 сек. а потом выдает Fatal error: Maximum execution time of 30 seconds exceeded . Что не так?
(Добавление)
Кажется, нашел я свою ошибку
PHP:
скопировать код в буфер обмена
  1. while (preg_match("/comment\.php\?dlid\=[0-9]+\"/", $str, $matches))

нужно поменять на
PHP:
скопировать код в буфер обмена
  1. while (preg_match("/comment\.php\?dlid\=[0-9]+\"/", $str, $matches) = 1)

Или нет?
Вечером проверю
(Добавление)
И это
PHP:
скопировать код в буфер обмена
  1. $newurl = $matches[0]."".$perem;
  2. $str = preg_replace("/comment\.php\?dlid\=[0-9]+/", $newurl, $str);

поменять на это
PHP:
скопировать код в буфер обмена
  1. $newurl = $matches[0]."".$perem."\"";
  2. $str = preg_replace("/comment\.php\?dlid\=[0-9]+\"/", $newurl, $str);

(Добавление)
PHP:
скопировать код в буфер обмена
  1. while (preg_match("/comment\.php\?dlid\=[0-9]+\"/", $str, $matches) = 1)
  2. {
  3. $matches[0] = preg_replace("/(.*).$/", "\\1", $matches[0]);
  4. $newurl = $matches[0]."".$perem."\"";
  5. $str = preg_replace("/comment\.php\?dlid\=[0-9]+\"/", $newurl, $str);
  6. }
 
 Top
lustoff
Отправлено: 11 Декабря, 2012 - 18:34:27
Post Id


Новичок


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


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




Итить-колотить! Заработало! К нужным ссылкам пристыкованы нужные переменные
PHP:
скопировать код в буфер обмена
  1. while (preg_match("/comment\.php\?dlid\=[0-9]+\"/", $str, $matches))
  2. {
  3. $matches[0] = preg_replace("/(.*).$/", "\\1", $matches[0]);
  4. $newurl = $matches[0]."".$perem."\"";
  5. $str = preg_replace("/comment\.php\?dlid\=[0-9]+\"/", $newurl, $str, 1);
  6. }

Этап 2 выполнен!

Может есть какие-то наставления, как правильно принять переменные - обязательные процедуры, так сказать?

Пока собираюсь проверить как тут описано http://forum.php.su/topic.php?fo...1&topic=3713 откуда человек пришел. Если с моего сайта - используем переменные, если нет, то не используем.
 
 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