2014-02-11 58 views
0

我有一個簡單的評論頁面,用戶輸入文本到文本區域和命中評論按鈕發送到PHP頁面的評論:如何將撇號從用戶輸入存儲到MySQL數據庫中?

<?php 
$reply = strip_tags($_POST['reply']); 
$comment_id = strip_tags($_POST['id']); 
$id = strip_tags($_POST['user_id']); 
$date = strip_tags($_POST['date']); 
$time = strip_tags($_POST['time']); 
$server_root = "./"; 
if(file_exists("{$server_root}include-sql/mysql.class.php")) 
{ 
    include_once("{$server_root}include-sql/mysql.class.php"); 
} 
include_once("{$server_root}config.php"); 
$db1; 
$db1 = new db_mysql($conf['db_hostname'], 
        $conf['db_username'], 
        $conf['db_password'], 
        $conf['db_name']); 
$db1->query("SET NAMES utf8"); 
$current_server_date = date('Y-m-d H:i:s');// Your local server time 
date_default_timezone_set('Asia/Istanbul'); 
$current_pc_date = date('Y-m-d H:i:s'); 
$sql = $db1->query(
    'INSERT INTO replies1 (reply, comment_id, date, time, timestamp, user_id) 
    VALUES ("$reply", $comment_id, "$date", "$time", "$current_pc_date", $id)'); 
?> 

的問題是:當用戶輸入與撇號它的任何評論不會將其存儲在數據庫中?爲什麼會發生?我的代碼有問題嗎?我添加了雙引號和stripe_tags。我錯過了什麼?

+1

你嘗試使用mysqli_real_escapre_string()嗎? – Martin

+0

這是因爲這些值全部發送到未過濾的查詢,並且未轉義。 'strip_tags()'是爲了以後輸出消毒HTML,但不做任何事情來逃避或清理數據庫輸入。我上面鏈接的問題徹底探索了你糾正這個問題的選擇(這是一個SQL注入漏洞); –

回答

2

您應該使用mysqli_real_escape_string()來跳過所有直接來自用戶的輸入! 否則它不僅不能正常工作,而且對黑客攻擊也非常不安全。 (mysql注入)

1

strip_tags()似乎沒有必要。

相反,你應該

  • 要麼逃避DB輸入適當
  • 或在首位使用準備好的語句。

當你在自己的類中隱藏你的MySQL實現時,我看不到你是如何實現這些的。如何逃避或準備取決於您使用的MySQL接口。

請注意,mysql_*()已棄用。你應該使用mysqli或PDO。

相關問題