0
我正在寻找更正式正确和独立的解决方案来将我的数据存储到我的数据库和Web应用程序中。我在几个月里听到很多意见,但我不确定女巫是否正确。计划让我的web应用程序更具可扩展性我认为将实际和未转义的数据存储在数据库中更方便,您是否同意这一点?如何在Web应用程序中存储和转义数据?
现在我正在使用这个解决方案,一个用PHP5,XHTML和MySQLi伪代码的例子。 我到处使用UTF-8和没有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>
这是正确的,完整和安全?一些建议?
你认为我应该使用用htmlspecialchars(),而不是ヶ辆()?谢谢! – 2010-11-26 14:35:15