Я написал эту небольшую функцию несколько лет назад:
function sqlvprintf($query, $args)
{
global $DB_LINK;
$ctr = 0;
ensureConnection(); // Connect to database if not connected already.
$values = array();
foreach ($args as $value)
{
if (is_string($value))
{
$value = "'" . mysqli_real_escape_string($DB_LINK, $value) . "'";
}
else if (is_null($value))
{
$value = 'NULL';
}
else if (!is_int($value) && !is_float($value))
{
die('Only numeric, string, array and NULL arguments allowed in a query. Argument '.($ctr+1).' is not a basic type, it\'s type is '. gettype($value). '.');
}
$values[] = $value;
$ctr++;
}
$query = preg_replace_callback(
'/{(\\d+)}/',
function($match) use ($values)
{
if (isset($values[$match[1]]))
{
return $values[$match[1]];
}
else
{
return $match[0];
}
},
$query
);
return $query;
}
function runEscapedQuery($preparedQuery /*, ...*/)
{
$params = array_slice(func_get_args(), 1);
$results = runQuery(sqlvprintf($preparedQuery, $params)); // Run query and fetch results.
return $results;
}
Это позволяет запускать операторы в однострочном C # -ish String.Format, например:
runEscapedQuery("INSERT INTO Whatever (id, foo, bar) VALUES ({0}, {1}, {2})", $numericVar, $stringVar1, $stringVar2);
Он избегает использования типа переменной. Если вы попытаетесь параметризовать имена таблиц и столбцов, это будет терпеть неудачу, поскольку она помещает каждую строку в кавычки, которая является недопустимым синтаксисом.
ОБНОВЛЕНИЕ БЕЗОПАСНОСТИ: предыдущая версия str_replace
разрешала инъекции, добавляя токены {#} в пользовательские данные. Эта версия preg_replace_callback
не вызывает проблем, если замена содержит эти токены.
CSS3 позволяет этот вид вещи, и это похоже на это:
body {
background-image: url(images/bgtop.png), url(images/bg.png);
background-repeat: repeat-x, repeat;
}
текущие версии всех главных браузеров теперь поддерживают его , однако если необходимо поддерживать IE8 или ниже, тогда лучший способ, которым можно работать вокруг этого, состоит в том, чтобы иметь дополнительные отделения:
<body>
<div id="bgTopDiv">
content here
</div>
</body>
body{
background-image: url(images/bg.png);
}
#bgTopDiv{
background-image: url(images/bgTop.png);
background-repeat: repeat-x;
}
Да, это возможно, и было реализовано популярным веб-сайтом тестирования удобства пользования Silverback. При просмотре исходного кода, Вы видите, что фон составлен из нескольких изображений, помещенных друг на друге.
Вот статья, демонстрирующая, как сделать, эффект может быть найден на Витамин . Подобное понятие для обертывания этих слоев 'луковой шелухи' может быть найдено на Список А Независимо .
Вы могли иметь отделение для вершины с одним фоном и другим для основной страницы, и разделить содержание страницы между ними или поместить содержание в плавающее отделение на другом z-уровне. Путем Вы делаете, это может работать, но я сомневаюсь, что это будет работать через каждый браузер, с которым Вы встречаетесь.