Что лучший способ состоит в том, чтобы представить сценарий этапа в HTML?

Внимание: примерный код этого ответа (например, примерный код вопроса) использует расширение PHP mysql, которое устарело в PHP 5.5.0 и полностью удалено в PHP 7.0.0.

Если вы используете последнюю версию PHP, опция mysql_real_escape_string, описанная ниже, больше не будет доступна (хотя mysqli::escape_string является современным эквивалентом). В настоящее время опция mysql_real_escape_string имеет смысл только для устаревшего кода на старой версии PHP.


У вас есть два варианта - экранирование специальных символов в вашем unsafe_variable или использование параметризованный запрос. Оба будут защищать вас от SQL-инъекций. Параметрированный запрос считается лучшей практикой, но для его использования потребуется переходить на более новое расширение mysql в PHP.

Мы рассмотрим нижнюю строку удара, которая будет первой.

//Connect

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

//Disconnect

См. также информацию о функции mysql_real_escape_string .

Чтобы использовать параметризованный запрос, вам нужно использовать MySQLi , а не функции MySQL . Чтобы переписать ваш пример, нам понадобится что-то вроде следующего.

prepare("INSERT INTO table (column) VALUES (?)");

    // TODO check that $stmt creation succeeded

    // "s" means the database expects a string
    $stmt->bind_param("s", $unsafe_variable);

    $stmt->execute();

    $stmt->close();

    $mysqli->close();
?>

Ключевая функция, которую вы хотите прочитать, будет mysqli::prepare .

Также, как предложили другие, вы можете сочтет полезным / легче повысить уровень абстракции с помощью чего-то вроде PDO .

Обратите внимание, что случай вы спросили об этом довольно просто, и что более сложные случаи могут потребовать более сложных подходов. В частности:

  • Если вы хотите изменить структуру SQL на основе пользовательского ввода, параметризованные запросы не помогут, и требуемое экранирование не распространяется на mysql_real_escape_string. В этом случае вам лучше было бы пропускать вход пользователя через белый список, чтобы обеспечить доступ только «безопасных» значений.
  • Если вы используете целые числа от пользовательского ввода в состоянии и берете mysql_real_escape_string, вы столкнетесь с проблемой, описанной в Polynomial в комментариях ниже. Этот случай более сложный, поскольку целые числа не будут окружены кавычками, поэтому вы можете справиться, подтвердив, что пользовательский ввод содержит только цифры.
  • Есть, вероятно, другие случаи, о которых я не знаю. Вы можете найти , этот является полезным ресурсом для некоторых более тонких проблем, с которыми вы можете столкнуться.
29
задан Brian Tompsett - 汤莱恩 16 September 2016 в 10:40
поделиться

10 ответов

Я второй ересь:-)

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

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

Еще одна вещь - я предполагаю, что Вы держали бы необработанные данные в некотором другом формате сначала - возможно, база данных, или xml или некоторый другой структурированный текст?

В любом случае, получая его в формат xml и преобразовывая это к HTML с xslt может вполне освобождать когда дело доходит до игры с этим материалом.

8
ответ дан philsquared 28 November 2019 в 01:00
поделиться

Более надлежащий (семантически) и короче должен был бы использовать списки определения:

<dl>
   <dt>Jeff</dt>
   <dd>This sure is a nice website we've got now.</dd>
</dl>


dl {
  overflow:hidden;
}

dl dt {
  float:left;
  width:30%;
}

dl dd {
  float:left;
  width:70%;
}
34
ответ дан mplungjan 28 November 2019 в 01:00
поделиться

Я сказал бы

<dialog>
  <dt>Jeff
  <dd>This sure is a nice website we've got now.
  <dt>Joel
  <dd>It certainly is. By the way, working at FogCreek rocks.
  <dt>Jeff
  <dd>Of course it does. Have you played Rock Band yet? It's a lot of fun.
</dialog>

, как определено в HTML5.

, Конечно, Вам будет нужно <script>document.createElement('dialog');</script>, чтобы заставить IE делать что-то разумное и dialog { display:block; } в Вашем CSS, чтобы заставить его работать полностью.

11
ответ дан Ms2ger 28 November 2019 в 01:00
поделиться

Моим любимым примером повышения чего-то вроде этого является один из составных объектов XHTML Tantek http://tantek.com/presentations/2005/03/elementsofxhtml/ (проверьте бит разговора)

, Таким образом, это идет как так:

<ol>
  <li><cite>Jeff</cite>
    <blockquote><p>This sure is a nice website we've got now.</p><blockquote>
  </li>
  <li><cite>Joel</cite>
    <blockquote><p>It certainly is. By the way, working at FogCreek rocks.</p></blockquote>
  </li>
  ...etc...
</ol>

Не уверенный, как Вы отметили бы направления дальней части сцены и т.д., Возможно, Вы закончите тем, что создали новый микроформат:)

Также, что разметка имеет некоторые идеальные рычаги CSS с дискретными Строками в отличие от списка определения.

10
ответ дан roborourke 28 November 2019 в 01:00
поделиться

Я использовал бы заголовки и абзацы.

<div class="play">
    <h2>Jeff</h2>        
    <p>This sure is a nice website we've got now.</p>

    <h2>Joel</h2>
    <p>It certainly is. By the way, working at FogCreek rocks.</p>

    <h2>Jeff</h2>        
    <p>Of course it does. Have you played Rock Band yet? It's<br />
    a lot of fun.</p>
</div>

Со следующими стилями это расположило бы, когда Вы представили его:

.play h2 {
    float:left; 
    clear:left;
    width:100px;
    margin:0;
}
.play p {
    margin-left:100px;
}
4
ответ дан mplungjan 28 November 2019 в 01:00
поделиться

Избегайте "синдрома молотка саней" (если Ваш единственный инструмент является молотком, Вы пытаетесь рассматривать каждую проблему как гвоздь). HTML представление язык, не источник язык.

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

<content><<Hello,>> Forne smiled and thought: <<T Idiot.>></content>

Мой синтаксический анализатор вызовет пользовательский синтаксический анализатор для парсинга содержания <content>. В моем случае это создаст промежуточное дерево XML:

<content><say>Hello,</say> <char>Forne</char> smiled and thought: <think>Idiot.</think></content>

Это дерево тогда преобразовывается в HTML, TeX, PDF, безотносительно.

[РЕДАКТИРОВАНИЕ] Моя стратегия придумать компактный язык работает как это: Я запускаю с XML. Через некоторое время я смотрю на XML и пытаюсь видеть шаблоны. Тогда я думаю, как я мог выразить эти шаблоны более компактным способом 1.) как XML, 2.) как текст XML (с пользовательской разметкой) и 3.) как что-то еще полностью. Когда идея поражает меня, я пишу синтаксический анализатор для нового формата.

Откровенно говоря, синтаксические анализаторы записи, которые могут превратить что-то в XML для автоматической фоновой обработки, являются незначительной задачей сегодня.

4
ответ дан Aaron Digulla 28 November 2019 в 01:00
поделиться

IMO, который на самом деле является табличными данными. Первый столбец является динамиком, второй столбец является текстом.

, Если Вы хотите быть модными и настойчиво сторониться таблиц, тем не менее, чему я верю, совместимо с тем, что веб-знатоки диктуют этот сезон, структура как:

<div class="play">
  <div class="line">
    <div class="speaker">Jeff</div>
    <div class="text">This sure is a nice website we've got now. </div>
  </div>
  <div class="line">
    <div class="speaker">Joel</div>
    <div class="text">It certainly is. By the way, working at FogCreek rocks.</div>
  </div>
</div>

Тогда Вы управляете, как это размечает с соответствующим CSS.

, Если похоже, что Вы в основном пишете XML и используете CSS, чтобы определить, как это размечает, ну, в общем, поэтому, это - то, что веб-знатоки полагают, что необходимо делать, AFAICT.

4
ответ дан Barna Tekse 28 November 2019 в 01:00
поделиться

Таблицы являются способом пойти.

Что-либо еще как бездельничание с < div> s и css или XSLT просто перестраивает < table> но с c ** p синтаксис.

я пошел бы для трех или четырех зафиксированных ширин colums. (Любая нетривиальная игра собирается нуждаться в ремарках, специальных эффектах, звуковые эффекты и т.д.).

2
ответ дан James Anderson 28 November 2019 в 01:00
поделиться

Вы не собираетесь получать категорический ответ на этот вопрос, поскольку HTML имеет много разрывов, один из которых является этим - существуют некоторые очень основательные статьи, отмеченные точкой вокруг сети о его предмете, и хорошее место для запуска было бы статья Bruce Lawson с 2006 .

Рассмотрение, что никто не отвечает к вопросу, лучшее мы можем сделать, посмотреть на то, какие элементы, которые доступны нам и идут на наши собственные компромиссы, основанные на нашем (и сообщества) интерпретация инструкций.

мне лично нравится cite / blockquote и маршрут списка данных. Я знаю, что данные перечисляют вкус ни одного семантическая разметка, но я действительно полагаю, что намерение списков данных не состоит в том, чтобы перечислить определения данных просто способом словаря, но к парным данным, где ul с и ol с не может.

я провел много времени, думая о семантике, и одна вещь I (а также большинство других в поле) уверена в том, когда рассмотрение всех вопросов разметки - то, что таблицы не являются ответом на 99,9% вопросов о разметке (если это не табличные данные, где можно использовать th, caption тогда, таблицы должны действительно быть отброшены из материально-технических ресурсов). Однако я также сказал бы, что исключительно использование div с является также, вероятно, не правильным ответом.

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

1
ответ дан Tim Cooper 28 November 2019 в 01:00
поделиться

Если бы Вы хотите сделать это семантически, я использовал бы маркировки, что-то как:

<div class="script">
<label for="Jeff1">Jeff<label>
<div id="Jeff1">
  <p>This sure is a nice website we've got now.</p>
</div>

<label for="Joel1">Joel</label>
<div id="Joel1">
  <p>It certainly is.</p>
  <p>By the way, working at FogCreek rocks.</p>
</div>

<label for="Jeff2">Jeff</label>
<div id="Jeff2">
  <p>Of course it does.</p>
  <p>Have you played Rock Band yet? It's a lot of fun.</p>
</div>

</div>

, Который ухудшается довольно приятно и я думаю, что маркировка немного более подходит для того, что Вы пытаетесь сделать. И затем, в Вашей таблице стилей, я разработал бы его что-то как CSS Eran Galperin в качестве примера.

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

-2
ответ дан tsimon 28 November 2019 в 01:00
поделиться