Я ищу более формально правильное и независимое решение для хранения моих данных в моих базах данных и веб-приложениях.Я слышал много мнений за несколько месяцев, но я не уверен, что ведьма верна.Планируя сделать мое веб-приложение более масштабируемым, я думаю, что удобнее хранить реальные и неэкранированные данные в базе данных, вы согласны с этим?
Теперь я использую это решение, пример с PHP5, XHTMLи псевдокод MySQLi.Я использую везде UTF-8 и no magic_quotes .
Обработка данных:
<?php
// catching data from a simple input form
$id_profile = $_POST['id_profile'];
$details['name'] = $_POST['name'];
$details['text'] = $_POST['text'];
// filter $details
foreach($details as &$item) { $item = trim($item); /* some stuff and other filters but no addslashes() */ }
// Preparing and doing the query
$stmt = $mysqli->prepare("
UPDATE profiles
SET name = ?, text = ?
WHERE id_profile = ? ");
$stmt->bind_param('ssi', $details['name'], $details['text'], $id_profile);
$stmt->execute();
// [...]
Так что в моей базе данных есть реальнаявведенные данные без обратной косой черты.Затем, когда мне нужно вывести свой текст в точку моей страницы (включая формы, таблицы, кнопки, поля ввода, поля пароля и все атрибуты DOM), я использую эту маленькую функцию для экранирования:
<?php
//a little escape function
function e($s) { return htmlentities($s, ENT_QUOTES, 'UTF-8'); }
// Preparing and doing the query
$stmt = $mysqli->prepare("
SELECT name, text
FROM profiles
WHERE id_profile = ? ");
$stmt->bind_param('i', $_POST['id_profile']);
$stmt->execute();
$stmt->bind_result($name, $text);
?>
<input type="text" id="name" value="<?=e($name) ?>"> <br />
<input type="text" id="text" value="<?=e($text) ?>"> <br />
<table>
<tr>
<td><?=e($name) ?></td>
<td><?=e($text) ?></td>
<td>
Этоправильно, полно и безопасно?Некоторые предложения?