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