Вопрос-Ответ по php

Печать RSS
6842
Кураторы темы:

С

Землянин
0
5111. WIN4, Создавай страницу (допустим link.php) и на ссылках адрес link.php?url=visavi.net, на созданной странице лови адрес и предупреждай его что покидает и куда подает

крутой чЕл
0
5111. Например
<?php
if(isset($_GET['link']))
                           {
echo'Вы покидаете сайт,скатертью дорога<br />

   <a href="'.$_GET['link'].'">Перейти</a>';

}else{

echo'Куда собрался?';

           }
?>
С

Землянин
0
Wapruks (2 Марта 2012 / 22:51)
5111. Например
<?php
if(isset($_GET['link']))
                           {
echo'Вы покидаете сайт,скатертью дорога<br />

   <a href="'.$_GET['link'].'">Перейти</a>';

}else{

echo'Куда собрался?';

           }
?>
Есть место XSS помоему

крутой чЕл
0
5115. mocart, это пример как можно реализовать. Суть - понять как это сделать
А

Оранжевые штаны
0
Есть текст

{if 55}
ololo
{/if}

{if lol==lol}
trololo
{/if}
Первое условие должно проигнорироваться, так как синтаксис не верен, а второе должно обработаться.

Регулярка:
preg_match_all('/{if (.*?)(==|!=|>|<|>=|<=)(.*?)}(.*?){\/if}/sim',$html,$matches);

Находит оба условия, причём оба условия в одной ячейки массива.
Жадность не спасает, так-как модификаторы sim и по другому ни как, html документ состоит не из одной строки и условия можно писать на нескольких строках.
Помогите. sad
А

Оранжевые штаны
0
Можете не отвечать на прошлый вопрос. Сделал так:
<?php
//test.php

$html='
{if 55}
	ololo
{/if}

{if lol2           ==            lol2}
	trololo
{/if}
';

preg_match_all('/\{\s*if.*?\}.*?\{\s*\/\s*if\s*\}/smi',$html,$matches);
$count=count($matches[0]);
for($i=0; $i<$count; $i++){
	if(preg_match('/\{if.*?==.*?\}/',$matches[0][$i])==1){
		$type='==';
		$text=preg_replace('/\{\s*if.*?\}(.*?)\{\s*\/\s*if\s*\}/smi','$1',$matches[0][$i]);
		$params=preg_replace('/\{\s*if\s+(.*?)\s*==(.*?)\s*\}'.$text.'\{\s*\/\s*if\s*\}/sim','$1==$2',$matches[0][$i]);
		$params=explode($type,$params);
		$params[0]=trim($params[0]);
		$params[1]=trim($params[1]);
		if($params[0]==$params[1]){
			echo'true<br />';
		}else{
			echo'false<br />';
		}
		
	}else{
		$type='';
	}
	echo'text='.$text.'<br />';
	echo'param 1='.$params[0].'<br />';
	echo'param 2='.$params[1].'<br />';
	echo'type:'.$type.'<br />';
	echo $matches[0][$i];
	echo'<br />';
}
?>
А

Оранжевые штаны
0
<?php
function vars($html){ //Заменяет {var:VAR} на $VAR
		preg_match_all('/{var:( .*?)}/',$html,$matches);
		$count=count($matches[1]);
		for($i=0; $i<$count; $i++){
			global $$matches[1][$i];
			$html=str_replace('{var:'.$matches[1][$i].'}',$$matches[1][$i],$html);
			
		}
		
		return $html;
	}
?>
Как сделать чтоб этот метод работал с массивами а не переменными?
А

Оранжевые штаны
0
Облегчу.
Есть переменная $var- это имя массива, и есть переменная $index- это нужный индекс в массиве.
Как вывести значение массива $var с индексом $index?
А

Оранжевые штаны
0
Справился методом перебора. ${$var}[$index];
А

Пришелец
0
Как вывести друзей которые в онлайне?
Мне нужен именно счетчик (т.е SELECT count(*)). В общем на сколько я знаю нужно связать две таблицы (таблицы пользователей и моих друзей).
Для цикла у меня есть запрос:
<?
$result = mysql_query("SELECT DISTINCT `friends`.* FROM `friends`

LEFT JOIN `profile`

ON

(`friends`.`user_2` = `profile`.`id`)

WHERE

`friends`.`user_1` = '$us'

AND

`profile`.`time` > '" . (time()-600) . "'

ORDER BY `profile`.`time`");
?>

А переделать не получается(
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск