我有一个简单的评论页面,用户在textarea中输入文本,点击评论按钮将评论发送到php页面:
<?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的所有内容。我错过了什么吗?
答案 0 :(得分:2)
strip_tags()
似乎没必要。
相反,你应该
当您在自己的类中隐藏MySQL实现时,我看不到您如何实现它们。如何逃避或准备取决于您使用的MySQL接口。
请注意,mysql_*()
已弃用。你应该使用mysqli或PDO。
答案 1 :(得分:2)
你应该使用mysqli_real_escape_string()来转义直接来自用户的所有输入! 否则它不仅不能正常工作,而且对黑客攻击也非常不安全。 (MySQL的喷射)