Как вы можете видеть, люди предлагают вам максимально использовать подготовленные заявления. Это не так, но когда ваш запрос выполняется всего один раз за процесс, будет небольшое снижение производительности.
Я столкнулся с этой проблемой, но я думаю, что решил ее в очень сложном пути - как хакеры используют, чтобы избежать использования кавычек. Я использовал это в сочетании с эмулированными подготовленными заявлениями. Я использую его, чтобы предотвратить все возможные типы инъекций SQL. Так, например, запрос: Будет: или Hex - идеальный выход. В комментариях было некоторое обсуждение, поэтому я, наконец, хочу дать понять. Эти два подхода очень похожи, но в некоторых отношениях они немного различаются: Префикс ** 0x ** может использоваться только для столбцов данных, таких как char, varchar, text, block, binary, и т. д. Кроме того, его использование немного сложно, если вы собираетесь вставить пустую строку. Вам придется полностью заменить его на UNHEX () работает в любом столбце; вам не нужно беспокоиться о пустой строке. Обратите внимание, что этот шестиугольный метод часто используется как атака SQL-инъекции, где целые числа точно так же, как и строки Например, если вы просто делаете что-то вроде этого: атака может очень легко ввести вас . Рассмотрим следующий введенный код, возвращенный из вашего скрипта: SELECT ... WHERE id = -1 union all select table_name from information_schema.tables и теперь просто извлеките структуру таблицы: SELECT ... WHERE id = -1 union all select column_name from information_schema.column где table_name = 0x61727469636c65 И тогда просто выберите нужные данные. Разве это не круто? Но если кодер инъекционного сайта будет шестнадцатеричным, инъекция не будет возможна, потому что запрос будет выглядеть следующим образом: Мой подход:
sprintf("SELECT 1,2,3 FROM table WHERE 4 = %u", $input);
mysql_hex_string()
, в PHP вы можете использовать bin2hex()
. Не беспокойтесь о том, что экранированная строка будет иметь размер в 2 раза по сравнению с исходной длиной, потому что даже если вы используете mysql_real_escape_string
, PHP должен выделять одну и ту же емкость ((2*input_length)+1)
, что то же самое. 0x
или использовать функцию MySQL UNHEX
. SELECT password FROM users WHERE name = 'root'
SELECT password FROM users WHERE name = 0x726f6f74
SELECT password FROM users WHERE name = UNHEX('726f6f74')
Разница между функцией UNHEX и префиксом 0x
''
, или вы получите сообщение об ошибке. Hex-методы часто используются в качестве атак
mysql_real_escape_string
. Тогда вы можете избежать использования кавычек. "SELECT title FROM article WHERE id = " . mysql_real_escape_string($_GET["id"])
SELECT ... WHERE id = UNHEX('2d312075...3635')
<div style="width: 200px;background-color: #FFFFCC; float: left;">
Left column
</div>
<div style="margin-left: 200px; background-color: #CCFFFF">
Right column
</div>
, Который должен сделать это (очевидно, реализация будет варьироваться на основе того, где это находится на странице, но я думаю, что это - понятие, которое Вы ищете).
Как Sparr говорит, существует CSS, который конкретно отвечает этому требованию, потому что не действительно возможно сделать это любой другой путь без различного, возможно недопустимые компромиссы, и это display:table
, display:table-cell
, и т.д.
, К сожалению, Internet Explorer до Internet Explorer 8 не поддерживает эти режимы отображения, таким образом, проблема не действительно с CSS, но с отказом браузеров (на самом деле Internet Explorer, другие в порядке) поддерживать CSS соответственно.
хорошие новости - то, что это изменяется, и в свое время, у нас будет надлежащее решение для CSS. Тем временем выберите один из компромиссов в других ответах.
Я думаю, что это - то, что Вы ищете:
<table style='width: 100%;'>
<tr>
<td style='width: 200px;'></td>
<td></td>
</tr>
</table>
Благодарят меня позже. =P
(я, очевидно, шучу.... вид...)
это , что Вы ищете?
body {
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
height: 100%;
max-height: 100%;
}
#framecontent {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 200px;
/*Width of frame div*/
height: 100%;
overflow: hidden;
/*Disable scrollbars. Set to "scroll" to enable*/
background: navy;
color: white;
}
#maincontent {
position: fixed;
top: 0;
left: 200px;
/*Set left value to WidthOfFrameDiv*/
right: 0;
bottom: 0;
overflow: auto;
background: #fff;
}
.innertube {
margin: 15px;
/*Margins for inner DIV inside each DIV (to provide padding)*/
}
* html body {
/*IE6 hack*/
padding: 0 0 0 200px;
/*Set value to (0 0 0 WidthOfFrameDiv)*/
}
* html #maincontent {
/*IE6 hack*/
height: 100%;
width: 100%;
}
<div id="framecontent">
<div class="innertube">
<h1>CSS Left Frame Layout</h1>
<h3>Sample text here</h3>
</div>
</div>
<div id="maincontent">
<div class="innertube">
<h1>Dynamic Drive CSS Library</h1>
<p style="text-align: center">Credits: <a href="http://www.dynamicdrive.com/style/">Dynamic Drive CSS Library</a>
</p>
</div>
</div>
я чувствую Вашу боль, но пытаюсь не посмотреть на нее как на потраченное впустую время. Я уверен, что у Вас есть намного лучшее схватывание CSS, чем Вы ранее сделали. Продолжайте работать с ним, и Вы начнете видеть преимущества. Я лично нашел, что CSS одна из тех вещей, которая берет много практики для становления опытной в. Я использовал основанные на CSS разметки в течение 5 лет и меня, все еще изучая интересные приемы каждый день.
Во-первых, я рекомендовал бы книги CSS Eric Meyer, а также ссылка CSS в сети: Список А Независимо . Я использую CSS экстенсивно в моей работе, и я думаю, что стал довольно хорошим с ним.
Со всем тем сказанным: сделайте что работы. Я был через точно боль, которую Вы только что испытали. В конце я полагал, что не стоило ставить под угрозу мой дизайн только, чтобы быть в состоянии сказать, что я не использовал таблицы.
Помните: Вам не платят, чтобы сделать CSS - Вам платят для записи рабочего программного обеспечения.
Что-то вроде этого:
<div style="position: relative; width: 100%">
<div style="position: absolute; left: 0; top: 0; width: 200px">
left column
</div>
<div style="position: absolute; left: 200px; top: 0">
other stuff
</div>
</div>
, Конечно, необходимо, вероятно, поместить стили в отдельную таблицу стилей, а не встроенный. И единственный столбец фиксированной ширины слева довольно прост, но иногда я действительно вижу другие разметки, которые могут быть сделаны легко с таблицами, но являются, насколько я знаю, жестоко трудный с CSS.
Я люблю, как CSS все еще берет полную страницу кода для дублирования пары строк использования таблицы.
После ведения войны CSS, я пришел к выводу, что "чистый" находится в глазу наблюдателя и переместились в больше, "позвольте нам просто использовать то, к чему приближаются работы".
CSS Использования на том, для чего это хорошо: то, чтобы заставлять вещи выглядеть симпатичными. Используйте DIV и ПРОМЕЖУТОК, когда Вы будете мочь. Но если Вы проводите день, пытаясь получить вещи выстроиться в линию прямо через все различные разновидности браузера, затем хлопните таблицу там и идите дальше. Не волнуйтесь, вопреки тому, что большинство людей, кажется, думает, щенок на самом деле не умрет.
Вы могли бы хотеть попробовать их:
http://www.alistapart.com/stories/practicalcss/
http://www.w3.org/2002/03/csslayout-howto
Вот то, почему:
http://en.wikipedia.org/wiki/Tableless_web_design
http://davespicks.com/essays/notables.html
[еще 1111] HowTOs:
div.row {
clear: both;
padding-top: 10px;
}
div.row span.label {
float: left;
width: 100px;
text-align: right;
}
div.row span.formw {
float: right;
width: 335px;
text-align: left;
}
<div style="width: 350px; background-color: #cc9;
border: 1px dotted #333; padding: 5px;
margin: 0px auto";>
<form>
<div class="row">
<span class="label">Name:</span><span
class="formw"><input type="text" size="25" /></span>
</div>
<div class="row">
<span class="label">Age:</span><span
class="formw"><input type="text" size="25" /></span>
</div>
<div class="row">
<span class="label">Shoe size:</span><span
class="formw"><input type="text" size="25" /></span>
</div>
<div class="row">
<span class="label">Comments:</span><span
class="formw">
<textarea cols="25" rows="8">
Go ahead - write something...
</textarea>
</span>
</div>
<div class="spacer">
</div>
</form>
</div>
Существует почти наверняка ответ, который включает применение display:table и display:table-ячейка к рассматриваемым элементам. Который должен сказать... нет.