В CSS, как я получаю столбец фиксированной ширины левой стороны с таблицей правой стороны, которая использует остальную часть ширины?

Как вы можете видеть, люди предлагают вам максимально использовать подготовленные заявления. Это не так, но когда ваш запрос выполняется всего один раз за процесс, будет небольшое снижение производительности.

Я столкнулся с этой проблемой, но я думаю, что решил ее в очень сложном пути - как хакеры используют, чтобы избежать использования кавычек. Я использовал это в сочетании с эмулированными подготовленными заявлениями. Я использую его, чтобы предотвратить все возможные типы инъекций SQL.

Мой подход:

  • Если вы ожидаете, что ввод будет целым, убедитесь, что он действительно целое число. В языке с переменным типом, таком как PHP, этот очень важен. Вы можете использовать, к примеру, это очень простое, но мощное решение: sprintf("SELECT 1,2,3 FROM table WHERE 4 = %u", $input);
  • Если вы ожидаете чего-то еще от целого шестнадцатеричного значения. Если вы отбросите его, вы полностью избежите ввода. В C / C ++ есть функция, называемая mysql_hex_string() , в PHP вы можете использовать bin2hex() . Не беспокойтесь о том, что экранированная строка будет иметь размер в 2 раза по сравнению с исходной длиной, потому что даже если вы используете mysql_real_escape_string, PHP должен выделять одну и ту же емкость ((2*input_length)+1), что то же самое.
  • hex метод часто используется при передаче двоичных данных, но я не вижу причин, почему бы не использовать его во всех данных для предотвращения атак SQL-инъекций. Обратите внимание, что вам необходимо предварительно добавить данные с помощью 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')

Hex - идеальный выход.

Разница между функцией UNHEX и префиксом 0x

В комментариях было некоторое обсуждение, поэтому я, наконец, хочу дать понять. Эти два подхода очень похожи, но в некоторых отношениях они немного различаются:

Префикс ** 0x ** может использоваться только для столбцов данных, таких как char, varchar, text, block, binary, и т. д. Кроме того, его использование немного сложно, если вы собираетесь вставить пустую строку. Вам придется полностью заменить его на '', или вы получите сообщение об ошибке.

UNHEX () работает в любом столбце; вам не нужно беспокоиться о пустой строке.


Hex-методы часто используются в качестве атак

Обратите внимание, что этот шестиугольный метод часто используется как атака SQL-инъекции, где целые числа точно так же, как и строки mysql_real_escape_string. Тогда вы можете избежать использования кавычек.

Например, если вы просто делаете что-то вроде этого:

"SELECT title FROM article WHERE id = " . mysql_real_escape_string($_GET["id"])

атака может очень легко ввести вас . Рассмотрим следующий введенный код, возвращенный из вашего скрипта:

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

И тогда просто выберите нужные данные. Разве это не круто?

Но если кодер инъекционного сайта будет шестнадцатеричным, инъекция не будет возможна, потому что запрос будет выглядеть следующим образом: SELECT ... WHERE id = UNHEX('2d312075...3635')

37
задан Jörn Hees 26 May 2015 в 14:30
поделиться

9 ответов

<div style="width: 200px;background-color: #FFFFCC; float: left;">
Left column
</div>

<div style="margin-left: 200px; background-color: #CCFFFF">
Right column
</div>

, Который должен сделать это (очевидно, реализация будет варьироваться на основе того, где это находится на странице, но я думаю, что это - понятие, которое Вы ищете).

47
ответ дан Derek H 27 November 2019 в 04:28
поделиться

Как Sparr говорит, существует CSS, который конкретно отвечает этому требованию, потому что не действительно возможно сделать это любой другой путь без различного, возможно недопустимые компромиссы, и это display:table, display:table-cell, и т.д.

, К сожалению, Internet Explorer до Internet Explorer 8 не поддерживает эти режимы отображения, таким образом, проблема не действительно с CSS, но с отказом браузеров (на самом деле Internet Explorer, другие в порядке) поддерживать CSS соответственно.

хорошие новости - то, что это изменяется, и в свое время, у нас будет надлежащее решение для CSS. Тем временем выберите один из компромиссов в других ответах.

0
ответ дан Peter Mortensen 9 October 2019 в 22:46
поделиться

Я думаю, что это - то, что Вы ищете:

<table style='width: 100%;'>
  <tr>
    <td style='width: 200px;'></td>
    <td></td>
  </tr>
</table>

Благодарят меня позже. =P

(я, очевидно, шучу.... вид...)

12
ответ дан Paolo Bergantino 27 November 2019 в 04:28
поделиться

это , что Вы ищете?

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 лет и меня, все еще изучая интересные приемы каждый день.

10
ответ дан misterManSam 27 November 2019 в 04:28
поделиться

Во-первых, я рекомендовал бы книги CSS Eric Meyer, а также ссылка CSS в сети: Список А Независимо . Я использую CSS экстенсивно в моей работе, и я думаю, что стал довольно хорошим с ним.

Со всем тем сказанным: сделайте что работы. Я был через точно боль, которую Вы только что испытали. В конце я полагал, что не стоило ставить под угрозу мой дизайн только, чтобы быть в состоянии сказать, что я не использовал таблицы.

Помните: Вам не платят, чтобы сделать CSS - Вам платят для записи рабочего программного обеспечения.

5
ответ дан Mark Brittingham 27 November 2019 в 04:28
поделиться

Что-то вроде этого:

<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.

1
ответ дан David Z 27 November 2019 в 04:28
поделиться

Я люблю, как CSS все еще берет полную страницу кода для дублирования пары строк использования таблицы.

После ведения войны CSS, я пришел к выводу, что "чистый" находится в глазу наблюдателя и переместились в больше, "позвольте нам просто использовать то, к чему приближаются работы".

CSS Использования на том, для чего это хорошо: то, чтобы заставлять вещи выглядеть симпатичными. Используйте DIV и ПРОМЕЖУТОК, когда Вы будете мочь. Но если Вы проводите день, пытаясь получить вещи выстроиться в линию прямо через все различные разновидности браузера, затем хлопните таблицу там и идите дальше. Не волнуйтесь, вопреки тому, что большинство людей, кажется, думает, щенок на самом деле не умрет.

1
ответ дан NotMe 27 November 2019 в 04:28
поделиться

Вы могли бы хотеть попробовать их:

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">
          &nbsp;
        </div>
      </form>
    </div>
1
ответ дан Peter Mortensen 27 November 2019 в 04:28
поделиться

Существует почти наверняка ответ, который включает применение display:table и display:table-ячейка к рассматриваемым элементам. Который должен сказать... нет.

0
ответ дан Sparr 27 November 2019 в 04:28
поделиться